Entropie git · main
Entropie festival game; first steps
C 88.5% Markdown 9.1% GLSL 2.3%git clone https://git.christianimmanuel.de/games/Entropie.gitwget https://git.christianimmanuel.de/games/Entropie/archive/Entropie.tar.gzentropie/Makefile raw
APP := entropie
VERSION := 2.50.0
PREFIX ?= /usr
BINDIR ?= $(PREFIX)/bin
DATADIR ?= $(PREFIX)/share/$(APP)
DESTDIR ?=
BUILD_DIR := build
CC ?= cc
PKG_CONFIG ?= pkg-config
PKGS := sdl3 sdl3-ttf
PKG_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PKGS))
PKG_LIBS := $(shell $(PKG_CONFIG) --libs $(PKGS))
# C23 (GCC 14+, Clang 18+); older compilers know it as c2x (GCC 9+, Clang 9+)
CSTD := $(shell echo 'int main(void){return 0;}' | $(CC) -std=c23 -x c -fsyntax-only - 2>/dev/null && echo c23 || echo c2x)
CFLAGS ?= -O2
CFLAGS += -std=$(CSTD) -Wall -Wextra -Wpedantic -MMD -MP
CPPFLAGS += -Isrc -I$(BUILD_DIR) $(PKG_CFLAGS)
LDLIBS += $(PKG_LIBS) -lGL -lm
SRCS := $(sort $(wildcard src/*.c src/*/*.c))
HDRS := $(sort $(wildcard src/*.h src/*/*.h))
ASSETS := $(sort $(wildcard assets/shaders/* assets/fonts/*))
OBJS := $(SRCS:src/%.c=$(BUILD_DIR)/%.o)
# Short md5 over all sources and assets: changes whenever any file changes.
BUILD_HASH := $(shell cat $(SRCS) $(HDRS) $(ASSETS) Makefile | md5sum | cut -c1-7)
BUILD_INFO := $(BUILD_DIR)/build_info.h
.PHONY: all clean install uninstall version FORCE
all: $(APP)
$(APP): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS)
@echo "$(APP) $(VERSION) (build $(BUILD_HASH))"
$(BUILD_DIR)/%.o: src/%.c | $(BUILD_INFO)
@mkdir -p $(dir $@)
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
# Rewritten only when its content changes, so unrelated files don't rebuild.
$(BUILD_INFO): FORCE
@mkdir -p $(BUILD_DIR)
@printf '#define APP_VERSION "%s"\n#define APP_BUILD "%s"\n#define ASSET_DIR "%s/"\n' \
"$(VERSION)" "$(BUILD_HASH)" "$(DATADIR)" > $@.tmp
@if cmp -s $@.tmp $@; then rm -f $@.tmp; else mv $@.tmp $@; fi
version:
@echo "$(APP) $(VERSION) (build $(BUILD_HASH))"
install: $(APP)
install -Dm755 $(APP) $(DESTDIR)$(BINDIR)/$(APP)
install -d $(DESTDIR)$(DATADIR)/shaders $(DESTDIR)$(DATADIR)/fonts
install -m644 assets/shaders/* $(DESTDIR)$(DATADIR)/shaders/
install -m644 assets/fonts/* $(DESTDIR)$(DATADIR)/fonts/
uninstall:
rm -f $(DESTDIR)$(BINDIR)/$(APP)
rm -rf $(DESTDIR)$(DATADIR)
clean:
rm -rf $(BUILD_DIR) $(APP)
-include $(OBJS:.o=.d)