Files
skele/gmake.mk
T
2026-04-06 13:27:44 -04:00

223 lines
7.2 KiB
Makefile

ifeq ($(OS),Windows_NT)
CLOCK_SRC := src/platform/clock/win32.c
INPUT_SRC := src/platform/client/input/sdl.c
else
CLOCK_SRC := src/platform/clock/posix.c
INPUT_SRC := src/platform/client/input/sdl.c
endif
include config.mk
ENGINE_SRCS := src/skele.c $(CLOCK_SRC)
SOFT_PLAT_SRCS := src/platform/client/video/sdl.c $(INPUT_SRC)
GL_PLAT_SRCS := src/platform/client/video/gl.c $(INPUT_SRC)
SOFT_CLIENT_SRCS := example/client/main.c
GL_CLIENT_SRCS := example/gl_client/main.c
SERVER_EXAMPLE := example/server/main.c
LIBSKELE_SRCS := $(ENGINE_SRCS) $(SOFT_PLAT_SRCS)
LIBGLSKELE_SRCS := $(ENGINE_SRCS) $(GL_PLAT_SRCS)
LIBSKELE_SRV_SRCS := $(ENGINE_SRCS)
ifeq ($(OS),Windows_NT)
SHELL := cmd.exe
LIBSKELE := $(BIN_DIR)/debug/libskele.a
LIBGLSKELE := $(BIN_DIR)/debug/libglskele.a
LIBSKELE_SRV := $(BIN_DIR)/debug/libskeleserver.a
SKELE_BIN := $(BIN_DIR)/debug/skele_client.exe
GLSKELE_BIN := $(BIN_DIR)/debug/glskele_client.exe
SERVER_BIN := $(BIN_DIR)/debug/skele_server.exe
LIBSKELE_R := $(BIN_DIR)/release/libskele.a
LIBGLSKELE_R := $(BIN_DIR)/release/libglskele.a
LIBSKELE_SRV_R := $(BIN_DIR)/release/libskeleserver.a
SKELE_BIN_R := $(BIN_DIR)/release/skele_client.exe
GLSKELE_BIN_R := $(BIN_DIR)/release/glskele_client.exe
SERVER_BIN_R := $(BIN_DIR)/release/skele_server.exe
LDFLAGS_PLAT :=
CFLAGS_PLAT :=
MKDIR = if not exist $(subst /,\,$(1)) mkdir $(subst /,\,$(1))
RMDIR = if exist $(subst /,\,$(1)) rd /s /q $(subst /,\,$(1))
else
LIBSKELE := $(BIN_DIR)/debug/libskele.a
LIBGLSKELE := $(BIN_DIR)/debug/libglskele.a
LIBSKELE_SRV := $(BIN_DIR)/debug/libskeleserver.a
SKELE_BIN := $(BIN_DIR)/debug/skele_client
GLSKELE_BIN := $(BIN_DIR)/debug/glskele_client
SERVER_BIN := $(BIN_DIR)/debug/skele_server
LIBSKELE_R := $(BIN_DIR)/release/libskele.a
LIBGLSKELE_R := $(BIN_DIR)/release/libglskele.a
LIBSKELE_SRV_R := $(BIN_DIR)/release/libskeleserver.a
SKELE_BIN_R := $(BIN_DIR)/release/skele_client
GLSKELE_BIN_R := $(BIN_DIR)/release/glskele_client
SERVER_BIN_R := $(BIN_DIR)/release/skele_server
LDFLAGS_PLAT :=
CFLAGS_PLAT :=
MKDIR = mkdir -p $(1)
RMDIR = rm -rf $(1)
endif
ifeq ($(OS),Windows_NT)
GL_LIB := -lopengl32
LDFLAGS_PLAT :=
CFLAGS_PLAT :=
else ifeq ($(shell uname),FreeBSD)
GL_LIB := -lGL
LDFLAGS_PLAT := -L/usr/local/lib
CFLAGS_PLAT := -I/usr/local/include
else
GL_LIB := -lGL
LDFLAGS_PLAT :=
CFLAGS_PLAT :=
endif
LINK_STK := -Wl,-Bstatic -lstk -Wl,-Bdynamic
RELEASE_LDFLAGS := -s
CFLAGS_BASE := -Wall -Wpedantic -I$(INC_DIR) -std=c99 $(CFLAGS_PLAT) $(DEBUG_FLAGS) \
-DGL_MAJOR=$(GL_MAJOR) -DGL_MINOR=$(GL_MINOR)
LIBSKELE_DEBUG_OBJS := $(LIBSKELE_SRCS:%.c=obj/debug/soft/%.o)
LIBGLSKELE_DEBUG_OBJS := $(LIBGLSKELE_SRCS:%.c=obj/debug/gl/%.o)
LIBSKELE_SRV_DEBUG_OBJS := $(LIBSKELE_SRV_SRCS:%.c=obj/debug/server/%.o)
SOFT_CLIENT_DEBUG_OBJS := $(SOFT_CLIENT_SRCS:%.c=obj/debug/soft/%.o)
GL_CLIENT_DEBUG_OBJS := $(GL_CLIENT_SRCS:%.c=obj/debug/gl/%.o)
SERVER_DEBUG_OBJS := $(SERVER_EXAMPLE:%.c=obj/debug/server/%.o)
LIBSKELE_RELEASE_OBJS := $(LIBSKELE_SRCS:%.c=obj/release/soft/%.o)
LIBGLSKELE_RELEASE_OBJS := $(LIBGLSKELE_SRCS:%.c=obj/release/gl/%.o)
LIBSKELE_SRV_RELEASE_OBJS := $(LIBSKELE_SRV_SRCS:%.c=obj/release/server/%.o)
SOFT_CLIENT_RELEASE_OBJS := $(SOFT_CLIENT_SRCS:%.c=obj/release/soft/%.o)
GL_CLIENT_RELEASE_OBJS := $(GL_CLIENT_SRCS:%.c=obj/release/gl/%.o)
SERVER_RELEASE_OBJS := $(SERVER_EXAMPLE:%.c=obj/release/server/%.o)
PREFIX ?= /usr
MODE ?= debug
.PHONY: all debug release skele glskele server libs \
install uninstall clean run run_gl
all: debug
debug: \
$(LIBSKELE) \
$(LIBGLSKELE) \
$(LIBSKELE_SRV) \
$(SKELE_BIN) \
$(GLSKELE_BIN) \
$(SERVER_BIN)
release: \
$(LIBSKELE_R) \
$(LIBGLSKELE_R) \
$(LIBSKELE_SRV_R) \
$(SKELE_BIN_R) \
$(GLSKELE_BIN_R) \
$(SERVER_BIN_R)
libs: $(LIBSKELE) $(LIBGLSKELE) $(LIBSKELE_SRV)
skele: $(LIBSKELE) $(SKELE_BIN)
glskele: $(LIBGLSKELE) $(GLSKELE_BIN)
server: $(LIBSKELE_SRV) $(SERVER_BIN)
run: skele
$(SKELE_BIN)
run_gl: glskele
$(GLSKELE_BIN)
$(LIBSKELE): $(LIBSKELE_DEBUG_OBJS)
@$(call MKDIR,$(@D))
$(AR) rcs $@ $^
$(LIBGLSKELE): $(LIBGLSKELE_DEBUG_OBJS)
@$(call MKDIR,$(@D))
$(AR) rcs $@ $^
$(LIBSKELE_SRV): $(LIBSKELE_SRV_DEBUG_OBJS)
@$(call MKDIR,$(@D))
$(AR) rcs $@ $^
$(LIBSKELE_R): $(LIBSKELE_RELEASE_OBJS)
@$(call MKDIR,$(@D))
$(AR) rcs $@ $^
$(LIBGLSKELE_R): $(LIBGLSKELE_RELEASE_OBJS)
@$(call MKDIR,$(@D))
$(AR) rcs $@ $^
$(LIBSKELE_SRV_R): $(LIBSKELE_SRV_RELEASE_OBJS)
@$(call MKDIR,$(@D))
$(AR) rcs $@ $^
$(SKELE_BIN): $(SOFT_CLIENT_DEBUG_OBJS) $(LIBSKELE)
@$(call MKDIR,$(@D))
$(CC) -o $@ $(SOFT_CLIENT_DEBUG_OBJS) -L$(BIN_DIR)/debug -lskele $(LINK_STK) -lSDL3 $(LDFLAGS_PLAT)
$(GLSKELE_BIN): $(GL_CLIENT_DEBUG_OBJS) $(LIBGLSKELE)
@$(call MKDIR,$(@D))
$(CC) -o $@ $(GL_CLIENT_DEBUG_OBJS) -L$(BIN_DIR)/debug -lglskele $(LINK_STK) -lSDL3 $(GL_LIB) $(LDFLAGS_PLAT)
$(SERVER_BIN): $(SERVER_DEBUG_OBJS) $(LIBSKELE_SRV)
@$(call MKDIR,$(@D))
$(CC) -o $@ $(SERVER_DEBUG_OBJS) -L$(BIN_DIR)/debug -lskeleserver $(LINK_STK) $(LDFLAGS_PLAT)
$(SKELE_BIN_R): $(SOFT_CLIENT_RELEASE_OBJS) $(LIBSKELE_R)
@$(call MKDIR,$(@D))
$(CC) $(RELEASE_LDFLAGS) -o $@ $(SOFT_CLIENT_RELEASE_OBJS) -L$(BIN_DIR)/release -lskele $(LINK_STK) -lSDL3 $(LDFLAGS_PLAT)
$(GLSKELE_BIN_R): $(GL_CLIENT_RELEASE_OBJS) $(LIBGLSKELE_R)
@$(call MKDIR,$(@D))
$(CC) $(RELEASE_LDFLAGS) -o $@ $(GL_CLIENT_RELEASE_OBJS) -L$(BIN_DIR)/release -lglskele $(LINK_STK) -lSDL3 $(GL_LIB) $(LDFLAGS_PLAT)
$(SERVER_BIN_R): $(SERVER_RELEASE_OBJS) $(LIBSKELE_SRV_R)
@$(call MKDIR,$(@D))
$(CC) $(RELEASE_LDFLAGS) -o $@ $(SERVER_RELEASE_OBJS) -L$(BIN_DIR)/release -lskeleserver $(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: release
install -d $(PREFIX)/lib
install -d $(PREFIX)/include/skele
install -m 644 $(LIBSKELE_R) $(PREFIX)/lib/libskele.a
install -m 644 $(LIBGLSKELE_R) $(PREFIX)/lib/libglskele.a
install -m 644 $(LIBSKELE_SRV_R) $(PREFIX)/lib/libskeleserver.a
cp -r include/* $(PREFIX)/include/skele/
install -d $(PREFIX)/bin
uninstall:
rm -f $(PREFIX)/lib/libskele.a
rm -f $(PREFIX)/lib/libglskele.a
rm -f $(PREFIX)/lib/libskeleserver.a
rm -rf $(PREFIX)/include/skele
clean:
@$(call RMDIR,$(OBJ_DIR))
@$(call RMDIR,$(BIN_DIR))