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