Commit 1d7bae8f authored by Masahiro Yamada's avatar Masahiro Yamada
Browse files

kbuild: deb-pkg: build binary-arch in parallel



'make deb-pkg' builds build-arch in parallel, but binary-arch serially.

Given that all binary packages are independent of one another, they can
be built in parallel.

I am uncertain whether debian/files is robust against a race condition.
Just in case, make dh_gencontrol (dpkg-gencontrol) output to separate
debian/*.files, which are then concatenated into debian/files.

Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
Reviewed-by: default avatarNicolas Schier <n.schier@avm.de>
parent caf400c8
Loading
Loading
Loading
Loading
+12 −30
Original line number Diff line number Diff line
@@ -24,18 +24,6 @@ if_enabled_echo() {
	fi
}

create_package() {
	export DH_OPTIONS="-p${1}"

	dh_installdocs
	dh_installchangelogs
	dh_compress
	dh_fixperms
	dh_gencontrol
	dh_md5sums
	dh_builddeb -- ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS}
}

install_linux_image () {
	pname=$1
	pdir=debian/$1
@@ -161,13 +149,9 @@ install_libc_headers () {
	mv "$pdir/usr/include/asm" "$pdir/usr/include/${DEB_HOST_MULTIARCH}"
}

rm -f debian/files
package=$1

packages_enabled=$(dh_listpackages)

for package in ${packages_enabled}
do
	case ${package} in
case "${package}" in
*-dbg)
	install_linux_image_dbg "${package}";;
linux-image-*|user-mode-linux-*)
@@ -177,5 +161,3 @@ do
linux-headers-*)
	install_kernel_headers "${package}";;
esac
	create_package "${package}"
done
+35 −4
Original line number Diff line number Diff line
@@ -25,12 +25,43 @@ revision = $(lastword $(subst -, ,$(shell dpkg-parsechangelog -S Version)))
CROSS_COMPILE ?= $(filter-out $(DEB_BUILD_GNU_TYPE)-, $(DEB_HOST_GNU_TYPE)-)
make-opts = ARCH=$(ARCH) KERNELRELEASE=$(KERNELRELEASE) KBUILD_BUILD_VERSION=$(revision) $(addprefix CROSS_COMPILE=,$(CROSS_COMPILE))

binary-targets := $(addprefix binary-, image image-dbg headers libc-dev)

all-packages = $(shell dh_listpackages)
image-package = $(filter linux-image-% user-%, $(filter-out %-dbg, $(all-packages)))
image-dbg-package = $(filter %-dbg, $(all-packages))
libc-dev-package = $(filter linux-libc-dev, $(all-packages))
headers-package = $(filter linux-headers-%, $(all-packages))

mk-files = $(patsubst binary-%,debian/%.files,$1)
package = $($(@:binary-%=%-package))

# DH_OPTION is an environment variable common for all debhelper commands.
# We could 'export' it, but here it is passed from the command line to clarify
# which package is being processed in the build log.
DH_OPTIONS = -p$(package)

define binary
	$(Q)+$(MAKE) $(make-opts) run-command KBUILD_RUN_COMMAND='+$$(srctree)/scripts/package/builddeb $(package)'
	$(Q)dh_installdocs $(DH_OPTIONS)
	$(Q)dh_installchangelogs $(DH_OPTIONS)
	$(Q)dh_compress $(DH_OPTIONS)
	$(Q)dh_fixperms $(DH_OPTIONS)
	$(Q)dh_gencontrol $(DH_OPTIONS) -- -f$(call mk-files,$@)
	$(Q)dh_md5sums $(DH_OPTIONS)
	$(Q)dh_builddeb $(DH_OPTIONS) -- $(addprefix -Z,$(KDEB_COMPRESS))
endef

.PHONY: $(binary-targets)
$(binary-targets): build-arch
	$(Q)truncate -s0 $(call mk-files,$@)
	$(if $(package),$(binary))

.PHONY: binary binary-indep binary-arch
binary: binary-arch binary-indep
binary-indep: build-indep
binary-arch: build-arch
	$(Q)$(MAKE) $(make-opts) \
	run-command KBUILD_RUN_COMMAND='+$$(srctree)/scripts/package/builddeb'
binary-arch: $(binary-targets)
	$(Q)cat $(call mk-files,$^) > debian/files

.PHONY: build build-indep build-arch
build: build-arch build-indep
@@ -41,7 +72,7 @@ build-arch:

.PHONY: clean
clean:
	$(Q)rm -rf debian/files debian/linux-* debian/deb-env.vars*
	$(Q)rm -rf debian/files debian/linux-* debian/deb-env.vars* debian/*.files
	$(Q)$(MAKE) ARCH=$(ARCH) clean

# If DEB_HOST_ARCH is empty, it is likely that debian/rules was executed