# To launch with debug messages: G_MESSAGES_DEBUG=all ./librefront SRC_DIR := src COMMON_SRC := $(shell find $(SRC_DIR)/common -name '*.c') SERVER_SRC := $(shell find $(SRC_DIR)/server -name '*.c') CLIENT_SRC := $(shell find $(SRC_DIR)/client -name '*.c') COMMON_OBJ := $(patsubst $(SRC_DIR)/%.c, build/%.o, $(COMMON_SRC)) SERVER_OBJ := $(patsubst $(SRC_DIR)/%.c, build/%.o, $(SERVER_SRC)) CLIENT_OBJ := $(patsubst $(SRC_DIR)/%.c, build/%.o, $(CLIENT_SRC)) COMMON_DEP := $(COMMON_OBJ:.o=.d) SERVER_DEP := $(SERVER_OBJ:.o=.d) CLIENT_DEP := $(CLIENT_OBJ:.o=.d) CC := gcc LD := gcc STD := gnu23 RM := rm -f DEBUG ?= 1 COMMON_CFLAGS := -std=$(STD) -Werror -Wextra -Wall -MMD -MP -I$(SRC_DIR) `pkg-config --cflags glib-2.0` COMMON_LDFLAGS := -std=$(STD) -lm `pkg-config --libs glib-2.0 sdl3 sdl3-image` ifeq ($(DEBUG),1) COMMON_CFLAGS += -g -DDEBUG COMMON_LDFLAGS += -g else COMMON_CFLAGS += -O2 -DNDEBUG endif CLIENT_CFLAGS := $(COMMON_CFLAGS) # `pkg-config --cflags sdl3` CLIENT_LDFLAGS := $(COMMON_LDFLAGS) # `pkg-config --libs sdl3` SERVER_CFLAGS := $(COMMON_CFLAGS) SERVER_LDFLAGS := $(COMMON_LDFLAGS) CLIENT := librefront SERVER := librefront-headless .PHONY: all clean format all: $(CLIENT) $(SERVER) $(CLIENT): $(COMMON_OBJ) $(CLIENT_OBJ) $(LD) $^ -o $@ $(CLIENT_LDFLAGS) $(SERVER): $(COMMON_OBJ) $(SERVER_OBJ) $(LD) $^ -o $@ $(SERVER_LDFLAGS) build/common/%.o: $(SRC_DIR)/common/%.c @mkdir -p $(dir $@) $(CC) -c $< -o $@ $(COMMON_CFLAGS) build/client/%.o: $(SRC_DIR)/client/%.c @mkdir -p $(dir $@) $(CC) -c $< -o $@ $(CLIENT_CFLAGS) build/server/%.o: $(SRC_DIR)/server/%.c @mkdir -p $(dir $@) $(CC) -c $< -o $@ $(SERVER_CFLAGS) clean: $(RM) -r build/ $(CLIENT) $(SERVER) perf.data* massif.out* format: find $(SRC_DIR) -type f \( -name '*.c' -o -name '*.h' \) \ -exec sh -c 'tmp=$$(mktemp) || tmp=/tmp/indent.$$$$; \ indent -gnu "$$1" -o "$$tmp" && mv "$$tmp" "$$1"' _ {} \; -include $(COMMON_DEP) -include $(CLIENT_DEP) -include $(SERVER_DEP)