diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..51ef5f1 --- /dev/null +++ b/Makefile @@ -0,0 +1,239 @@ +SOURCE_DIR := src +BUILD_DIR := build +C_SOURCES := $(wildcard $(SOURCE_DIR)/*.c) +C_OBJECTS := $(patsubst $(SOURCE_DIR)/%.c, $(BUILD_DIR)/%.o, $(C_SOURCES)) + +OBJECTS := $(C_OBJECTS) +ENAME = ClassiCube +CFLAGS = -g -pipe -fno-math-errno +LDFLAGS = -g -rdynamic + +ifndef RM + # No prefined RM variable, try to guess OS default + ifeq ($(OS),Windows_NT) + RM = del + else + RM = rm -f + endif +endif + +# Enables dependency tracking (https://make.mad-scientist.net/papers/advanced-auto-dependency-generation/) +# This ensures that changing a .h file automatically results in the .c files using it being auto recompiled when next running make +# On older systems the required GCC options may not be supported - in which case just change TRACK_DEPENDENCIES to 0 +TRACK_DEPENDENCIES=1 + +ifndef $(PLAT) + ifeq ($(OS),Windows_NT) + PLAT = mingw + else + PLAT = $(shell uname -s | tr '[:upper:]' '[:lower:]') + endif +endif + +ifeq ($(PLAT),web) + CC = emcc + OEXT = .html + CFLAGS = -g + LDFLAGS = -s WASM=1 -s NO_EXIT_RUNTIME=1 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_STACK=1Mb --js-library $(SOURCE_DIR)/interop_web.js +endif + +ifeq ($(PLAT),mingw) + CC = gcc + OEXT = .exe + CFLAGS = -g -pipe -DUNICODE -fno-math-errno + LDFLAGS = -g + LIBS = -mwindows -lwinmm -limagehlp +endif + +ifeq ($(PLAT),linux) + CFLAGS = -g -pipe -fno-math-errno -DCC_BUILD_ICON + LIBS = -lX11 -lXi -lpthread -lGL -ldl +endif + +ifeq ($(PLAT),sunos) + CFLAGS = -g -pipe -fno-math-errno + LIBS = -lsocket -lX11 -lXi -lGL +endif + +ifeq ($(PLAT),darwin) + OBJECTS += $(BUILD_DIR)/Window_cocoa.o + CFLAGS = -g -pipe -fno-math-errno -DCC_BUILD_ICON + LIBS = + LDFLAGS = -rdynamic -framework Cocoa -framework OpenGL -framework IOKit -lobjc +endif + +ifeq ($(PLAT),freebsd) + CFLAGS = -g -pipe -I /usr/local/include -fno-math-errno -DCC_BUILD_ICON + LDFLAGS = -L /usr/local/lib -rdynamic + LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread +endif + +ifeq ($(PLAT),openbsd) + CFLAGS = -g -pipe -I /usr/X11R6/include -I /usr/local/include -fno-math-errno -DCC_BUILD_ICON + LDFLAGS = -L /usr/X11R6/lib -L /usr/local/lib -rdynamic + LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread +endif + +ifeq ($(PLAT),netbsd) + CFLAGS = -g -pipe -I /usr/X11R7/include -I /usr/pkg/include -fno-math-errno -DCC_BUILD_ICON + LDFLAGS = -L /usr/X11R7/lib -L /usr/pkg/lib -rdynamic + LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread +endif + +ifeq ($(PLAT),dragonfly) + CFLAGS = -g -pipe -I /usr/local/include -fno-math-errno -DCC_BUILD_ICON + LDFLAGS = -L /usr/local/lib -rdynamic + LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread +endif + +ifeq ($(PLAT),haiku) + OBJECTS += $(BUILD_DIR)/Platform_BeOS.o $(BUILD_DIR)/Window_BeOS.o + CFLAGS = -g -pipe -fno-math-errno + LDFLAGS = -g + LIBS = -lGL -lnetwork -lstdc++ -lbe -lgame -ltracker +endif + +ifeq ($(PLAT),beos) + OBJECTS += $(BUILD_DIR)/Platform_BeOS.o $(BUILD_DIR)/Window_BeOS.o + CFLAGS = -g -pipe + LDFLAGS = -g + LIBS = -lGL -lnetwork -lstdc++ -lbe -lgame -ltracker + TRACK_DEPENDENCIES=0 +endif + +ifeq ($(PLAT),serenityos) + LIBS = -lgl -lSDL2 +endif + +ifeq ($(PLAT),irix) + CC = gcc + LIBS = -lGL -lX11 -lXi -lpthread -ldl +endif + +ifdef SDL2 + CFLAGS += -DCC_WIN_BACKEND=CC_WIN_BACKEND_SDL2 + LIBS += -lSDL2 +endif +ifdef SDL3 + CFLAGS += -DCC_WIN_BACKEND=CC_WIN_BACKEND_SDL3 + LIBS += -lSDL3 +endif + + +ifdef TERMINAL + CFLAGS += -DCC_WIN_BACKEND=CC_WIN_BACKEND_TERMINAL -DCC_GFX_BACKEND=CC_GFX_BACKEND_SOFTGPU + LIBS := $(subst mwindows,mconsole,$(LIBS)) +endif + +default: $(PLAT) + +web: + $(MAKE) $(ENAME) PLAT=web +linux: + $(MAKE) $(ENAME) PLAT=linux +mingw: + $(MAKE) $(ENAME) PLAT=mingw +sunos: + $(MAKE) $(ENAME) PLAT=sunos +darwin: + $(MAKE) $(ENAME) PLAT=darwin +freebsd: + $(MAKE) $(ENAME) PLAT=freebsd +openbsd: + $(MAKE) $(ENAME) PLAT=openbsd +netbsd: + $(MAKE) $(ENAME) PLAT=netbsd +dragonfly: + $(MAKE) $(ENAME) PLAT=dragonfly +haiku: + $(MAKE) $(ENAME) PLAT=haiku +beos: + $(MAKE) $(ENAME) PLAT=beos +serenityos: + $(MAKE) $(ENAME) PLAT=serenityos +irix: + $(MAKE) $(ENAME) PLAT=irix + +# Default overrides +sdl2: + $(MAKE) $(ENAME) SDL2=1 +sdl3: + $(MAKE) $(ENAME) SDL3=1 +terminal: + $(MAKE) $(ENAME) TERMINAL=1 + +# Some builds require more complex handling, so are moved to +# separate makefiles to avoid having one giant messy makefile +dreamcast: + $(MAKE) -f misc/dreamcast/Makefile +saturn: + $(MAKE) -f misc/saturn/Makefile +psp: + $(MAKE) -f misc/psp/Makefile +vita: + $(MAKE) -f misc/vita/Makefile +ps1: + cmake --preset default misc/ps1 + cmake --build misc/ps1/build +ps2: + $(MAKE) -f misc/ps2/Makefile +ps3: + $(MAKE) -f misc/ps3/Makefile +xbox: + $(MAKE) -f misc/xbox/Makefile +xbox360: + $(MAKE) -f misc/xbox360/Makefile +n64: + $(MAKE) -f misc/n64/Makefile +ds: + $(MAKE) -f misc/ds/Makefile +3ds: + $(MAKE) -f misc/3ds/Makefile +gamecube: + $(MAKE) -f misc/gc/Makefile +wii: + $(MAKE) -f misc/wii/Makefile +wiiu: + $(MAKE) -f misc/wiiu/Makefile +switch: + $(MAKE) -f misc/switch/Makefile +os/2: + $(MAKE) -f misc/os2/Makefile +macclassic_68k: + $(MAKE) -f misc/macclassic/Makefile_68k +macclassic_ppc: + $(MAKE) -f misc/macclassic/Makefile_ppc + +clean: + $(RM) $(OBJECTS) + + +$(ENAME): $(BUILD_DIR) $(OBJECTS) + $(CC) $(LDFLAGS) -o $@$(OEXT) $(OBJECTS) $(LIBS) +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + + +# === Compiling with dependency tracking === +# NOTE: Tracking dependencies might not work on older systems - disable this if so +ifeq ($(TRACK_DEPENDENCIES), 1) +DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d +DEPFILES := $(patsubst $(SOURCE_DIR)/%.c, $(BUILD_DIR)/%.d, $(C_SOURCES)) +$(DEPFILES): + +$(C_OBJECTS): $(BUILD_DIR)/%.o : $(SOURCE_DIR)/%.c $(BUILD_DIR)/%.d + $(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@ + +include $(wildcard $(DEPFILES)) +# === Compiling WITHOUT dependency tracking === +else +$(C_OBJECTS): $(BUILD_DIR)/%.o : $(SOURCE_DIR)/%.c + $(CC) $(CFLAGS) -c $< -o $@ +endif + +# === Platform specific file compiling === +$(BUILD_DIR)/%.o: $(SOURCE_DIR)/%.m + $(CC) $(CFLAGS) -c $< -o $@ + +$(BUILD_DIR)/%.o: $(SOURCE_DIR)/%.cpp + $(CC) $(CFLAGS) -c $< -o $@ |