2023W-EFFPROG

Magic Hexagon.
Log | Files | Refs | README

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