114 lines
3.3 KiB
Makefile
114 lines
3.3 KiB
Makefile
.PHONY: all clean
|
|
|
|
# Define required raylib variables
|
|
PROJECT_NAME ?= KleiaxSnake
|
|
RAYLIB_VERSION ?= 4.2.0
|
|
RAYLIB_PATH ?= ..\..
|
|
|
|
# Define compiler path on Windows
|
|
COMPILER_PATH ?= C:/raylib/w64devkit/bin
|
|
|
|
PLATFORM ?= PLATFORM_DESKTOP
|
|
|
|
DESTDIR ?= /usr/local
|
|
RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib
|
|
RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include
|
|
|
|
# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
|
|
RAYLIB_LIBTYPE ?= STATIC
|
|
|
|
# Build mode for project: DEBUG or RELEASE
|
|
BUILD_MODE ?= DEBUG
|
|
|
|
ifeq ($(OS),Windows_NT)
|
|
PLATFORM_OS=WINDOWS
|
|
export PATH := $(COMPILER_PATH):$(PATH)
|
|
endif
|
|
|
|
RAYLIB_RELEASE_PATH ?= $(RAYLIB_PATH)/src
|
|
EXAMPLE_RUNTIME_PATH ?= $(RAYLIB_RELEASE_PATH)
|
|
|
|
# Define default C compiler: gcc
|
|
# NOTE: define g++ compiler if using C++
|
|
CC = g++
|
|
|
|
# Define default make program: Mingw32-make
|
|
MAKE = mingw32-make
|
|
|
|
# Define compiler flags:
|
|
# -O0 defines optimization level (no optimization, better for debugging)
|
|
# -O1 defines optimization level
|
|
# -g include debug information on compilation
|
|
# -s strip unnecessary data from build -> do not use in debug builds
|
|
# -Wall turns on most, but not all, compiler warnings
|
|
# -std=c99 defines C language mode (standard C from 1999 revision)
|
|
# -std=gnu99 defines C language mode (GNU C from 1999 revision)
|
|
# -Wno-missing-braces ignore invalid warning (GCC bug 53119)
|
|
# -D_DEFAULT_SOURCE use with -std=c99 on Linux and PLATFORM_WEB, required for timespec
|
|
CFLAGS += -Wall -Wno-missing-braces
|
|
|
|
ifeq ($(BUILD_MODE),DEBUG)
|
|
CFLAGS += -g -O0
|
|
else
|
|
CFLAGS += -s -O1
|
|
endif
|
|
|
|
|
|
# Define include paths for required headers
|
|
# NOTE: Several external required libraries (stb and others)
|
|
INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external
|
|
INCLUDE_PATHS += -I./include
|
|
# INCLUDE_PATHS += -I./src
|
|
|
|
# Define library paths containing required libs.
|
|
LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
|
|
|
|
# Define any libraries required on linking
|
|
# if you want to link libraries (libname.so or libname.a), use the -lname
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
# Libraries for Windows desktop compilation
|
|
# NOTE: WinMM library required to set high-res timer resolution
|
|
LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm
|
|
endif
|
|
|
|
# Define a recursive wildcard function
|
|
rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
|
|
|
|
# Define all source files required
|
|
SRC_DIR = src
|
|
OBJ_DIR = obj
|
|
|
|
# Define all object files from source files
|
|
# SRC = $(call rwildcard, *.c, *.h)
|
|
SRC = $(call rwildcard, *.cpp, *.h)
|
|
# OBJS = $(SRC:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
|
|
OBJS ?= main.cpp
|
|
OBJS += src/Game.cpp
|
|
OBJS += src/Board.cpp
|
|
OBJS += src/raylibCpp.cpp
|
|
OBJS += src/Snake.cpp
|
|
|
|
MAKEFILE_PARAMS = $(PROJECT_NAME)
|
|
|
|
|
|
all:
|
|
$(MAKE) $(MAKEFILE_PARAMS)
|
|
|
|
# Project target defined by PROJECT_NAME
|
|
$(PROJECT_NAME): $(OBJS)
|
|
$(CC) -o $(PROJECT_NAME)$(EXT) $(OBJS) $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
|
|
|
|
# Compile source files
|
|
# NOTE: This pattern will compile every module defined on $(OBJS)
|
|
#%.o: %.c
|
|
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
|
|
$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM)
|
|
|
|
# Clean everything
|
|
clean:
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
del *.o *.exe /s
|
|
endif
|
|
@echo Cleaning done
|
|
|