diff --git a/Makefile b/Makefile index 02e9da7..4e03ab6 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,9 @@ CC := g++ -m64 -std=c++17 OBJ_DIR := bin -$(shell mkdir -p $(OBJ_DIR)) SRC_DIR := . -#CFLAGS := -Og -g -Wall -Wextra -Wno-error=unused-function -pedantic -rdynamic -#CFLAGS := $(CFLAGS) -pg -ggdb3 -#CFLAGS := $(CFLAGS) -D__DEBUG -CFLAGS := -O4 -Wall -Wextra -Wno-error=unused-function +#CFLAGS := -Og -g -rdynamic -pg -ggdb3 -D__DEBUG +CFLAGS := -O2 +CFLAGS := $(CFLAGS) -Wall -Wextra -Wno-error=unused-function -pedantic EXEC := $(OBJ_DIR)/data SRC := $(wildcard $(SRC_DIR)/*.cpp) HEADER := $(wildcard $(SRC_DIR)/*.hpp) @@ -16,11 +14,14 @@ ifeq ($(OS), Windows_NT) endif OBJ := $(SRC:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.$(OBJ_EXT)) -.PHONY: all start clean mrproper +.PHONY: all start profile debug check r2 clean mrproper all: $(EXEC) -$(OBJ_DIR)/%.$(OBJ_EXT): $(SRC_DIR)/%.cpp $(SRC_DIR)/%.hpp +$(OBJ_DIR): + @mkdir -v $@ + +$(OBJ_DIR)/%.$(OBJ_EXT): $(SRC_DIR)/%.cpp $(SRC_DIR)/%.hpp | $(OBJ_DIR) @echo Compiling $< @$(CC) $(CFLAGS) -c $< -o $@ @@ -31,20 +32,43 @@ $(EXEC): $(OBJ) start: $(EXEC) @./$(EXEC) -profile: start +profile: start | check-gprof-works check-gprof2dot-works @gprof $(EXEC) gmon.out | gprof2dot | dot -Tpng -o output.png -debug: $(EXEC) +debug: $(EXEC) | check-gdb-works @gdb -q -tui $(EXEC) -x copies -check: $(EXEC) +check: $(EXEC) | check-valgrind-works @valgrind -q -s --leak-check=full --show-leak-kinds=all $(EXEC) -r2: $(EXEC) +r2: $(EXEC) | check-r2-works @r2 $(EXEC) clean: - @rm $(EXEC) gmon.out output.png + @rm -fv $(EXEC) gmon.out output.png -mrproper: - @rm -r $(OBJ_DIR) +mrproper: clean + @rm -rv $(OBJ_DIR) + +.PHONY: check-env +check-env: check-gprof2dot-works check-gprof-works check-gdb-works check-valgrind-works check-r2-works + +.PHONY: check-gprof2dot-works +check-gprof2dot-works: + @gprof2dot --help >/dev/null 2>&1 || (echo 'Please install gprof2dot.' && exit 1) + +.PHONY: check-gprof-works +check-gprof-works: + @gprof --version >/dev/null 2>&1 || (echo 'Please install gprof.' && exit 1) + +.PHONY: check-gdb-works +check-gdb-works: + @gdb --version >/dev/null 2>&1 || (echo 'Please install gdb.' && exit 1) + +.PHONY: check-valgrind-works +check-valgrind-works: + @valgrind --version >/dev/null 2>&1 || (echo 'Please install valgrind.' && exit 1) + +.PHONY: check-r2-works +check-r2-works: + @r2 -v >/dev/null 2>&1 || (echo 'Please install r2.' && exit 1)