Files
scaffold/gmake.mk
T
2026-04-06 13:48:06 -04:00

175 lines
5.3 KiB
Makefile

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))