Makefile 4.2 KB
Newer Older
1
2
3
PACKER_VERSION := 1.6.0
KERNEL_VERSION := 5.4.46

4
5
UBUNTU_IMAGE := output-ubuntu1804/ubuntu1804
BASE_IMAGE := output-base/base
6
7
NOPAXOS_IMAGE := output-nopaxos/nopaxos
MTCP_IMAGE := output-mtcp/mtcp
Antoine Kaufmann's avatar
Antoine Kaufmann committed
8
9
TAS_IMAGE := output-tas/tas
IMAGES := $(BASE_IMAGE) $(NOPAXOS_IMAGE) $(MTCP_IMAGE) $(TAS_IMAGE)
10
RAW_IMAGES := $(addsuffix .raw,$(IMAGES))
11

12
13
QEMU_IMG := ../qemu/qemu-img

14
all: $(IMAGES) $(RAW_IMAGES) vmlinux bzImage mqnic/mqnic.ko
15
16

clean:
17
	rm -rf packer packer_cache vmlinux bzImage \
18
19
	    mqnic/mqnic.ko mqnic/*.o mqnic/.*.cmd mqnic/mqnic.mod.c \
	    mqnic/Module.symvers mqnic/modules.order \
20
	    output-ubuntu1804 output-base output-mtcp output-nopaxos \
Antoine Kaufmann's avatar
Antoine Kaufmann committed
21
	    output-tas \
22
	    kernel/linux-$(KERNEL_VERSION)/ kheaders.tar.bz2
23
24
25
26

################################################
# Disk image

27
%.raw: %
28
	$(QEMU_IMG) convert -f qcow2 -O raw $< $@
29

30
31
$(UBUNTU_IMAGE): ubuntu1804.json packer scripts/vagrant.sh scripts/sshd.sh \
    scripts/update.sh scripts/packages.sh scripts/cleanup.sh scripts/preseed.cfg
32
	rm -rf output-ubuntu1804
33
	./packer-wrap.sh build ubuntu1804.json
34
35
	touch $@

36
37
$(BASE_IMAGE): base.json packer $(UBUNTU_IMAGE) bzImage kheaders.tar.bz2 \
    scripts/guestinit.sh
38
	rm -rf output-base
39
	./packer-wrap.sh build base.json
40
41
	touch $@

42
43
$(NOPAXOS_IMAGE): nopaxos.json packer $(BASE_IMAGE) scripts/install-nopaxos.sh \
    nopaxos.config
44
	rm -rf output-nopaxos
45
	./packer-wrap.sh build nopaxos.json
46
47
	touch $@

48
$(MTCP_IMAGE): mtcp.json packer $(BASE_IMAGE) scripts/install-mtcp.sh
49
	rm -rf output-mtcp
50
	./packer-wrap.sh build mtcp.json
51
	touch $@
52

Antoine Kaufmann's avatar
Antoine Kaufmann committed
53
54
55
56
57
$(TAS_IMAGE): tas.json packer $(BASE_IMAGE) scripts/install-tas.sh
	rm -rf output-tas
	./packer-wrap.sh build tas.json
	touch $@

58
59
60
61
62
63
64
65
66
packer:
	wget https://releases.hashicorp.com/packer/$(PACKER_VERSION)/packer_$(PACKER_VERSION)_linux_amd64.zip
	unzip packer_$(PACKER_VERSION)_linux_amd64.zip
	rm -f packer_$(PACKER_VERSION)_linux_amd64.zip


################################################
# Kernel

67
KERNEL_DIR := kernel/linux-$(KERNEL_VERSION)
68

69
70
71
72
73
$(KERNEL_DIR)/vmlinux: $(KERNEL_DIR)/.config
	$(MAKE) -C $(KERNEL_DIR)
	touch $@

vmlinux: $(KERNEL_DIR)/vmlinux
74
	cp kernel/linux-$(KERNEL_VERSION)/vmlinux vmlinux
75
	touch $@
76
77

# this dependency is a bit stupid, but not sure how to better do this
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
bzImage: $(KERNEL_DIR)/vmlinux
	cp $(KERNEL_DIR)/arch/x86_64/boot/bzImage bzImage
	touch $@

kheaders.tar.bz2:
	rm -rf ./kernel/kheaders
	mkdir -p ./kernel/kheaders
	$(MAKE) -C $(KERNEL_DIR) headers_install INSTALL_HDR_PATH=$(abspath ./kernel/kheaders/usr)
	$(MAKE) -C $(KERNEL_DIR) modules_install INSTALL_MOD_PATH=$(abspath ./kernel/kheaders)
	rm -f ./kernel/kheaders/lib/modules/$(KERNEL_VERSION)/build
	ln -s /usr/src/linux-headers-$(KERNEL_VERSION) \
	    ./kernel/kheaders/lib/modules/$(KERNEL_VERSION)/build
	rm -f ./kernel/kheaders/lib/modules/$(KERNEL_VERSION)/source
	mkdir -p ./kernel/kheaders/usr/src/linux-headers-$(KERNEL_VERSION)
	cp -r $(KERNEL_DIR)/.config $(KERNEL_DIR)/Makefile \
	    $(KERNEL_DIR)/Module.symvers $(KERNEL_DIR)/scripts \
	    $(KERNEL_DIR)/include \
	    ./kernel/kheaders/usr/src/linux-headers-$(KERNEL_VERSION)/
	mkdir -p ./kernel/kheaders/usr/src/linux-headers-$(KERNEL_VERSION)/tools/objtool/
	cp $(KERNEL_DIR)/tools/objtool/objtool \
	    ./kernel/kheaders/usr/src/linux-headers-$(KERNEL_VERSION)/tools/objtool/
	mkdir -p ./kernel/kheaders/usr/src/linux-headers-$(KERNEL_VERSION)/arch/x86/
	cp -r $(KERNEL_DIR)/arch/x86/Makefile \
	    $(KERNEL_DIR)/arch/x86/Makefile_32.cpu \
	    $(KERNEL_DIR)/arch/x86/Makefile.um \
	    $(KERNEL_DIR)/arch/x86/include \
	    ./kernel/kheaders/usr/src/linux-headers-$(KERNEL_VERSION)/arch/x86
	cd ./kernel/kheaders && tar cjf ../../$@ .
106

107
kernel/linux-$(KERNEL_VERSION)/.config: kernel/config-$(KERNEL_VERSION)
108
109
110
	wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-$(KERNEL_VERSION).tar.xz
	tar xf linux-$(KERNEL_VERSION).tar.xz
	rm -f linux-$(KERNEL_VERSION).tar.xz
111
	rm -rf kernel/linux-$(KERNEL_VERSION)
112
113
114
115
116
117
118
119
120
121
	mv linux-$(KERNEL_VERSION) kernel/
	cd kernel/linux-$(KERNEL_VERSION) && patch -p1 < ../linux-$(KERNEL_VERSION)-timers-gem5.patch
	cp kernel/config-$(KERNEL_VERSION) kernel/linux-$(KERNEL_VERSION)/.config

################################################
# mqnic kernel module

mqnic/mqnic.ko: vmlinux
	$(MAKE) -C kernel/linux-$(KERNEL_VERSION) M=`pwd`/mqnic/ modules
	touch $@