phantasia

Phantasia - 2D SDL3 RPG prototype.
git clone git://git.beep.wimdupont.com/phantasia.git
Log | Files | Refs | README | LICENSE

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)