summaryrefslogtreecommitdiff
path: root/Makefile
blob: 0900bbc160d6bdbf76643022cc7fcf76f5ee6372 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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)
PACKFILE = $(OBJDIR)/data.kpk
CORE = $(OBJDIR)/engine.o $(OBJDIR)/konwinlib.o $(OBJDIR)/konsofren.o \
	$(OBJDIR)/kontime.o $(OBJDIR)/koninput.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)/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 $@

tools: $(PACKER)

$(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

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) $(PACKFILE) $(OBJDIR)/assets.lst

.PHONY: all run clean tools pack