Makefile (5123B)
1 BIN = bin/phantasia 2 SMOKE = bin/ph-smoke 3 GAME_SMOKE = bin/ph-game-smoke 4 CONTENT_CHECK = bin/ph-content-check 5 ENGINE_LIB = bin/libph-engine.a 6 EXAMPLE = bin/ph-courier 7 RENDER_SMOKE = bin/ph-render-smoke 8 MAPC = bin/ph-mapc 9 OBJDIR = obj 10 MAPDIR = $(OBJDIR)/maps 11 MAPSRC = $(wildcard data/maps/*.txt) 12 MAPBIN = $(MAPSRC:data/maps/%.txt=$(MAPDIR)/%.phmap) 13 TILESET_SRC = assets/vendor/graphics/overworld-grass-biome/TilesetGrass/overworld_tileset_grass.png 14 TILESET_BMP = $(OBJDIR)/assets/overworld_tileset_grass.bmp 15 HERO_SRC = assets/vendor/graphics/base-character-16x16/Hero.png 16 HERO_BMP = $(OBJDIR)/assets/hero.bmp 17 ITEMS_SRC = assets/vendor/graphics/16x16-rpg-items/items.png 18 ITEMS_BMP = $(OBJDIR)/assets/items.bmp 19 CRITTERS_SRC = assets/vendor/graphics/16x16-animated-critters/16x16babies.png 20 CRITTERS_BMP = $(OBJDIR)/assets/critters.bmp 21 AUDIO = \ 22 assets/vendor/audio/calm-loop/meadow.wav \ 23 assets/vendor/audio/peacefull-ville/stonehollow.wav \ 24 assets/vendor/audio/battle-theme/battle.wav \ 25 assets/vendor/audio/rpg-sound-pack/attack.wav \ 26 assets/vendor/audio/rpg-sound-pack/hit.wav \ 27 assets/vendor/audio/rpg-sound-pack/spell.wav \ 28 assets/vendor/audio/rpg-sound-pack/menu.wav \ 29 assets/vendor/audio/rpg-sound-pack/pickup.wav \ 30 assets/vendor/audio/rpg-sound-pack/drop.wav \ 31 assets/vendor/audio/rpg-sound-pack/step.wav \ 32 assets/vendor/audio/rpg-sound-pack/interact.wav \ 33 assets/vendor/audio/rpg-sound-pack/trade.wav 34 35 ENGINE_SRC = src/engine/world.c src/engine/area.c src/engine/battle.c src/engine/save.c \ 36 src/engine/audio.c src/engine/render.c src/engine/clock.c src/engine/validate.c 37 GAME_SRC = src/game/content.c src/game/game.c src/game/validate.c src/game/replay.c 38 SRC = $(GAME_SRC) src/game/main.c 39 MAPC_SRC = src/tools/mapc.c src/game/content.c 40 CONFIG = config.h 41 42 OBJ = $(SRC:src/%.c=$(OBJDIR)/%.o) 43 ENGINE_OBJ = $(ENGINE_SRC:src/%.c=$(OBJDIR)/headless/%.o) 44 HEADLESS_GAME_OBJ = $(GAME_SRC:src/%.c=$(OBJDIR)/headless/%.o) 45 RENDER_OBJ = $(filter-out $(OBJDIR)/game/main.o,$(OBJ)) $(OBJDIR)/tests/render.o 46 DEP = $(ENGINE_OBJ:.o=.d) $(OBJ:.o=.d) $(HEADLESS_GAME_OBJ:.o=.d) \ 47 $(OBJDIR)/tests/render.d $(OBJDIR)/headless/tests/smoke.d \ 48 $(OBJDIR)/headless/tests/game.d $(OBJDIR)/headless/tests/validate.d $(OBJDIR)/headless/examples/courier.d \ 49 $(OBJDIR)/headless/game/presentation.d 50 51 SDL3_CFLAGS = $(shell pkg-config --cflags sdl3 2>/dev/null) 52 SDL3_LDLIBS = $(shell pkg-config --libs sdl3 2>/dev/null) 53 54 CPPFLAGS = -I. -Isrc 55 CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -O2 -MMD -MP 56 LDLIBS = -lm 57 58 ifneq ($(strip $(SDL3_LDLIBS)),) 59 SRC += src/engine/render_sdl.c src/engine/audio_sdl.c src/game/presentation.c 60 CPPFLAGS += -DPH_USE_SDL=1 61 CFLAGS += $(SDL3_CFLAGS) 62 LDLIBS += $(SDL3_LDLIBS) 63 else 64 CPPFLAGS += -DPH_USE_SDL=0 65 endif 66 67 .PHONY: all clean render-smoke smoke game-smoke engine-example content-check check 68 69 all: $(BIN) $(MAPBIN) $(TILESET_BMP) $(HERO_BMP) $(ITEMS_BMP) $(CRITTERS_BMP) 70 71 $(BIN): $(OBJ) $(ENGINE_LIB) $(MAPBIN) $(TILESET_BMP) $(HERO_BMP) $(ITEMS_BMP) $(CRITTERS_BMP) $(AUDIO) 72 @mkdir -p $(dir $@) 73 $(CC) $(OBJ) $(ENGINE_LIB) -o $@ $(LDLIBS) 74 75 $(SMOKE): $(HEADLESS_GAME_OBJ) $(OBJDIR)/headless/tests/smoke.o $(ENGINE_LIB) 76 @mkdir -p $(dir $@) 77 $(CC) $^ -o $@ -lm 78 79 $(CONTENT_CHECK): $(HEADLESS_GAME_OBJ) $(OBJDIR)/headless/tests/validate.o $(ENGINE_LIB) 80 $(CC) $^ -o $@ -lm 81 82 $(ENGINE_LIB): $(ENGINE_OBJ) 83 @mkdir -p $(dir $@) 84 $(AR) rcs $@ $^ 85 86 $(EXAMPLE): $(OBJDIR)/headless/examples/courier.o $(ENGINE_LIB) 87 $(CC) $^ -o $@ -lm 88 89 $(GAME_SMOKE): $(HEADLESS_GAME_OBJ) $(OBJDIR)/headless/tests/game.o $(ENGINE_LIB) 90 @mkdir -p $(dir $@) 91 $(CC) $^ -o $@ -lm 92 93 # Headless targets never receive SDL headers, compiler flags, or libraries. 94 $(OBJDIR)/headless/%.o: src/%.c $(CONFIG) 95 @mkdir -p $(dir $@) 96 $(CC) -I. -Isrc -DPH_USE_SDL=0 $(filter-out $(SDL3_CFLAGS),$(CFLAGS)) -c $< -o $@ 97 98 $(RENDER_SMOKE): $(RENDER_OBJ) $(ENGINE_LIB) $(MAPBIN) \ 99 $(TILESET_BMP) $(HERO_BMP) $(ITEMS_BMP) $(CRITTERS_BMP) $(AUDIO) 100 @mkdir -p $(dir $@) 101 $(CC) $(RENDER_OBJ) $(ENGINE_LIB) -o $@ $(LDLIBS) 102 103 $(MAPC): $(MAPC_SRC) $(CONFIG) 104 @mkdir -p $(dir $@) 105 $(CC) $(CPPFLAGS) $(CFLAGS) $(MAPC_SRC) -o $@ 106 107 $(OBJDIR)/%.o: src/%.c 108 @mkdir -p $(dir $@) 109 $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ 110 111 $(OBJ) $(OBJDIR)/tests/render.o: $(CONFIG) 112 113 $(CONFIG): 114 cp config.def.h $@ 115 116 $(MAPDIR)/%.phmap: data/maps/%.txt $(MAPC) 117 @mkdir -p $(dir $@) 118 $(MAPC) $< $@ 119 120 $(TILESET_BMP): $(TILESET_SRC) Makefile 121 @mkdir -p $(dir $@) 122 magick $< -background black -alpha remove -alpha off BMP3:$@ 123 124 $(HERO_BMP): $(HERO_SRC) 125 @mkdir -p $(dir $@) 126 magick $< -alpha off BMP3:$@ 127 128 $(ITEMS_BMP): $(ITEMS_SRC) 129 @mkdir -p $(dir $@) 130 magick $< BMP3:$@ 131 132 $(CRITTERS_BMP): $(CRITTERS_SRC) 133 @mkdir -p $(dir $@) 134 magick $< -alpha off BMP3:$@ 135 136 smoke: $(MAPBIN) $(SMOKE) 137 $(SMOKE) 138 139 game-smoke: $(MAPBIN) $(GAME_SMOKE) 140 $(GAME_SMOKE) 141 142 engine-example: $(EXAMPLE) 143 $(EXAMPLE) --smoke 144 145 content-check: $(MAPBIN) $(CONTENT_CHECK) 146 $(CONTENT_CHECK) 147 148 check: content-check smoke game-smoke engine-example render-smoke $(OBJDIR)/headless/game/presentation.o 149 150 render-smoke: $(RENDER_SMOKE) 151 SDL_AUDIODRIVER=dummy SDL_VIDEODRIVER=dummy $(RENDER_SMOKE) 152 153 clean: 154 rm -rf bin $(OBJDIR) 155 156 -include $(DEP)