]> git.proxmox.com Git - pve-kernel.git/blob - Makefile
add basic build instructions to README and build-dir-fresh target
[pve-kernel.git] / Makefile
1 include /usr/share/dpkg/pkg-info.mk
2
3 # also bump proxmox-kernel-meta if the default MAJ.MIN version changes!
4 KERNEL_MAJ=6
5 KERNEL_MIN=2
6 KERNEL_PATCHLEVEL=16
7 # increment KREL for every published package release!
8 # rebuild packages with new KREL and run 'make abiupdate'
9 KREL=13
10
11 KERNEL_MAJMIN=$(KERNEL_MAJ).$(KERNEL_MIN)
12 KERNEL_VER=$(KERNEL_MAJMIN).$(KERNEL_PATCHLEVEL)
13
14 EXTRAVERSION=-$(KREL)-pve
15 KVNAME=$(KERNEL_VER)$(EXTRAVERSION)
16 PACKAGE=proxmox-kernel-$(KVNAME)
17 HDRPACKAGE=proxmox-headers-$(KVNAME)
18
19 ARCH=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
20
21 # amd64/x86_64/x86 share the arch subdirectory in the kernel, 'x86' so we need
22 # a mapping
23 KERNEL_ARCH=x86
24 ifneq ($(ARCH), amd64)
25 KERNEL_ARCH=$(ARCH)
26 endif
27
28 SKIPABI=0
29
30 BUILD_DIR=proxmox-kernel-$(KERNEL_VER)
31
32 KERNEL_SRC=ubuntu-kernel
33 KERNEL_SRC_SUBMODULE=submodules/$(KERNEL_SRC)
34 KERNEL_CFG_ORG=config-$(KERNEL_VER).org
35
36 ZFSONLINUX_SUBMODULE=submodules/zfsonlinux
37 ZFSDIR=pkg-zfs
38
39 MODULES=modules
40 MODULE_DIRS=$(ZFSDIR)
41
42 # exported to debian/rules via debian/rules.d/dirs.mk
43 DIRS=KERNEL_SRC ZFSDIR MODULES
44
45 DSC=proxmox-kernel-$(KERNEL_MAJMIN)_$(KERNEL_VER)-$(KREL).dsc
46 DST_DEB=$(PACKAGE)_$(KERNEL_VER)-$(KREL)_$(ARCH).deb
47 META_DEB=proxmox-kernel-$(KERNEL_MAJMIN)_$(KERNEL_VER)-$(KREL)_all.deb
48 HDR_DEB=$(HDRPACKAGE)_$(KERNEL_VER)-$(KREL)_$(ARCH).deb
49 META_HDR_DEB=proxmox-headers-$(KERNEL_MAJMIN)_$(KERNEL_VER)-$(KREL)_all.deb
50 USR_HDR_DEB=proxmox-kernel-libc-dev_$(KERNEL_VER)-$(KREL)_$(ARCH).deb
51 LINUX_TOOLS_DEB=linux-tools-$(KERNEL_MAJMIN)_$(KERNEL_VER)-$(KREL)_$(ARCH).deb
52 LINUX_TOOLS_DBG_DEB=linux-tools-$(KERNEL_MAJMIN)-dbgsym_$(KERNEL_VER)-$(KREL)_$(ARCH).deb
53
54 DEBS=$(DST_DEB) $(META_DEB) $(HDR_DEB) $(META_HDR_DEB) $(LINUX_TOOLS_DEB) $(LINUX_TOOLS_DBG_DEB) # $(USR_HDR_DEB)
55
56 all: deb
57 deb: $(DEBS)
58
59 $(META_DEB) $(META_HDR_DEB) $(LINUX_TOOLS_DEB) $(HDR_DEB): $(DST_DEB)
60 $(DST_DEB): $(BUILD_DIR).prepared
61 cd $(BUILD_DIR); dpkg-buildpackage --jobs=auto -b -uc -us
62 lintian $(DST_DEB)
63 #lintian $(HDR_DEB)
64 lintian $(LINUX_TOOLS_DEB)
65
66 dsc:
67 $(MAKE) $(DSC)
68 lintian $(DSC)
69
70 $(DSC): $(BUILD_DIR).prepared
71 cd $(BUILD_DIR); dpkg-buildpackage -S -uc -us -d
72
73 sbuild: $(DSC)
74 sbuild $(DSC)
75
76 $(BUILD_DIR).prepared: $(addsuffix .prepared,$(KERNEL_SRC) $(MODULES) debian)
77 cp -a fwlist-previous $(BUILD_DIR)/
78 cp -a abi-prev-* $(BUILD_DIR)/
79 cp -a abi-blacklist $(BUILD_DIR)/
80 touch $@
81
82 .PHONY: build-dir-fresh
83 build-dir-fresh:
84 $(MAKE) clean
85 $(MAKE) $(BUILD_DIR).prepared
86 echo "created build-directory: $(BUILD_DIR).prepared/"
87
88 debian.prepared: debian
89 rm -rf $(BUILD_DIR)/debian
90 mkdir -p $(BUILD_DIR)
91 cp -a debian $(BUILD_DIR)/debian
92 echo "git clone git://git.proxmox.com/git/pve-kernel.git\\ngit checkout $(shell git rev-parse HEAD)" \
93 >$(BUILD_DIR)/debian/SOURCE
94 @$(foreach dir, $(DIRS),echo "$(dir)=$($(dir))" >> $(BUILD_DIR)/debian/rules.d/env.mk;)
95 echo "KVNAME=$(KVNAME)" >> $(BUILD_DIR)/debian/rules.d/env.mk
96 echo "KERNEL_MAJMIN=$(KERNEL_MAJMIN)" >> $(BUILD_DIR)/debian/rules.d/env.mk
97 cd $(BUILD_DIR); debian/rules debian/control
98 touch $@
99
100 $(KERNEL_SRC).prepared: $(KERNEL_SRC_SUBMODULE) | submodule
101 rm -rf $(BUILD_DIR)/$(KERNEL_SRC) $@
102 mkdir -p $(BUILD_DIR)
103 cp -a $(KERNEL_SRC_SUBMODULE) $(BUILD_DIR)/$(KERNEL_SRC)
104 # TODO: split for archs, track and diff in our repository?
105 cd $(BUILD_DIR)/$(KERNEL_SRC); python3 debian/scripts/misc/annotations --arch amd64 --export >../../$(KERNEL_CFG_ORG)
106 cp $(KERNEL_CFG_ORG) $(BUILD_DIR)/$(KERNEL_SRC)/.config
107 sed -i $(BUILD_DIR)/$(KERNEL_SRC)/Makefile -e 's/^EXTRAVERSION.*$$/EXTRAVERSION=$(EXTRAVERSION)/'
108 rm -rf $(BUILD_DIR)/$(KERNEL_SRC)/debian $(BUILD_DIR)/$(KERNEL_SRC)/debian.master
109 set -e; cd $(BUILD_DIR)/$(KERNEL_SRC); \
110 for patch in ../../patches/kernel/*.patch; do \
111 echo "applying patch '$$patch'"; \
112 patch --batch -p1 < "$${patch}"; \
113 done
114 touch $@
115
116 $(MODULES).prepared: $(addsuffix .prepared,$(MODULE_DIRS))
117 touch $@
118
119 $(ZFSDIR).prepared: $(ZFSONLINUX_SUBMODULE)
120 rm -rf $(BUILD_DIR)/$(MODULES)/$(ZFSDIR) $(BUILD_DIR)/$(MODULES)/tmp $@
121 mkdir -p $(BUILD_DIR)/$(MODULES)/tmp
122 cp -a $(ZFSONLINUX_SUBMODULE)/* $(BUILD_DIR)/$(MODULES)/tmp
123 cd $(BUILD_DIR)/$(MODULES)/tmp; make kernel
124 rm -rf $(BUILD_DIR)/$(MODULES)/tmp
125 touch $(ZFSDIR).prepared
126
127 .PHONY: upload
128 upload: UPLOAD_DIST ?= $(DEB_DISTRIBUTION)
129 upload: $(DEBS)
130 tar cf - $(DEBS)|ssh -X repoman@repo.proxmox.com -- upload --product pve,pmg,pbs --dist $(UPLOAD_DIST) --arch $(ARCH)
131
132 .PHONY: distclean
133 distclean: clean
134 git submodule deinit --all
135
136 # upgrade to current master
137 .PHONY: update_modules
138 update_modules: submodule
139 git submodule foreach 'git pull --ff-only origin master'
140 cd $(ZFSONLINUX_SUBMODULE); git pull --ff-only origin master
141
142 # make sure submodules were initialized
143 .PHONY: submodule
144 submodule:
145 test -f "$(KERNEL_SRC_SUBMODULE)/README" || git submodule update --init $(KERNEL_SRC_SUBMODULE)
146 test -f "$(ZFSONLINUX_SUBMODULE)/Makefile" || git submodule update --init --recursive $(ZFSONLINUX_SUBMODULE)
147
148 # call after ABI bump with header deb in working directory
149 .PHONY: abiupdate
150 abiupdate: abi-prev-$(KVNAME)
151 abi-prev-$(KVNAME): abi-tmp-$(KVNAME)
152 ifneq ($(strip $(shell git status --untracked-files=no --porcelain -z)),)
153 @echo "working directory unclean, aborting!"
154 @false
155 else
156 git rm "abi-prev-*"
157 mv $< $@
158 git add $@
159 git commit -s -m "update ABI file for $(KVNAME)" -m "(generated with debian/scripts/abi-generate)"
160 @echo "update abi-prev-$(KVNAME) committed!"
161 endif
162
163 abi-tmp-$(KVNAME):
164 @ test -e $(HDR_DEB) || (echo "need $(HDR_DEB) to extract ABI data!" && false)
165 debian/scripts/abi-generate $(HDR_DEB) $@ $(KVNAME) 1
166
167 .PHONY: clean
168 clean:
169 rm -rf *~ proxmox-kernel-[0-9]*/ *.prepared $(KERNEL_CFG_ORG)
170 rm -f *.deb *.dsc *.changes *.buildinfo *.build proxmox-kernel*.tar.*