Makefile 3.95 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
$(UBUNTU_IMAGE): ubuntu1804.json packer scripts/vagrant.sh scripts/sshd.sh \
    scripts/update.sh scripts/packages.sh scripts/cleanup.sh scripts/preseed.cfg
28
29
30
31
	rm -rf output-ubuntu1804
	./packer build ubuntu1804.json
	touch $@

32
33
$(BASE_IMAGE): base.json packer $(UBUNTU_IMAGE) bzImage kheaders.tar.bz2 \
    scripts/guestinit.sh
34
35
	rm -rf output-base
	./packer build base.json
36
37
	touch $@

38
39
$(NOPAXOS_IMAGE): nopaxos.json packer $(BASE_IMAGE) scripts/install-nopaxos.sh \
    nopaxos.config
40
41
42
43
	rm -rf output-nopaxos
	./packer build nopaxos.json
	touch $@

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

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

58
KERNEL_DIR := kernel/linux-$(KERNEL_VERSION)
59

60
61
62
63
64
$(KERNEL_DIR)/vmlinux: $(KERNEL_DIR)/.config
	$(MAKE) -C $(KERNEL_DIR)
	touch $@

vmlinux: $(KERNEL_DIR)/vmlinux
65
	cp kernel/linux-$(KERNEL_VERSION)/vmlinux vmlinux
66
	touch $@
67
68

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

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