ifeq ($(OS),Windows_NT) CLOCK_SRC := src/platform/clock/win32.c else CLOCK_SRC := src/platform/clock/posix.c endif include config.mk ifeq ($(OS),Windows_NT) SHELL := cmd.exe GL_LIB := -lopengl32 LDFLAGS_PLAT := CFLAGS_PLAT := SKELE_INC := -I"C:/mingw64/include" SKELE_LIB := -L"C:/mingw64/lib" CLIENT_BIN := $(GAME_NAME)_client.exe GLCLIENT_BIN := $(GAME_NAME)_glclient.exe SERVER_BIN := $(GAME_NAME)_server.exe MKDIR = if not exist $(subst /,\,$(1)) mkdir $(subst /,\,$(1)) RMDIR = if exist $(subst /,\,$(1)) rd /s /q $(subst /,\,$(1)) else ifeq ($(shell uname),FreeBSD) GL_LIB := -lGL LDFLAGS_PLAT := -L/usr/local/lib CFLAGS_PLAT := -I/usr/local/include SKELE_INC := SKELE_LIB := CLIENT_BIN := $(GAME_NAME)_client GLCLIENT_BIN := $(GAME_NAME)_glclient SERVER_BIN := $(GAME_NAME)_server MKDIR = mkdir -p $(1) RMDIR = rm -rf $(1) else GL_LIB := -lGL LDFLAGS_PLAT := CFLAGS_PLAT := SKELE_INC := SKELE_LIB := CLIENT_BIN := $(GAME_NAME)_client GLCLIENT_BIN := $(GAME_NAME)_glclient SERVER_BIN := $(GAME_NAME)_server MKDIR = mkdir -p $(1) RMDIR = rm -rf $(1) endif # linking ifeq ($(LINK_TYPE),dynamic) LINK_SKELE := -lskele LINK_GLSKELE := -lglskele LINK_SKELESRV := -lskeleserver LINK_STK := -lstk else LINK_SKELE := -Wl,-Bstatic -lskele -Wl,-Bdynamic LINK_GLSKELE := -Wl,-Bstatic -lglskele -Wl,-Bdynamic LINK_SKELESRV := -Wl,-Bstatic -lskeleserver -Wl,-Bdynamic LINK_STK := -Wl,-Bstatic -lstk -Wl,-Bdynamic endif RELEASE_LDFLAGS := -s CFLAGS_BASE := -Wall -Wpedantic -I$(INC_DIR) -Iskele/include $(SKELE_INC) \ -std=c99 $(CFLAGS_PLAT) $(DEBUG_FLAGS) SOFT_CLIENT_SRCS := src/client/main.c GL_CLIENT_SRCS := src/gl_client/main.c SERVER_SRCS := src/server/main.c ALL_SOFT_SRCS := $(GAME_SRCS) $(SOFT_CLIENT_SRCS) ALL_GL_SRCS := $(GAME_SRCS) $(GL_CLIENT_SRCS) ALL_SERVER_SRCS := $(GAME_SRCS) $(SERVER_SRCS) SOFT_DEBUG_OBJS := $(ALL_SOFT_SRCS:%.c=obj/debug/soft/%.o) GL_DEBUG_OBJS := $(ALL_GL_SRCS:%.c=obj/debug/gl/%.o) SERVER_DEBUG_OBJS := $(ALL_SERVER_SRCS:%.c=obj/debug/server/%.o) SOFT_RELEASE_OBJS := $(ALL_SOFT_SRCS:%.c=obj/release/soft/%.o) GL_RELEASE_OBJS := $(ALL_GL_SRCS:%.c=obj/release/gl/%.o) SERVER_RELEASE_OBJS := $(ALL_SERVER_SRCS:%.c=obj/release/server/%.o) PREFIX ?= /usr MODE ?= debug .PHONY: all debug release client glclient server \ install uninstall clean run run_gl all: debug debug: \ $(BIN_DIR)/debug/$(CLIENT_BIN) \ $(BIN_DIR)/debug/$(GLCLIENT_BIN) \ $(BIN_DIR)/debug/$(SERVER_BIN) release: \ $(BIN_DIR)/release/$(CLIENT_BIN) \ $(BIN_DIR)/release/$(GLCLIENT_BIN) \ $(BIN_DIR)/release/$(SERVER_BIN) client: $(BIN_DIR)/debug/$(CLIENT_BIN) glclient: $(BIN_DIR)/debug/$(GLCLIENT_BIN) server: $(BIN_DIR)/debug/$(SERVER_BIN) run: client $(BIN_DIR)/debug/$(CLIENT_BIN) run_gl: glclient $(BIN_DIR)/debug/$(GLCLIENT_BIN) $(BIN_DIR)/debug/$(CLIENT_BIN): $(SOFT_DEBUG_OBJS) @$(call MKDIR,$(@D)) $(CC) -o $@ $^ $(SKELE_LIB) $(LINK_SKELE) $(LINK_STK) -lSDL3 $(LDFLAGS_PLAT) $(BIN_DIR)/debug/$(GLCLIENT_BIN): $(GL_DEBUG_OBJS) @$(call MKDIR,$(@D)) $(CC) -o $@ $^ $(SKELE_LIB) $(LINK_GLSKELE) $(LINK_STK) -lSDL3 $(GL_LIB) $(LDFLAGS_PLAT) $(BIN_DIR)/debug/$(SERVER_BIN): $(SERVER_DEBUG_OBJS) @$(call MKDIR,$(@D)) $(CC) -o $@ $^ $(SKELE_LIB) $(LINK_SKELESRV) $(LINK_STK) $(LDFLAGS_PLAT) $(BIN_DIR)/release/$(CLIENT_BIN): $(SOFT_RELEASE_OBJS) @$(call MKDIR,$(@D)) $(CC) $(RELEASE_LDFLAGS) -o $@ $^ $(SKELE_LIB) $(LINK_SKELE) $(LINK_STK) -lSDL3 $(LDFLAGS_PLAT) $(BIN_DIR)/release/$(GLCLIENT_BIN): $(GL_RELEASE_OBJS) @$(call MKDIR,$(@D)) $(CC) $(RELEASE_LDFLAGS) -o $@ $^ $(SKELE_LIB) $(LINK_GLSKELE) $(LINK_STK) -lSDL3 $(GL_LIB) $(LDFLAGS_PLAT) $(BIN_DIR)/release/$(SERVER_BIN): $(SERVER_RELEASE_OBJS) @$(call MKDIR,$(@D)) $(CC) $(RELEASE_LDFLAGS) -o $@ $^ $(SKELE_LIB) $(LINK_SKELESRV) $(LINK_STK) $(LDFLAGS_PLAT) obj/debug/soft/%.o: %.c @$(call MKDIR,$(@D)) $(CC) $(CFLAGS_BASE) -g -O0 -MMD -MP -c $< -o $@ obj/debug/gl/%.o: %.c @$(call MKDIR,$(@D)) $(CC) $(CFLAGS_BASE) -g -O0 -MMD -MP -c $< -o $@ obj/debug/server/%.o: %.c @$(call MKDIR,$(@D)) $(CC) $(CFLAGS_BASE) -g -O0 -MMD -MP -c $< -o $@ obj/release/soft/%.o: %.c @$(call MKDIR,$(@D)) $(CC) $(CFLAGS_BASE) -O2 -MMD -MP -c $< -o $@ obj/release/gl/%.o: %.c @$(call MKDIR,$(@D)) $(CC) $(CFLAGS_BASE) -O2 -MMD -MP -c $< -o $@ obj/release/server/%.o: %.c @$(call MKDIR,$(@D)) $(CC) $(CFLAGS_BASE) -O2 -MMD -MP -c $< -o $@ -include $(wildcard obj/debug/soft/*.d) -include $(wildcard obj/debug/gl/*.d) -include $(wildcard obj/debug/server/*.d) -include $(wildcard obj/release/soft/*.d) -include $(wildcard obj/release/gl/*.d) -include $(wildcard obj/release/server/*.d) install: install -d $(PREFIX)/bin install -m 755 $(BIN_DIR)/release/$(CLIENT_BIN) $(PREFIX)/bin/$(CLIENT_BIN) install -m 755 $(BIN_DIR)/release/$(GLCLIENT_BIN) $(PREFIX)/bin/$(GLCLIENT_BIN) install -m 755 $(BIN_DIR)/release/$(SERVER_BIN) $(PREFIX)/bin/$(SERVER_BIN) uninstall: rm -f $(PREFIX)/bin/$(CLIENT_BIN) rm -f $(PREFIX)/bin/$(GLCLIENT_BIN) rm -f $(PREFIX)/bin/$(SERVER_BIN) clean: @$(call RMDIR,$(OBJ_DIR)) @$(call RMDIR,$(BIN_DIR))