4 LIBS = sdl2 SDL2_image glew
6 PKGFLAGS := $(shell pkg-config --cflags $(LIBS))
7 PKGLIBS := $(shell pkg-config --libs $(LIBS))
10 CPPFLAGS += $(PKGFLAGS)
14 LDXXFLAGS += $(PKGLIBS)
17 PROFILE_FLAGS = -DNDEBUG -O1 -g3
18 RELEASE_FLAGS = -DNDEBUG -O2
21 DEBUG_DIR := build/debug
22 PROFILE_DIR := build/profile
23 RELEASE_DIR := build/release
24 DIR := $(RELEASE_DIR) $(DEBUG_DIR) $(PROFILE_DIR) build
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)
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)
42 release: $(RELEASE_BIN)
48 profile: $(PROFILE_BIN)
56 cachegrind: blank.profile
57 valgrind ./blank.profile
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
67 rm -df $(OBJ) $(DEP) $(DIR)
70 rm -f $(BIN) cachegrind.out.* callgrind.out.*
72 .PHONY: all release debug profile run gdb cachegrind callgrind clean distclean
76 $(RELEASE_BIN): $(RELEASE_OBJ)
78 @$(LDXX) -o $@ $(CXXFLAGS) $(LDXXFLAGS) $(RELEASE_FLAGS) $^
80 $(DEBUG_BIN): $(DEBUG_OBJ)
82 @$(LDXX) -o $@ $(CXXFLAGS) $(LDXXFLAGS) $(DEBUG_FLAGS) $^
84 $(PROFILE_BIN): $(PROFILE_OBJ)
86 @$(LDXX) -o $@ $(CXXFLAGS) $(LDXXFLAGS) $(PROFILE_FLAGS) $^
88 $(RELEASE_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(RELEASE_DIR)
91 @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(RELEASE_FLAGS) -o $@ -MMD -MP -MF"$(@:.o=.d)" -MT"$@" $<
93 $(DEBUG_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(DEBUG_DIR)
96 @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEBUG_FLAGS) -o $@ -MMD -MP -MF"$(@:.o=.d)" -MT"$@" $<
98 $(PROFILE_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(PROFILE_DIR)
101 @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(PROFILE_FLAGS) -o $@ -MMD -MP -MF"$(@:.o=.d)" -MT"$@" $<