]> git.localhorst.tv Git - blank.git/blob - Makefile
some code reorganization
[blank.git] / Makefile
1 CXX = g++ --std=c++11
2 LDXX = g++
3
4 LIBS = sdl2 SDL2_image glew
5
6 PKGFLAGS := $(shell pkg-config --cflags $(LIBS))
7 PKGLIBS := $(shell pkg-config --libs $(LIBS))
8
9 CPPFLAGS ?=
10 CPPFLAGS += $(PKGFLAGS)
11 CXXFLAGS ?=
12 CXXFLAGS += -Wall
13 LDXXFLAGS ?=
14 LDXXFLAGS += $(PKGLIBS)
15
16 DEBUG_FLAGS = -g3 -O0
17 PROFILE_FLAGS = -DNDEBUG -O1 -g3
18 RELEASE_FLAGS = -DNDEBUG -O2
19
20 SOURCE_DIR := src
21 DEBUG_DIR := build/debug
22 PROFILE_DIR := build/profile
23 RELEASE_DIR := build/release
24 DIR := $(RELEASE_DIR) $(DEBUG_DIR) $(PROFILE_DIR) build
25
26 LIB_SRC := $(wildcard $(SOURCE_DIR)/*/*.cpp)
27 BIN_SRC := $(wildcard $(SOURCE_DIR)/*.cpp)
28 SRC := $(LIB_SRC) $(BIN_SRC)
29 RELEASE_OBJ := $(patsubst $(SOURCE_DIR)/%.cpp, $(RELEASE_DIR)/%.o, $(SRC))
30 DEBUG_OBJ := $(patsubst $(SOURCE_DIR)/%.cpp, $(DEBUG_DIR)/%.o, $(SRC))
31 PROFILE_OBJ := $(patsubst $(SOURCE_DIR)/%.cpp, $(PROFILE_DIR)/%.o, $(SRC))
32 RELEASE_DEP := $(RELEASE_OBJ:.o=.d)
33 DEBUG_DEP := $(DEBUG_OBJ:.o=.d)
34 PROFILE_DEP := $(PROFILE_OBJ:.o=.d)
35 RELEASE_BIN := blank
36 DEBUG_BIN := blank.debug
37 PROFILE_BIN := blank.profile
38 OBJ := $(RELEASE_OBJ) $(DEBUG_OBJ) $(PROFILE_OBJ)
39 DEP := $(RELEASE_DEP) $(DEBUG_DEP) $(PROFILE_DEP)
40 BIN := $(RELEASE_BIN) $(DEBUG_BIN) $(PROFILE_BIN)
41
42 release: $(RELEASE_BIN)
43
44 all: $(BIN)
45
46 debug: $(DEBUG_BIN)
47
48 profile: $(PROFILE_BIN)
49
50 run: blank
51         ./blank
52
53 gdb: blank.debug
54         gdb ./blank.debug
55
56 cachegrind: blank.profile
57         valgrind ./blank.profile
58
59 callgrind: blank.profile
60         valgrind --tool=callgrind \
61                 --branch-sim=yes --cacheuse=yes --cache-sim=yes \
62                 --collect-bus=yes --collect-systime=yes --collect-jumps=yes \
63                 --dump-instr=yes --simulate-hwpref=yes --simulate-wb=yes \
64                 ./blank.profile -n 128 -t 16 --no-keyboard --no-mouse -d --no-vsync
65
66 clean:
67         rm -df $(OBJ) $(DEP) $(DIR)
68
69 distclean: clean
70         rm -f $(BIN) cachegrind.out.* callgrind.out.*
71
72 .PHONY: all release debug profile run gdb cachegrind callgrind clean distclean
73
74 -include $(DEP)
75
76 $(RELEASE_BIN): $(RELEASE_OBJ)
77         @echo link: $@
78         @$(LDXX) -o $@ $(CXXFLAGS) $(LDXXFLAGS) $(RELEASE_FLAGS) $^
79
80 $(DEBUG_BIN): $(DEBUG_OBJ)
81         @echo link: $@
82         @$(LDXX) -o $@ $(CXXFLAGS) $(LDXXFLAGS) $(DEBUG_FLAGS) $^
83
84 $(PROFILE_BIN): $(PROFILE_OBJ)
85         @echo link: $@
86         @$(LDXX) -o $@ $(CXXFLAGS) $(LDXXFLAGS) $(PROFILE_FLAGS) $^
87
88 $(RELEASE_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(RELEASE_DIR)
89         @mkdir -p "$(@D)"
90         @echo compile: $@
91         @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(RELEASE_FLAGS) -o $@ -MMD -MP -MF"$(@:.o=.d)" -MT"$@" $<
92
93 $(DEBUG_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(DEBUG_DIR)
94         @mkdir -p "$(@D)"
95         @echo compile: $@
96         @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEBUG_FLAGS) -o $@ -MMD -MP -MF"$(@:.o=.d)" -MT"$@" $<
97
98 $(PROFILE_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(PROFILE_DIR)
99         @mkdir -p "$(@D)"
100         @echo compile: $@
101         @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(PROFILE_FLAGS) -o $@ -MMD -MP -MF"$(@:.o=.d)" -MT"$@" $<
102
103 $(DIR):
104         @mkdir -p "$@"