-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
148 lines (116 loc) · 4.2 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
export PEXECS ?= 10
export BENCHMARKS ?= som grmtools alacritty fd regex-redux binary-trees ripgrep
export EXPERIMENTS ?= gcvs premopt elision
export METRICS ?= perf mem
PWD != pwd
PYTHON = python3
VENV = $(PWD)/venv
PIP = $(VENV)/bin/pip
PYTHON_EXEC = $(VENV)/bin/python
ALLOY_REPO = https://github.com/jacob-hughes/alloy
ALLOY_VERSION = fix_stats
ALLOY_BOOTSTRAP_STAGE = 1
ALLOY_SRC = $(PWD)/alloy
CFGS = $(subst .,/,$(notdir $(patsubst %.config.toml,%,$(wildcard $(PWD)/configs/*))))
export ALLOY_DEFAULTS := $(addprefix gcvs/, perf mem)
export ALLOY_CFGS := $(filter-out $(ALLOY_DEFAULTS), $(CFGS))
LIBGC_REPO = https://github.com/jacob-hughes/bdwgc
LIBGC_VERSION = gc_reclaimed
LIBGC_SRC = $(PWD)/bdwgc
HEAPTRACK_REPO = https://github.com/kde/heaptrack
HEAPTRACK_VERSION = master
HEAPTRACK_SRC = $(PWD)/heaptrack
HEAPTRACK = $(HEAPTRACK_SRC)/bin
BENCHMARK_DIRS := $(addprefix $(PWD)/benchmarks/, $(BENCHMARKS))
export RESULTS_DIR = $(PWD)/results
RESULTS := $(foreach e,$(EXPERIMENTS),$(foreach b,$(BENCHMARKS),$(e)/$(b)))
PERF_RESULTS := $(foreach r,$(RESULTS),$(foreach m,$(METRICS),$(r)/$(m).csv))
PERF_RESULTS := $(addprefix $(RESULTS_DIR)/, $(PERF_RESULTS))
RESULTS := $(addprefix $(RESULTS_DIR)/, $(addsuffix /data.csv, $(RESULTS)))
export ALLOY_PATH = $(ALLOY_SRC)/bin
export LIBGC_PATH = $(LIBGC_SRC)/lib
export REBENCH_EXEC = $(VENV)/bin/rebench
export LD_LIBRARY_PATH = $(LIBGC_PATH)
export PLOTS_DIR = $(PWD)/plots
export REBENCH_PROCESSOR = $(PYTHON_EXEC) $(PWD)/process.py
ALLOY_TARGETS := $(addprefix $(ALLOY_PATH)/, $(ALLOY_DEFAULTS) $(ALLOY_CFGS))
XVFB_DISPLAY := :99
XVFB_CMD := Xvfb -ac $(XVFB_DISPLAY) -screen 0 1600x1200x16 -nolisten tcp > /dev/null 2>&1
all: build bench
.PHONY: venv
.PHONY: build build-alloy
.PHONY: bench plot
.PHONY: clean clean-alloy clean-results clean-plots clean-confirm
build-alloy: $(ALLOY_SRC) $(LIBGC_PATH) $(HEAPTRACK) $(ALLOY_TARGETS)
$(ALLOY_PATH)/%:
@echo $@
RUSTFLAGS="-L $(LIBGC_SRC)/lib" \
$(ALLOY_SRC)/x install \
--config $(PWD)/configs/$(subst /,.,$*).config.toml \
--stage $(ALLOY_BOOTSTRAP_STAGE) \
--set build.docs=false \
--set install.prefix=$(ALLOY_SRC)/bin/$* \
--set install.sysconfdir=etc
$(ALLOY_SRC):
git clone $(ALLOY_REPO) $@
cd $@ && git checkout $(ALLOY_VERSION)
$(LIBGC_SRC):
git clone $(LIBGC_REPO) $@
cd $@ && git checkout $(LIBGC_VERSION)
$(LIBGC_PATH): $(LIBGC_SRC)
mkdir -p $</build
cd $</build && cmake -DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX="$(LIBGC_SRC)" \
-DCMAKE_C_FLAGS="-DGC_ALWAYS_MULTITHREADED -DVALGRIND_TRACKING" ../ && \
make -j$(numproc) install
$(HEAPTRACK_SRC):
git clone $(HEAPTRACK_REPO) $@
cd $@ && git checkout $(HEAPTRACK_VERSION)
$(HEAPTRACK): $(HEAPTRACK_SRC)
mkdir -p $</build
cd $</build && \
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$(HEAPTRACK_SRC) ../ && \
make -j$(numproc) install
start-xvfb:
@echo "Starting Xvfb on display $(XVFB_DISPLAY)..."
$(XVFB_CMD) &
@sleep 2
@echo "Xvfb started."
build: build-alloy
$(foreach b, $(BENCHMARK_DIRS), cd $(b)/ && make build;)
bench: start-xvfb $(PERF_RESULTS)
stop-xvfb
stop-xvfb:
@echo "Stopping Xvfb on display $(XVFB_DISPLAY)..."
@if [ -f /tmp/.X$(subst :,,$(XVFB_DISPLAY))-lock ]; then \
echo "Killing Xvfb process..."; \
kill $$(ps aux | grep '[X]vfb $(XVFB_DISPLAY)' | awk '{print $$2}') || true; \
rm -f /tmp/.X$(subst :,,$(XVFB_DISPLAY))-lock; \
else \
echo "No Xvfb lock file found. Skipping."; \
fi
$(RESULTS_DIR)/%.csv:
mkdir -p $(basename $@)/metrics/runtime
mkdir -p $(dir $@)heaptrack
- $(REBENCH_EXEC) -R -D \
--invocations $(PEXECS) \
--iterations 1 \
-df $@ $(PWD)/rebench_$(notdir $*).conf $(subst /,-,$(patsubst %/,%,$(dir $*)))
plot: venv
$(REBENCH_PROCESSOR) $(PLOTS_DIR) $(RESULTS_DIR)
venv: $(VENV)/bin/activate
$(VENV)/bin/activate: requirements.txt
$(PYTHON) -m venv $(VENV)
$(PIP) install -r requirements.txt
clean: clean-confirm clean-alloy clean-builds
rm -rf $(ALLOY_SRC) $(HEAPTRACK_SRC) $(LIBGC_SRC)
@echo "Clean"
clean-alloy:
rm -rf $(ALLOY_TARGETS)
clean-builds:
$(foreach b, $(BENCHMARK_DIRS), cd $(b)/ && make clean-builds;)
clean-confirm:
@echo $@
rm -rf $(RESULTS_DIR) $(PLOTS_DIR)
@( read -p "Are you sure? [y/N]: " sure && case "$$sure" in [yY]) true;; *) false;; esac )