Makefile 3.88 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
8
9
NOPAXOS_IMAGE := output-nopaxos/nopaxos
MTCP_IMAGE := output-mtcp/mtcp
IMAGES := $(BASE_IMAGE) $(NOPAXOS_IMAGE) $(MTCP_IMAGE)
RAW_IMAGES := $(addsuffix .raw,$(IMAGES))
10

11
all: $(IMAGES) $(RAW_IMAGES) vmlinux bzImage mqnic/mqnic.ko
12
13

clean:
14
	rm -rf packer packer_cache vmlinux bzImage \
15
16
	    mqnic/mqnic.ko mqnic/*.o mqnic/.*.cmd mqnic/mqnic.mod.c \
	    mqnic/Module.symvers mqnic/modules.order \
17
	    output-ubuntu1804 output-base output-mtcp output-nopaxos \
18
	    kernel/linux-$(KERNEL_VERSION)/ kheaders.tar.bz2
19
20
21
22

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

23
%.raw: %
24
25
	qemu-img convert -f qcow2 -O raw $< $@

26
27
28
29
30
31
32
33
$(UBUNTU_IMAGE): $(wildcard scripts/*) packer ubuntu1804.json
	rm -rf output-ubuntu1804
	./packer build ubuntu1804.json
	touch $@

$(BASE_IMAGE): $(wildcard scripts/*) packer base.json $(UBUNTU_IMAGE) bzImage kheaders.tar.bz2
	rm -rf output-base
	./packer build base.json
34
35
36
37
38
39
40
41
42
43
44
	touch $@

$(NOPAXOS_IMAGE): $(wildcard scripts/*) packer nopaxos.json $(BASE_IMAGE) scripts/install-nopaxos.sh
	rm -rf output-nopaxos
	./packer build nopaxos.json
	touch $@

$(MTCP_IMAGE): $(wildcard scripts/*) packer mtcp.json $(BASE_IMAGE) scripts/install-mtcp.sh
	rm -rf output-mtcp
	./packer build mtcp.json
	touch $@
45
46
47
48
49
50
51
52
53
54

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

55
KERNEL_DIR := kernel/linux-$(KERNEL_VERSION)
56

57
58
59
60
61
$(KERNEL_DIR)/vmlinux: $(KERNEL_DIR)/.config
	$(MAKE) -C $(KERNEL_DIR)
	touch $@

vmlinux: $(KERNEL_DIR)/vmlinux
62
	cp kernel/linux-$(KERNEL_VERSION)/vmlinux vmlinux
63
	touch $@
64
65

# this dependency is a bit stupid, but not sure how to better do this
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
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 ../../$@ .
94

95
kernel/linux-$(KERNEL_VERSION)/.config: kernel/config-$(KERNEL_VERSION)
96
97
98
	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
99
	rm -rf kernel/linux-$(KERNEL_VERSION)
100
101
102
103
104
105
106
107
108
109
	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 $@