summaryrefslogtreecommitdiff
path: root/makefile
blob: 76ee33eb7bb420942285c2e34ce74427d0e401cb (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

CC := gcc
CFLAGS := -Wall -MMD -MP -std=c99
LFLAGS := -lSDL3 -lGL

# ==============================================================================

EXEC := game

BUILD := build
BIN := $(BUILD)/bin
OBJ := $(BUILD)/obj

SRC := src

TEST := test
TESTBIN := $(TEST)/bin
TESTOBJ := $(TEST)/obj

# ==============================================================================

SRCS := $(shell find $(SRC) -name '*.c')
OBJS := $(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SRCS))
DEPS := $(OBJS:.o=.d)

LIBOBJS = $(filter-out $(OBJ)/main.o, $(OBJS))

TESTS := $(wildcard $(TEST)/*.c)
TESTOBJS := $(patsubst $(TEST)/%.c, $(TESTOBJ)/%.o, $(TESTS))
TESTBINS := $(patsubst $(TEST)/%.c, $(TESTBIN)/%, $(TESTS))
TESTDEPS := $(TESTOBJS:.o=.d)

# ==============================================================================

$(BIN)/$(EXEC): $(OBJS)
	@mkdir -p $(BIN)
	$(CC) -o $@ $^ $(LFLAGS)

$(OBJ)/%.o: $(SRC)/%.c
	@mkdir -p $(dir $@)
	$(CC) $(CFLAGS) -c -o $@ $<

.PHONY: run
run: ${BIN}/${EXEC}
	./${BIN}/${EXEC}

.PHONY: test
test: ${TESTBIN}/test_vec
	./run_tests.sh

$(TESTBIN)/%: $(TESTOBJS) $(LIBOBJS)
	@mkdir -p $(TESTBIN)
	$(CC) -o $@ $^ $(LFLAGS)

$(TESTOBJ)%.o: $(TEST)/%.c
	@mkdir -p $(dir $@)
	$(CC) $(CFLAGS) -c -I$(SRC) -o $@ $<

-include $(DEPS)

.PHONY: clean
clean:
	rm -rf ${BIN}
	rm -rf ${OBJ}
	rm -rf ${TESTBIN}
	rm -rf ${TESTOBJ}