Makefile 4.02 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
12
QEMU_IMG := ../qemu/qemu-img

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

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

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

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

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

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

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

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

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

60
KERNEL_DIR := kernel/linux-$(KERNEL_VERSION)
61

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

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

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

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