-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathMakefile
96 lines (80 loc) · 3.67 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
# SPDX-License-Identifier: BSD-3-Clause
# Authors: Alexander Jung <[email protected]>
WORKDIR ?= $(CURDIR)
IMAGESDIR ?= $(WORKDIR)/images
CONFIGSDIR ?= $(WORKDIR)/configs
RESULTS ?= $(WORKDIR)/results.csv
PLOT ?= $(WORKDIR)/$(notdir $(WORKDIR)).svg
KRAFT_IMAGE ?= unikraft/eurosys21-artifacts-kraft:latest
IMAGES ?= $(sort $(notdir $(wildcard $(CONFIGSDIR)/*)))
RM ?= rm
SNAKE ?= python3
DOCKER ?= docker
DRUN ?= $(DOCKER) run -it --rm \
-v $(1):/usr/src/unikraft/apps/app \
-w /usr/src/unikraft/apps/app $(KRAFT_IMAGE) $(2)
ARCH ?= x86_64
PLAT ?= kvm
.PHONY: all
all: prepare run plot
.PHONY: prepare
prepare: helloworld nginx redis sqlite
.PHONY: helloworld
helloworld: helloworld_default helloworld_dce helloworld_lto helloworld_dce_lto
helloworld_%:
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft [email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v configure -m $(ARCH) -p $(PLAT) -F)
$(call DRUN,$(CONFIGSDIR)/$@,kraft build)
cp $(CONFIGSDIR)/$@/build/app_$(PLAT)-$(ARCH) $(IMAGESDIR)/$@_$(PLAT)-$(ARCH)
.PHONY: nginx
nginx: nginx_default nginx_dce nginx_lto nginx_dce_lto
nginx_%:
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft [email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/pcre@5f7140e)
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v configure -m $(ARCH) -p $(PLAT) -F)
$(call DRUN,$(CONFIGSDIR)/$@,kraft build)
cp $(CONFIGSDIR)/$@/build/app_$(PLAT)-$(ARCH) $(IMAGESDIR)/$@_$(PLAT)-$(ARCH)
.PHONY: redis
redis: redis_default redis_dce redis_lto redis_dce_lto
redis_%:
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft [email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft [email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v configure -m $(ARCH) -p $(PLAT) -F)
$(call DRUN,$(CONFIGSDIR)/$@,kraft build)
cp $(CONFIGSDIR)/$@/build/app_$(PLAT)-$(ARCH) $(IMAGESDIR)/$@_$(PLAT)-$(ARCH)
.PHONY: sqlite
sqlite: sqlite_default sqlite_dce sqlite_lto sqlite_dce_lto
sqlite_%:
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft [email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v list pull -w .unikraft lib/[email protected])
$(call DRUN,$(CONFIGSDIR)/$@,kraft -v configure -m $(ARCH) -p $(PLAT) -F)
$(call DRUN,$(CONFIGSDIR)/$@,kraft build)
cp $(CONFIGSDIR)/$@/build/app_$(PLAT)-$(ARCH) $(IMAGESDIR)/$@_$(PLAT)-$(ARCH)
.PHONY: run
run: $(addprefix checksize-,$(IMAGES))
@echo "Results saved to to $(RESULTS)"
checksize-%:
@du -b $(IMAGESDIR)/$* | awk '{ print "$*\t" $$1 }' >> $(RESULTS)
.PHONY: plot
plot:
PYTHONPATH=$(WORKDIR)/../common $(SNAKE) $(WORKDIR)/plot.py --data $(RESULTS) --output $(PLOT)
.PHONY: clean
clean: $(addprefix clean-,$(IMAGES))
clean-%:
$(RM) -rf $(CONFIGSDIR)/$*/build
$(RM) -rf $(CONFIGSDIR)/$*/.unikraft
$(RM) -rf $(CONFIGSDIR)/$*/.config
.PHONY: properclean
properclean: clean
$(DOCKER) rmi $(KRAFT_IMAGE)