PROGRAM = konengine SRCDIR = src KONDIR = kon EXTDIR = ext OBJDIR ?= obj EXE ?= MODEFLAGS ?= -O2 -DNDEBUG DEFS ?= LDLIBS ?= -lm MODOBJS ?= WARN = -std=c99 -Wall -Wextra -Wpedantic KONFLAGS = $(WARN) $(MODEFLAGS) $(DEFS) -I$(KONDIR) -I$(EXTDIR) EXTFLAGS = -std=gnu99 -w $(MODEFLAGS) $(DEFS) -I$(EXTDIR) COMPILE = @mkdir -p $(OBJDIR); echo "\# compile $@"; $(CC) $(KONFLAGS) -c COMPILEEXT = @mkdir -p $(OBJDIR); echo "\# compile $@"; $(CC) $(EXTFLAGS) -c ASSETDIR ?= assets PACKFLAGS ?= BIN = $(OBJDIR)/$(PROGRAM)$(EXE) PACKER = $(OBJDIR)/konpack$(EXE) MODELER = $(OBJDIR)/konmodel$(EXE) MZSURVEY = $(OBJDIR)/mzsurvey$(EXE) MZSCRIPT = $(OBJDIR)/mzscript$(EXE) KONS2C = $(OBJDIR)/kons2c$(EXE) MZMAP = $(OBJDIR)/mzmap$(EXE) EXAMPLES = modelview sound ui platform dialog script corridor hills sectorview EXAMPLEBINS = $(EXAMPLES:%=$(OBJDIR)/%$(EXE)) PACKFILE = $(OBJDIR)/data.kpk CORE = $(OBJDIR)/engine.o $(OBJDIR)/konwinlib.o $(OBJDIR)/konsofren.o \ $(OBJDIR)/kontime.o $(OBJDIR)/koninput.o $(OBJDIR)/konprogram.o OBJS = $(CORE) $(MODOBJS) all: $(BIN) $(BIN): $(OBJS) @echo "# link $@" @$(CC) -o $@ $(OBJS) $(LDLIBS) $(OBJDIR)/engine.o: $(SRCDIR)/engine.c $(KONDIR)/*.h $(COMPILE) $(SRCDIR)/engine.c -o $@ $(OBJDIR)/konwinlib.o: $(SRCDIR)/impl/konwinlib.c $(KONDIR)/konwinlib.h $(COMPILE) $(SRCDIR)/impl/konwinlib.c -o $@ $(OBJDIR)/konsofren.o: $(SRCDIR)/impl/konsofren.c $(KONDIR)/konsofren.h $(COMPILE) $(SRCDIR)/impl/konsofren.c -o $@ $(OBJDIR)/kontime.o: $(SRCDIR)/impl/kontime.c $(KONDIR)/kontime.h $(COMPILE) $(SRCDIR)/impl/kontime.c -o $@ $(OBJDIR)/koninput.o: $(SRCDIR)/impl/koninput.c $(KONDIR)/koninput.h $(KONDIR)/konwinlib.h $(COMPILE) $(SRCDIR)/impl/koninput.c -o $@ $(OBJDIR)/konfont.o: $(SRCDIR)/impl/konfont.c $(KONDIR)/konfont.h $(KONDIR)/konsofren.h $(EXTDIR)/stb_truetype.h $(COMPILE) $(SRCDIR)/impl/konfont.c -o $@ $(OBJDIR)/konsector.o: $(SRCDIR)/impl/konsector.c $(KONDIR)/konsector.h $(KONDIR)/konsofren.h $(KONDIR)/konmath.h $(COMPILE) $(SRCDIR)/impl/konsector.c -o $@ $(OBJDIR)/kontoml.o: $(SRCDIR)/impl/kontoml.c $(KONDIR)/kontoml.h $(COMPILE) $(SRCDIR)/impl/kontoml.c -o $@ # modules with a .c next to their header are normal modules, the single header libs go through src/impl $(OBJDIR)/%.o: $(KONDIR)/%.c $(KONDIR)/*.h $(EXTDIR)/*.h $(COMPILE) $< -o $@ $(OBJDIR)/stb_image.o: $(SRCDIR)/impl/stb_image.c $(EXTDIR)/stb_image.h $(COMPILEEXT) $(SRCDIR)/impl/stb_image.c -o $@ $(OBJDIR)/miniaudio.o: $(SRCDIR)/impl/miniaudio.c $(EXTDIR)/miniaudio.h $(COMPILEEXT) $(SRCDIR)/impl/miniaudio.c -o $@ # only built when ext/stb_vorbis.c exists, build.sh checks $(OBJDIR)/stb_vorbis.o: $(EXTDIR)/stb_vorbis.c $(COMPILEEXT) $(EXTDIR)/stb_vorbis.c -o $@ tools: $(PACKER) $(MODELER) $(MZSURVEY) $(MZSCRIPT) $(KONS2C) $(MZMAP) # every example is its own program, built from the same modules as the engine without engine.c examples: $(EXAMPLEBINS) $(OBJDIR)/%.o: examples/%.c $(KONDIR)/*.h $(COMPILE) $< -o $@ $(EXAMPLEBINS): $(OBJDIR)/%$(EXE): $(OBJDIR)/%.o $(filter-out $(OBJDIR)/engine.o,$(OBJS)) @echo "# link $@" @$(CC) -o $@ $^ $(LDLIBS) $(PACKER): tools/konpack.c $(KONDIR)/konpack.c $(KONDIR)/konpack.h @mkdir -p $(OBJDIR) @echo "# link $@" @$(CC) $(KONFLAGS) -DKONPACK_WRITER -o $@ tools/konpack.c $(KONDIR)/konpack.c # the converter is built without DEFS, it only needs the loader and the glTF reader TOOLFLAGS = $(WARN) $(MODEFLAGS) -I$(KONDIR) -I$(EXTDIR) $(OBJDIR)/cgltf.o: tools/cgltf.c $(EXTDIR)/cgltf.h @mkdir -p $(OBJDIR) @echo "# compile $@" @$(CC) -std=gnu99 -w $(MODEFLAGS) -I$(EXTDIR) -c tools/cgltf.c -o $@ $(MODELER): tools/konmodel.c $(OBJDIR)/cgltf.o $(KONDIR)/konmodel.c $(KONDIR)/konmodel.h $(KONDIR)/konassets.c $(KONDIR)/konpack.c $(SRCDIR)/impl/konsofren.c @echo "# link $@" @$(CC) $(TOOLFLAGS) -DKONSOFREN_3D -DKONMODEL_WRITER -o $@ tools/konmodel.c $(KONDIR)/konmodel.c $(KONDIR)/konassets.c $(KONDIR)/konpack.c $(SRCDIR)/impl/konsofren.c $(OBJDIR)/cgltf.o -lm # converters. they only read other programs' data, the engine is not linked in $(MZSURVEY): tools/mzsurvey.c $(KONDIR)/konjson.h @mkdir -p $(OBJDIR) @echo "# link $@" @$(CC) $(TOOLFLAGS) -o $@ tools/mzsurvey.c $(MZSCRIPT): tools/mzscript.c tools/konscriptc.h $(KONDIR)/konjson.h $(KONDIR)/konscript.c $(KONDIR)/konscript.h @mkdir -p $(OBJDIR) @echo "# link $@" @$(CC) $(TOOLFLAGS) -Itools -o $@ tools/mzscript.c $(KONDIR)/konscript.c $(KONS2C): tools/kons2c.c tools/konscriptc.h $(KONDIR)/konscript.c $(KONDIR)/konscript.h @mkdir -p $(OBJDIR) @echo "# link $@" @$(CC) $(TOOLFLAGS) -Itools -o $@ tools/kons2c.c $(KONDIR)/konscript.c $(MZMAP): tools/mzmap.c $(KONDIR)/konjson.h @mkdir -p $(OBJDIR) @echo "# link $@" @$(CC) $(TOOLFLAGS) -o $@ tools/mzmap.c pack: $(PACKER) @find $(ASSETDIR) -type f | sort > $(OBJDIR)/assets.lst $(PACKER) -c $(PACKFILE) $(PACKFLAGS) -b $(ASSETDIR) -l $(OBJDIR)/assets.lst run: $(BIN) ./$(BIN) clean: rm -f $(OBJDIR)/*.o $(BIN) $(PACKER) $(MODELER) $(MZSURVEY) $(MZSCRIPT) $(KONS2C) $(MZMAP) $(EXAMPLEBINS) $(PACKFILE) $(OBJDIR)/assets.lst .PHONY: all run clean tools pack examples