1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 2*4882a593Smuzhiyun# Makefile for the different targets used to generate full packages of a kernel 3*4882a593Smuzhiyun 4*4882a593Smuzhiyuninclude $(srctree)/scripts/Kbuild.include 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun# RPM target 7*4882a593Smuzhiyun# --------------------------------------------------------------------------- 8*4882a593Smuzhiyun# The rpm target generates two rpm files: 9*4882a593Smuzhiyun# /usr/src/packages/SRPMS/kernel-2.6.7rc2-1.src.rpm 10*4882a593Smuzhiyun# /usr/src/packages/RPMS/i386/kernel-2.6.7rc2-1.<arch>.rpm 11*4882a593Smuzhiyun# The src.rpm files includes all source for the kernel being built 12*4882a593Smuzhiyun# The <arch>.rpm includes kernel configuration, modules etc. 13*4882a593Smuzhiyun# 14*4882a593Smuzhiyun# Process to create the rpm files 15*4882a593Smuzhiyun# a) clean the kernel 16*4882a593Smuzhiyun# b) Generate .spec file 17*4882a593Smuzhiyun# c) Build a tar ball, using symlink to make kernel version 18*4882a593Smuzhiyun# first entry in the path 19*4882a593Smuzhiyun# d) and pack the result to a tar.gz file 20*4882a593Smuzhiyun# e) generate the rpm files, based on kernel.spec 21*4882a593Smuzhiyun# - Use /. to avoid tar packing just the symlink 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun# Note that the rpm-pkg target cannot be used with KBUILD_OUTPUT, 24*4882a593Smuzhiyun# but the binrpm-pkg target can; for some reason O= gets ignored. 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun# Remove hyphens since they have special meaning in RPM filenames 27*4882a593SmuzhiyunKERNELPATH := kernel-$(subst -,_,$(KERNELRELEASE)) 28*4882a593SmuzhiyunKDEB_SOURCENAME ?= linux-$(KERNELRELEASE) 29*4882a593SmuzhiyunKBUILD_PKG_ROOTCMD ?="fakeroot -u" 30*4882a593Smuzhiyunexport KDEB_SOURCENAME 31*4882a593Smuzhiyun# Include only those top-level files that are needed by make, plus the GPL copy 32*4882a593SmuzhiyunTAR_CONTENT := $(KBUILD_ALLDIRS) .config .scmversion Makefile \ 33*4882a593Smuzhiyun Kbuild Kconfig COPYING $(wildcard localversion*) 34*4882a593SmuzhiyunMKSPEC := $(srctree)/scripts/package/mkspec 35*4882a593Smuzhiyun 36*4882a593Smuzhiyunquiet_cmd_src_tar = TAR $(2).tar.gz 37*4882a593Smuzhiyun cmd_src_tar = \ 38*4882a593Smuzhiyunif test "$(objtree)" != "$(srctree)"; then \ 39*4882a593Smuzhiyun echo >&2; \ 40*4882a593Smuzhiyun echo >&2 " ERROR:"; \ 41*4882a593Smuzhiyun echo >&2 " Building source tarball is not possible outside the"; \ 42*4882a593Smuzhiyun echo >&2 " kernel source tree. Don't set KBUILD_OUTPUT, or use the"; \ 43*4882a593Smuzhiyun echo >&2 " binrpm-pkg or bindeb-pkg target instead."; \ 44*4882a593Smuzhiyun echo >&2; \ 45*4882a593Smuzhiyun false; \ 46*4882a593Smuzhiyunfi ; \ 47*4882a593Smuzhiyun$(srctree)/scripts/setlocalversion --save-scmversion; \ 48*4882a593Smuzhiyuntar -I $(KGZIP) -c $(RCS_TAR_IGNORE) -f $(2).tar.gz \ 49*4882a593Smuzhiyun --transform 's:^:$(2)/:S' $(TAR_CONTENT) $(3); \ 50*4882a593Smuzhiyunrm -f $(objtree)/.scmversion 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun# rpm-pkg 53*4882a593Smuzhiyun# --------------------------------------------------------------------------- 54*4882a593SmuzhiyunPHONY += rpm-pkg 55*4882a593Smuzhiyunrpm-pkg: 56*4882a593Smuzhiyun $(MAKE) clean 57*4882a593Smuzhiyun $(CONFIG_SHELL) $(MKSPEC) >$(objtree)/kernel.spec 58*4882a593Smuzhiyun $(call cmd,src_tar,$(KERNELPATH),kernel.spec) 59*4882a593Smuzhiyun +rpmbuild $(RPMOPTS) --target $(UTS_MACHINE) -ta $(KERNELPATH).tar.gz \ 60*4882a593Smuzhiyun --define='_smp_mflags %{nil}' 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun# binrpm-pkg 63*4882a593Smuzhiyun# --------------------------------------------------------------------------- 64*4882a593SmuzhiyunPHONY += binrpm-pkg 65*4882a593Smuzhiyunbinrpm-pkg: 66*4882a593Smuzhiyun $(MAKE) -f $(srctree)/Makefile 67*4882a593Smuzhiyun $(CONFIG_SHELL) $(MKSPEC) prebuilt > $(objtree)/binkernel.spec 68*4882a593Smuzhiyun +rpmbuild $(RPMOPTS) --define "_builddir $(objtree)" --target \ 69*4882a593Smuzhiyun $(UTS_MACHINE) -bb $(objtree)/binkernel.spec 70*4882a593Smuzhiyun 71*4882a593SmuzhiyunPHONY += deb-pkg 72*4882a593Smuzhiyundeb-pkg: 73*4882a593Smuzhiyun $(MAKE) clean 74*4882a593Smuzhiyun $(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian 75*4882a593Smuzhiyun $(call cmd,src_tar,$(KDEB_SOURCENAME)) 76*4882a593Smuzhiyun origversion=$$(dpkg-parsechangelog -SVersion |sed 's/-[^-]*$$//');\ 77*4882a593Smuzhiyun mv $(KDEB_SOURCENAME).tar.gz ../$(KDEB_SOURCENAME)_$${origversion}.orig.tar.gz 78*4882a593Smuzhiyun +dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) $(DPKG_FLAGS) -i.git -us -uc 79*4882a593Smuzhiyun 80*4882a593SmuzhiyunPHONY += bindeb-pkg 81*4882a593Smuzhiyunbindeb-pkg: 82*4882a593Smuzhiyun $(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian 83*4882a593Smuzhiyun +dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) $(DPKG_FLAGS) -b -nc -uc 84*4882a593Smuzhiyun 85*4882a593SmuzhiyunPHONY += intdeb-pkg 86*4882a593Smuzhiyunintdeb-pkg: 87*4882a593Smuzhiyun +$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun# snap-pkg 90*4882a593Smuzhiyun# --------------------------------------------------------------------------- 91*4882a593SmuzhiyunPHONY += snap-pkg 92*4882a593Smuzhiyunsnap-pkg: 93*4882a593Smuzhiyun rm -rf $(objtree)/snap 94*4882a593Smuzhiyun mkdir $(objtree)/snap 95*4882a593Smuzhiyun $(MAKE) clean 96*4882a593Smuzhiyun $(call cmd,src_tar,$(KERNELPATH)) 97*4882a593Smuzhiyun sed "s@KERNELRELEASE@$(KERNELRELEASE)@; \ 98*4882a593Smuzhiyun s@SRCTREE@$(shell realpath $(KERNELPATH).tar.gz)@" \ 99*4882a593Smuzhiyun $(srctree)/scripts/package/snapcraft.template > \ 100*4882a593Smuzhiyun $(objtree)/snap/snapcraft.yaml 101*4882a593Smuzhiyun cd $(objtree)/snap && \ 102*4882a593Smuzhiyun snapcraft --target-arch=$(UTS_MACHINE) 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun# tarball targets 105*4882a593Smuzhiyun# --------------------------------------------------------------------------- 106*4882a593Smuzhiyuntar-pkgs := dir-pkg tar-pkg targz-pkg tarbz2-pkg tarxz-pkg 107*4882a593SmuzhiyunPHONY += $(tar-pkgs) 108*4882a593Smuzhiyun$(tar-pkgs): 109*4882a593Smuzhiyun $(MAKE) -f $(srctree)/Makefile 110*4882a593Smuzhiyun +$(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@ 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun# perf-pkg - generate a source tarball with perf source 113*4882a593Smuzhiyun# --------------------------------------------------------------------------- 114*4882a593Smuzhiyun 115*4882a593Smuzhiyunperf-tar=perf-$(KERNELVERSION) 116*4882a593Smuzhiyun 117*4882a593Smuzhiyunquiet_cmd_perf_tar = TAR 118*4882a593Smuzhiyun cmd_perf_tar = \ 119*4882a593Smuzhiyungit --git-dir=$(srctree)/.git archive --prefix=$(perf-tar)/ \ 120*4882a593Smuzhiyun HEAD^{tree} $$(cd $(srctree); \ 121*4882a593Smuzhiyun echo $$(cat tools/perf/MANIFEST)) \ 122*4882a593Smuzhiyun -o $(perf-tar).tar; \ 123*4882a593Smuzhiyunmkdir -p $(perf-tar); \ 124*4882a593Smuzhiyungit --git-dir=$(srctree)/.git rev-parse HEAD > $(perf-tar)/HEAD; \ 125*4882a593Smuzhiyun(cd $(srctree)/tools/perf; \ 126*4882a593Smuzhiyunutil/PERF-VERSION-GEN $(CURDIR)/$(perf-tar)/); \ 127*4882a593Smuzhiyuntar rf $(perf-tar).tar $(perf-tar)/HEAD $(perf-tar)/PERF-VERSION-FILE; \ 128*4882a593Smuzhiyunrm -r $(perf-tar); \ 129*4882a593Smuzhiyun$(if $(findstring tar-src,$@),, \ 130*4882a593Smuzhiyun$(if $(findstring bz2,$@),$(KBZIP2), \ 131*4882a593Smuzhiyun$(if $(findstring gz,$@),$(KGZIP), \ 132*4882a593Smuzhiyun$(if $(findstring xz,$@),$(XZ), \ 133*4882a593Smuzhiyun$(error unknown target $@)))) \ 134*4882a593Smuzhiyun -f -9 $(perf-tar).tar) 135*4882a593Smuzhiyun 136*4882a593Smuzhiyunperf-tar-pkgs := perf-tar-src-pkg perf-targz-src-pkg perf-tarbz2-src-pkg perf-tarxz-src-pkg 137*4882a593SmuzhiyunPHONY += $(perf-tar-pkgs) 138*4882a593Smuzhiyun$(perf-tar-pkgs): 139*4882a593Smuzhiyun $(call cmd,perf_tar) 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun# Help text displayed when executing 'make help' 142*4882a593Smuzhiyun# --------------------------------------------------------------------------- 143*4882a593SmuzhiyunPHONY += help 144*4882a593Smuzhiyunhelp: 145*4882a593Smuzhiyun @echo ' rpm-pkg - Build both source and binary RPM kernel packages' 146*4882a593Smuzhiyun @echo ' binrpm-pkg - Build only the binary kernel RPM package' 147*4882a593Smuzhiyun @echo ' deb-pkg - Build both source and binary deb kernel packages' 148*4882a593Smuzhiyun @echo ' bindeb-pkg - Build only the binary kernel deb package' 149*4882a593Smuzhiyun @echo ' snap-pkg - Build only the binary kernel snap package' 150*4882a593Smuzhiyun @echo ' (will connect to external hosts)' 151*4882a593Smuzhiyun @echo ' dir-pkg - Build the kernel as a plain directory structure' 152*4882a593Smuzhiyun @echo ' tar-pkg - Build the kernel as an uncompressed tarball' 153*4882a593Smuzhiyun @echo ' targz-pkg - Build the kernel as a gzip compressed tarball' 154*4882a593Smuzhiyun @echo ' tarbz2-pkg - Build the kernel as a bzip2 compressed tarball' 155*4882a593Smuzhiyun @echo ' tarxz-pkg - Build the kernel as a xz compressed tarball' 156*4882a593Smuzhiyun @echo ' perf-tar-src-pkg - Build $(perf-tar).tar source tarball' 157*4882a593Smuzhiyun @echo ' perf-targz-src-pkg - Build $(perf-tar).tar.gz source tarball' 158*4882a593Smuzhiyun @echo ' perf-tarbz2-src-pkg - Build $(perf-tar).tar.bz2 source tarball' 159*4882a593Smuzhiyun @echo ' perf-tarxz-src-pkg - Build $(perf-tar).tar.xz source tarball' 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun.PHONY: $(PHONY) 162