makefile (4994B)
1 # Interface: 2 # make all 3 # make format-all 4 # make run-all 5 # make one DIR=06_nuclear_recovery 6 # make format-one DIR=06_nuclear_recovery 7 # make run-one DIR=06_nuclear_recovery 8 # make time-linux-one DIR=06_nuclear_recovery 9 # make profile-one DIR=06_nuclear_recovery 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 SQUIGGLE_MORE=../../squiggle_more.c 22 MATH=-lm 23 OPENMP=-fopenmp 24 DEPS=$(SQUIGGLE) $(SQUIGGLE_MORE) $(MATH) $(OPENMP) 25 26 ## Flags 27 # DEBUG=-fsanitize=address,undefined 28 # DEBUG=-g 29 DEBUG= 30 WARN=-Wall -Wextra -Wdouble-promotion -Wconversion 31 STANDARD=-std=c99 32 WARNINGS=-Wall 33 OPTIMIZED=-O3 #-Ofast 34 35 ## Formatter 36 STYLE_BLUEPRINT=webkit 37 FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) 38 39 ## make all 40 all: 41 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 00_example_template/$(SRC) $(DEPS) -o 00_example_template/$(OUTPUT) 42 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 02_ci_beta/$(SRC) $(DEPS) -o 02_ci_beta/$(OUTPUT) 43 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 03_ci_beta_parallel/$(SRC) $(DEPS) -o 03_ci_beta_parallel/$(OUTPUT) 44 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 04_nuclear_war/$(SRC) $(DEPS) -o 04_nuclear_war/$(OUTPUT) 45 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 05_burn_10kg_fat/$(SRC) $(DEPS) -o 05_burn_10kg_fat/$(OUTPUT) 46 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 06_nuclear_recovery/$(SRC) $(DEPS) -o 06_nuclear_recovery/$(OUTPUT) 47 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 07_algebra/$(SRC) $(DEPS) -o 07_algebra/$(OUTPUT) 48 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 08_algebra_and_conversion/$(SRC) $(DEPS) -o 08_algebra_and_conversion/$(OUTPUT) 49 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 09_ergonomic_algebra/$(SRC) $(DEPS) -o 09_ergonomic_algebra/$(OUTPUT) 50 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 10_twitter_thread_example/$(SRC) $(DEPS) -o 10_twitter_thread_example/$(OUTPUT) 51 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 11_billion_lognormals_paralell/$(SRC) $(DEPS) -o 11_billion_lognormals_paralell/$(OUTPUT) 52 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 12_time_to_botec_parallel/$(SRC) $(DEPS) -o 12_time_to_botec_parallel/$(OUTPUT) 53 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 13_parallelize_min/$(SRC) $(DEPS) -o 13_parallelize_min/$(OUTPUT) 54 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 14_check_confidence_interval/$(SRC) $(DEPS) -o 14_check_confidence_interval/$(OUTPUT) 55 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 15_time_to_botec_custom_mixture/$(SRC) $(DEPS) -o 15_time_to_botec_custom_mixture/$(OUTPUT) 56 57 format-all: 58 $(FORMATTER) 00_example_template/$(SRC) 59 $(FORMATTER) 01_sample_from_cdf/$(SRC) 60 $(FORMATTER) 02_ci_beta/$(SRC) 61 $(FORMATTER) 03_ci_beta_parallel/$(SRC) 62 $(FORMATTER) 04_nuclear_war/$(SRC) 63 $(FORMATTER) 05_burn_10kg_fat/$(SRC) 64 $(FORMATTER) 06_nuclear_recovery/$(SRC) 65 $(FORMATTER) 07_algebra/$(SRC) 66 $(FORMATTER) 08_algebra_and_conversion/$(SRC) 67 $(FORMATTER) 09_ergonomic_algebra/$(SRC) 68 $(FORMATTER) 10_twitter_thread_example/$(SRC) 69 $(FORMATTER) 11_billion_lognormals_paralell/$(SRC) 70 $(FORMATTER) 12_time_to_botec_parallel/$(SRC) 71 $(FORMATTER) 13_parallelize_min/$(SRC) 72 $(FORMATTER) 14_check_confidence_interval/$(SRC) 73 74 run-all: 75 00_example_template/$(OUTPUT) 76 01_sample_from_cdf/$(OUTPUT) 77 02_ci_beta/$(OUTPUT) 78 03_ci_beta_parallel/$(OUTPUT) 79 04_nuclear_war/$(OUTPUT) 80 05_burn_10kg_fat/$(OUTPUT) 81 06_nuclear_recovery/$(OUTPUT) 82 07_algebra/$(OUTPUT) 83 08_algebra_and_conversion/$(OUTPUT) 84 09_ergonomic_algebra/$(OUTPUT) 85 10_twitter_thread_example/$(OUTPUT) 86 11_billion_lognormals_paralell/$(OUTPUT) 87 12_time_to_botec_parallel/$(OUTPUT) 88 13_parallelize_min/$(OUTPUT) 89 14_check_confidence_interval/$(OUTPUT) 90 91 ## make one DIR=06_nuclear_recovery 92 one: $(DIR)/$(SRC) 93 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) $(DIR)/$(SRC) $(DEPS) -o $(DIR)/$(OUTPUT) 94 95 ## make format-one DIR=06_nuclear_recovery 96 format-one: $(DIR)/$(SRC) 97 $(FORMATTER) $(DIR)/$(SRC) 98 99 ## make run-one DIR=06_nuclear_recovery 100 run-one: $(DIR)/$(OUTPUT) 101 $(DIR)/$(OUTPUT) && echo 102 103 ## make time-linux-one DIR=06_nuclear_recovery 104 time-linux-one: $(DIR)/$(OUTPUT) 105 @echo "Requires /bin/time, found on GNU/Linux systems" && echo 106 @echo "Running 100x and taking avg time $(DIR)/$(OUTPUT)" 107 @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: |" | sed 's|$$|ms|' && echo 108 109 ## e.g., make profile-linux-one DIR=06_nuclear_recovery 110 profile-linux-one: 111 echo "Requires perf, which depends on the kernel version, and might be in linux-tools package or similar" 112 echo "Must be run as sudo" 113 $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) $(DIR)/$(SRC) $(DEPS) -o $(DIR)/$(OUTPUT) 114 # $(CC) $(SRC) $(DEPS) -o $(OUTPUT) 115 sudo perf record $(DIR)/$(OUTPUT) 116 sudo perf report 117 rm perf.data