]> git.localhorst.tv Git - sdl-test7.git/blob - Makefile
added makefile
[sdl-test7.git] / Makefile
1 CXX = g++ --std=c++11
2 LDXX = g++
3
4 LIBS = sdl SDL_gfx SDL_image SDL_ttf
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 SRC := $(wildcard $(SOURCE_DIR)/*.cpp) $(wildcard $(SOURCE_DIR)/*/*.cpp)
27 RELEASE_OBJ := $(patsubst $(SOURCE_DIR)/%.cpp, $(RELEASE_DIR)/%.o, $(SRC))
28 DEBUG_OBJ := $(patsubst $(SOURCE_DIR)/%.cpp, $(DEBUG_DIR)/%.o, $(SRC))
29 PROFILE_OBJ := $(patsubst $(SOURCE_DIR)/%.cpp, $(PROFILE_DIR)/%.o, $(SRC))
30 RELEASE_DEP := $(RELEASE_OBJ:.o=.d)
31 DEBUG_DEP := $(DEBUG_OBJ:.o=.d)
32 PROFILE_DEP := $(PROFILE_OBJ:.o=.d)
33 RELEASE_BIN := sdl-test7
34 DEBUG_BIN := sdl-test7.debug
35 PROFILE_BIN := sdl-test7.profile
36 OBJ := $(RELEASE_OBJ) $(DEBUG_OBJ) $(PROFILE_OBJ)
37 DEP := $(RELEASE_DEP) $(DEBUG_DEP) $(PROFILE_DEP)
38 BIN := $(RELEASE_BIN) $(DEBUG_BIN) $(PROFILE_BIN)
39
40 release: $(RELEASE_BIN)
41
42 all: $(BIN)
43
44 debug: $(DEBUG_BIN)
45
46 profile: $(PROFILE_BIN)
47
48 run: sdl-test7
49         ./sdl-test7
50
51 gdb: sdl-test7.debug
52         gdb ./sdl-test7.debug
53
54 cachegrind: sdl-test7.profile
55         valgrind ./sdl-test7.profile
56
57 callgrind: sdl-test7.profile
58         valgrind --tool=callgrind \
59                 --branch-sim=yes --cacheuse=yes --cache-sim=yes \
60                 --collect-bus=yes --collect-systime=yes --collect-jumps=yes \
61                 --dump-instr=yes --simulate-hwpref=yes --simulate-wb=yes \
62                 ./sdl-test7.profile
63
64 clean:
65         rm -df $(OBJ) $(DEP) $(DIR)
66
67 distclean: clean
68         rm -f $(BIN) cachegrind.out.* callgrind.out.*
69
70 .PHONY: all release debug profile run gdb cachegrind callgrind clean distclean
71
72 -include $(DEP)
73
74 $(RELEASE_BIN): $(RELEASE_OBJ)
75         @echo link: $@
76         @$(LDXX) -o $@ $(CXXFLAGS) $(LDXXFLAGS) $(RELEASE_FLAGS) $^
77
78 $(DEBUG_BIN): $(DEBUG_OBJ)
79         @echo link: $@
80         @$(LDXX) -o $@ $(CXXFLAGS) $(LDXXFLAGS) $(DEBUG_FLAGS) $^
81
82 $(PROFILE_BIN): $(PROFILE_OBJ)
83         @echo link: $@
84         @$(LDXX) -o $@ $(CXXFLAGS) $(LDXXFLAGS) $(PROFILE_FLAGS) $^
85
86 $(RELEASE_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(RELEASE_DIR)
87         @mkdir -p "$(@D)"
88         @echo compile: $@
89         @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(RELEASE_FLAGS) -o $@ -MMD -MP -MF"$(@:.o=.d)" -MT"$@" $<
90
91 $(DEBUG_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(DEBUG_DIR)
92         @mkdir -p "$(@D)"
93         @echo compile: $@
94         @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEBUG_FLAGS) -o $@ -MMD -MP -MF"$(@:.o=.d)" -MT"$@" $<
95
96 $(PROFILE_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(PROFILE_DIR)
97         @mkdir -p "$(@D)"
98         @echo compile: $@
99         @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(PROFILE_FLAGS) -o $@ -MMD -MP -MF"$(@:.o=.d)" -MT"$@" $<
100
101 $(DIR):
102         @mkdir -p "$@"