@@ -1067,3 +1067,20 @@ Changes in next
The DEPLOY_DIR_IMAGE path and artifacts naming changes introduced in
13cb77dd (included in Isar v1.0) have been reverted. Deployment paths
and artifact names are the same as pre-v1.0.
+
+### No building of arch=all packages when cross building
+
+Architecture all packages often cannot be built in cross mode, as the
+dependencies cannot be resolved in the foreign architecture. This especially
+applies to all packages which split their build dependencies into
+`Build-Depends-Arch` and `Build-Depends-Indep`. We already have logic
+in isar to built `DPKG_ARCH = "all"` packages non-cross, but this does not
+work for packages that generate both arch specific and arch all binary packages.
+
+We now explicitly disable building `arch=all` binary packages during cross
+compilation (this only affects packages that produce both architecture-specific
+and `arch=all` binary packages). Recipes for such mixed packages should append
+`-all` to the `arch=all` binary packages listed in `PROVIDES` (e.g.,
+`PROVIDES="foo-doc-archall"` for an `arch=all` binary package `foo-doc`).
+Consumers can then simply reference the package by its original name (e.g.,
+`foo-doc`).
@@ -109,8 +109,9 @@ dpkg_runbuild() {
DSC_FILE=$(find ${WORKDIR} -maxdepth 1 -name "${DEBIAN_SOURCE}_*.dsc" -print)
- sbuild -A -n -c ${SBUILD_CHROOT} --chroot-mode=schroot \
+ sbuild -n -c ${SBUILD_CHROOT} --chroot-mode=schroot \
--host=${PACKAGE_ARCH} --build=${BUILD_ARCH} ${profiles} \
+ ${@'--no-arch-all' if 'cross' in isar_deb_build_profiles(d).split() else '--arch-all'} \
--no-run-lintian --no-run-piuparts --no-run-autopkgtest --resolve-alternatives \
--bd-uninstallable-explainer=apt \
--no-apt-update --apt-distupgrade \
@@ -83,6 +83,10 @@ python multiarch_virtclass_handler() {
for v in val.split():
if v.endswith('-compat') or v.endswith('-native'):
multiarch_var.append(v)
+ # dispatch -archall (arch=all) to native variant
+ if v.endswith('-archall'):
+ if suffix == '-native':
+ multiarch_var.append(v[:-len('-archall')])
else:
multiarch_var.append(v + suffix)
d.setVar(var, ' '.join(multiarch_var))
Architecture all packages often cannot be built in cross mode, as the dependencies cannot be resolved in the host architecture. This especially applies to all packages which split their build dependencies into Build-Depends-Arch and Build-Depends-Indep. We already have logic in isar to built DPKG_ARCH=all packages non-cross, but this does not work for packages that generate both arch specific and arch all binary packages. While sbuild automatically disables builds of arch-all packages on cross, we previously explicitly overrode this setting. We now change this by explicitly setting --no-arch-all flag on cross and --arch-all on non-cross. To bitbake depend on arch=all packages, we introduce an interface similar to the -native: For mixed-architecture packages, the user needs to extend the PROVIDES by adding -archall to the arch=all packages. This internally is then dispatched to the -native target, not requiring any changes on the consumer side (i.e. DEPENDS does not need to add the -archall). Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com> --- RECIPE-API-CHANGELOG.md | 17 +++++++++++++++++ meta/classes-recipe/dpkg.bbclass | 3 ++- meta/classes-recipe/multiarch.bbclass | 4 ++++ 3 files changed, 23 insertions(+), 1 deletion(-)