squiggle.c

Self-contained Monte Carlo estimation in C99
Log | Files | Refs | README

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