makefile (3202B)
1 # Interface: 2 # make all 3 # make format-all 4 # make run-all 5 # make one DIR=01_one_sample 6 # make format-one DIR=01_one_sample 7 # make run-one DIR=01_one_sample 8 # make time-linux-one DIR=01_one_sample 9 # make profile-one DIR=01_one_sample 10 11 # Compiler 12 CC=gcc 13 # CC=tcc # <= faster compilation 14 15 # Main file 16 SRC=example.c 17 OUTPUT=example 18 19 ## Dependencies 20 SQUIGGLE=../../squiggle.c 21 MATH=-lm 22 DEPS=$(SQUIGGLE) $(MATH) 23 24 ## Flags 25 # DEBUG=-fsanitize=address,undefined -fanalyzer 26 # DEBUG=-g 27 # DEBUG= 28 WARN=-Wall -Wextra -Wdouble-promotion -Wconversion 29 STANDARD=-std=c99 30 OPTIMIZED=-O3 #-Ofast 31 32 ## Formatter 33 STYLE_BLUEPRINT=webkit 34 FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) 35 36 ## make all 37 all: 38 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 00_example_template/$(SRC) $(DEPS) -o 00_example_template/$(OUTPUT) 39 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 01_one_sample/$(SRC) $(DEPS) -o 01_one_sample/$(OUTPUT) 40 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 02_time_to_botec/$(SRC) $(DEPS) -o 02_time_to_botec/$(OUTPUT) 41 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 03_gcc_nested_function/$(SRC) $(DEPS) -o 03_gcc_nested_function/$(OUTPUT) 42 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 04_gamma_beta/$(SRC) $(DEPS) -o 04_gamma_beta/$(OUTPUT) 43 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 05_hundred_lognormals/$(SRC) $(DEPS) -o 05_hundred_lognormals/$(OUTPUT) 44 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 06_dissolving_fermi_paradox/$(SRC) $(DEPS) -o 06_dissolving_fermi_paradox/$(OUTPUT) 45 46 47 format-all: 48 $(FORMATTER) 00_example_template/$(SRC) 49 $(FORMATTER) 01_one_sample/$(SRC) 50 $(FORMATTER) 02_time_to_botec/$(SRC) 51 $(FORMATTER) 03_gcc_nested_function/$(SRC) 52 $(FORMATTER) 04_gamma_beta/$(SRC) 53 $(FORMATTER) 05_hundred_lognormals/$(SRC) 54 $(FORMATTER) 06_dissolving_fermi_paradox/$(SRC) 55 56 run-all: 57 00_example_template/$(OUTPUT) 58 01_one_sample/$(OUTPUT) 59 02_time_to_botec/$(OUTPUT) 60 03_gcc_nested_function/$(OUTPUT) 61 04_gamma_beta/$(OUTPUT) 62 05_hundred_lognormals/$(OUTPUT) 63 06_dissolving_fermi_paradox/$(OUTPUT) 64 65 ## make one DIR=01_one_sample 66 one: $(DIR)/$(SRC) 67 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) $(DIR)/$(SRC) $(DEPS) -o $(DIR)/$(OUTPUT) 68 69 ## make format-one DIR=01_one_sample 70 format-one: $(DIR)/$(SRC) 71 $(FORMATTER) $(DIR)/$(SRC) 72 73 ## make run-one DIR=01_one_sample 74 run-one: $(DIR)/$(OUTPUT) 75 $(DIR)/$(OUTPUT) && echo 76 77 ## make time-linux-one DIR=01_one_sample 78 time-linux-one: $(DIR)/$(OUTPUT) 79 @echo "Requires /bin/time, found on GNU/Linux systems" && echo 80 @echo "Running 100x and taking avg time $(DIR)/$(OUTPUT)" 81 @t=$$(/usr/bin/time -f "%e" -p bash -c 'for i in {1..100}; do $(DIR)/$(OUTPUT); done' 2>&1 >/dev/null | grep real | awk '{print $$2}' ); echo "scale=2; 1000 * $$t / 100" | bc | sed "s|^|Time using 1 thread: |" | sed 's|$$|ms|' && echo 82 83 ## e.g., make profile-linux-one DIR=01_one_sample 84 profile-linux-one: 85 echo "Requires perf, which depends on the kernel version, and might be in linux-tools package or similar" 86 echo "Must be run as sudo" 87 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) $(DIR)/$(SRC) $(DEPS) -o $(DIR)/$(OUTPUT) 88 # $(CC) $(SRC) $(DEPS) -o $(OUTPUT) 89 sudo perf record $(DIR)/$(OUTPUT) 90 sudo perf report 91 rm perf.data