Makefile (2688B)
1 # Makefile settings 2 CC = cc 3 RM = rm -f 4 CFLAGS =-Wall -O3 -DNDEBUG -funroll-loops -march=native -fwhole-program 5 # CFLAGS =-Wall -ggdb -O0 -fno-omit-frame-pointer 6 LD = cc 7 LDFLAGS =-g 8 9 # Project specific settings 10 SRC_DIR = ./magichex/src 11 TESTS_DIR = ./magichex/tests 12 BUILD_DIR = ./build 13 BIN_DIR = ./bin 14 SRC_LIST = $(wildcard $(SRC_DIR)/*.c) 15 OBJ_LIST = $(BUILD_DIR)/$(notdir $(SRC_LIST:.c=.o)) 16 17 .PHONY: all clean directories test test1 test2 test3 profile profile-nocheck 18 19 default: all 20 21 all: magichex 22 23 magichex: magichex.o directories 24 $(LD) $(LDFLAGS) $(OBJ_LIST) -o $(BIN_DIR)/$@ 25 26 magichex.o: $(SRC_DIR)/magichex.c directories 27 $(CC) $(CFLAGS) -c $(SRC_DIR)/magichex.c -o $(BUILD_DIR)/$@ 28 29 30 directories: 31 @mkdir -p $(BUILD_DIR) 32 @mkdir -p $(BIN_DIR) 33 34 test: test1 test2 test3 35 36 test1: magichex 37 @echo "Running test1: $(BIN_DIR)/magichex 4 3 14 33 30 34 39 6 24 20" 38 @$(BIN_DIR)/magichex 4 3 14 33 30 34 39 6 24 20 |\ 39 grep -v solution| \ 40 awk '/^leafs visited:/ {printf("\0")} /^leafs visited:/,/^$$/ {next} 1'|\ 41 sort -z|\ 42 tr '\0' '\n\n' |\ 43 diff --color -u $(TESTS_DIR)/reference-output - \ 44 && echo "-------- TEST1 SUCCESSFUL! --------" \ 45 || echo "-------- TEST1 FAILED! --------" 46 47 test2: magichex 48 @echo "Running test2: $(BIN_DIR)/magichex 3 2" 49 @$(BIN_DIR)/magichex 3 2 |\ 50 grep -v solution| \ 51 awk '/^leafs visited:/ {printf("\0")} /^leafs visited:/,/^$$/ {next} 1'|\ 52 sort -z|\ 53 tr '\0' '\n\n' |\ 54 diff --color -u $(TESTS_DIR)/reference-output-3-2 - \ 55 && echo "-------- TEST2 SUCCESSFUL! --------" \ 56 || echo "-------- TEST2 FAILED! --------" 57 58 test3: magichex 59 @echo "Running test3: $(BIN_DIR)/magichex 3 0" 60 @$(BIN_DIR)/magichex 3 0 |\ 61 grep -v solution| \ 62 awk '/^leafs visited:/ {printf("\0")} /^leafs visited:/,/^$$/ {next} 1'|\ 63 sort -z|\ 64 tr '\0' '\n\n' |\ 65 diff --color -u $(TESTS_DIR)/reference-output-3-0 - \ 66 && echo "-------- TEST3 SUCCESSFUL! --------" \ 67 || echo "-------- TEST3 FAILED! --------" 68 69 profile-with-test: magichex 70 perf stat -e cycles:u -e instructions:u -e branches:u -e branch-misses:u -e L1-dcache-load-misses:u $(BIN_DIR)/magichex 4 3 14 33 30 34 39 6 24 20 |\ 71 grep -v solution| \ 72 awk '/^leafs visited:/ {printf("\0")} /^leafs visited:/,/^$$/ {next} 1'|\ 73 sort -z|\ 74 tr '\0' '\n\n' |\ 75 diff --color -u $(TESTS_DIR)/reference-output - \ 76 && echo "-------- TEST SUCCESSFUL! --------" \ 77 || echo "-------- TEST FAILED! --------" 78 79 benchmark: magichex 80 perf stat -r 5 -d $(BIN_DIR)/magichex 4 3 14 33 30 34 39 6 24 20 81 82 profile: magichex 83 perf stat -e cycles:u -e instructions:u -e branches:u -e branch-misses:u -e L1-dcache-load-misses:u $(BIN_DIR)/magichex 4 3 14 33 30 34 39 6 24 20 84 85 clean: 86 rm -f $(BIN_DIR)/magichex $(BUILD_DIR)/*.o