* [PATCH v4 0/4] multiarch support
@ 2023-03-03 10:20 Adriaan Schmidt
2023-03-03 10:20 ` [PATCH v4 1/4] bitbake.conf: use PACKAGE_ARCH in overrides Adriaan Schmidt
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Adriaan Schmidt @ 2023-03-03 10:20 UTC (permalink / raw)
To: isar-users; +Cc: Adriaan Schmidt
This adds `<package>-compat` and `<package>-native` bitbake
targets to all recipes inheriting dpkg-base.
The new -compat build variant replaces the old compat mechanism.
Note that `ISAR_ENABLE_COMPAT_ARCH="1"` is still required to
ensure that the bootstrap and buildchroot is prepared correctly.
Regarding testing of the new features:
- we have (limited) testing of compat, by adding `hello-isar-compat` to
amd64 and arm64 builds.
- currently no testing of native. There are two main use cases for the feature:
- SDK that needs `<package>-native`. This could be turned into a test
easily, by setting/appending SDK_INSTALL. Would require a new option
in testsuite, similar to `image_install` introduced in 57a0ade9a.
- A build tool that is provided by a recipe, when using it in cross
compilation. E.g. if someone needed a patched cmake, they would
write cmake.bb, and applications that need it would (in case cross
compilation is enabled) DEPEND+="cmake-native". Or, another real-world
example from a downstream layer: packaging applications with goreleaser,
which is not found in the Debian apt repos. Instead, I'm fetching it
via a dpkg-prebuilt recipe, written to support multiple architectures
(architecture is part of the download URL). Now if I want to cross
compile go applications, they DEPEND+="goreleaser-native", and
DEBIAN_BUILD_DEPENDS_append=", goreleaser:native".
These cases are more complex, but maybe we can find an example along
those lines and add it to meta-isar.
As testing of the native feature would (in the simple case) need an
extension of the test classes (for SDK_INSTALL), or introduce something
completely new into meta-isar, I'd like to do that after discussion, in
a later series.
Adriaan
changes since v3:
- removed the unneeded (expand=)True argument from d.getVar() calls
- changed "calculate" to "determine" in comment
- added note to RECIPE-API-CHANGELOG
changes since v2:
- fixed a bug that completely broke things for targets without a compat
arch (e.g., i386). The compat variant of packages is now only available
when it can actually be built.
- the native variant is only generated if it differs from the target.
If DISTRO_ARCH==HOST_ARCH, then `<package>-native` is automatically
provided by the target package.
- also do the bitbake-target->debian-package transformation on SDK_INSTALL
- fix compat packages in testsuite: when we add hello-isar-compat, we
need to remove hello-isar.
changes since v1:
- fixed an issue that prevented arch overrides of
ISAR_ENABLE_COMPAT_ARCH, which is used in testsuite
- added `-native` expansion to contents of IMAGE_INSTALL
- documentation in user_manual
Adriaan Schmidt (4):
bitbake.conf: use PACKAGE_ARCH in overrides
add multiarch support
remove obsolete compat-arch override
doc: add compat/native targets to user manual
RECIPE-API-CHANGELOG.md | 8 ++
doc/user_manual.md | 19 ++--
.../recipes-app/hello-isar/hello-isar.bb | 3 -
meta-isar/recipes-app/libhello/libhello.bb | 3 -
.../recipes-app/samefile/samefile_2.14.bb | 2 +-
meta/classes/compat.bbclass | 40 +++++++++
meta/classes/debianize.bbclass | 2 +-
meta/classes/dpkg-base.bbclass | 1 +
meta/classes/image.bbclass | 4 +-
meta/classes/multiarch.bbclass | 88 +++++++++++++++++++
meta/classes/native.bbclass | 10 +++
meta/classes/sdk.bbclass | 2 +-
meta/conf/bitbake.conf | 6 +-
.../isar-bootstrap/isar-bootstrap.inc | 2 +
.../sbuild-chroot/sbuild-chroot.inc | 14 +--
testsuite/cibuilder.py | 4 +
16 files changed, 182 insertions(+), 26 deletions(-)
create mode 100644 meta/classes/compat.bbclass
create mode 100644 meta/classes/multiarch.bbclass
create mode 100644 meta/classes/native.bbclass
--
2.30.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v4 1/4] bitbake.conf: use PACKAGE_ARCH in overrides
2023-03-03 10:20 [PATCH v4 0/4] multiarch support Adriaan Schmidt
@ 2023-03-03 10:20 ` Adriaan Schmidt
2023-03-03 10:20 ` [PATCH v4 2/4] add multiarch support Adriaan Schmidt
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Adriaan Schmidt @ 2023-03-03 10:20 UTC (permalink / raw)
To: isar-users; +Cc: Adriaan Schmidt
This replaces `DISTRO_ARCH` with `PACKAGE_ARCH` in the `OVERRIDES` list.
Note that `PACKAGE_ARCH` defaults to `DISTRO_ARCH`, so this only has an
effect when `PACKAGE_ARCH` is explicitly set in a recipe.
Signed-off-by: Adriaan Schmidt <adriaan.schmidt@siemens.com>
---
meta/conf/bitbake.conf | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index c9f52a86..05ccb7b8 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -67,8 +67,8 @@ KERNEL_FILE:mipsel ?= "vmlinux"
KERNEL_FILE:riscv64 ?= "vmlinux"
KERNEL_FILE:arm64 ?= "vmlinux"
-OVERRIDES = "${DISTRO_ARCH}:${COMPAT_OVERRIDE}:${MACHINE}:${DISTRO}:${BASE_DISTRO_CODENAME}:forcevariable"
-FILESOVERRIDES = "${DISTRO_ARCH}:${MACHINE}"
+OVERRIDES = "${PACKAGE_ARCH}:${COMPAT_OVERRIDE}:${MACHINE}:${DISTRO}:${BASE_DISTRO_CODENAME}:forcevariable"
+FILESOVERRIDES = "${PACKAGE_ARCH}:${MACHINE}"
COMPAT_OVERRIDE = "${@'compat-arch' if d.getVar('ISAR_ENABLE_COMPAT_ARCH') == '1' else ''}"
# Setting default QEMU_ARCH variables for different DISTRO_ARCH:
--
2.30.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v4 2/4] add multiarch support
2023-03-03 10:20 [PATCH v4 0/4] multiarch support Adriaan Schmidt
2023-03-03 10:20 ` [PATCH v4 1/4] bitbake.conf: use PACKAGE_ARCH in overrides Adriaan Schmidt
@ 2023-03-03 10:20 ` Adriaan Schmidt
2023-03-03 10:20 ` [PATCH v4 3/4] remove obsolete compat-arch override Adriaan Schmidt
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Adriaan Schmidt @ 2023-03-03 10:20 UTC (permalink / raw)
To: isar-users; +Cc: Adriaan Schmidt
This adds support for building packages for native and compat architectures
to dpdk-base.bbclass.
Thus, all package recipes automatically have a *-native and *-compat target,
which can be used in DEPENDS/RDEPENDS definitions.
Additionally those targets can be used in IMAGE_INSTALL, where they
are automatically converted to install the correct debian package:
foo-compat -> foo:${COMPAT_DISTRO_ARCH}
foo-native -> foo:${HOST_ARCH}
Note that the switch ISAR_ENABLE_COMPAT_ARCH still exist and controls
addition of the compat architecture during bootstrapping.
Signed-off-by: Adriaan Schmidt <adriaan.schmidt@siemens.com>
---
.../recipes-app/samefile/samefile_2.14.bb | 2 +-
meta/classes/compat.bbclass | 40 +++++++++
meta/classes/debianize.bbclass | 2 +-
meta/classes/dpkg-base.bbclass | 1 +
meta/classes/image.bbclass | 4 +-
meta/classes/multiarch.bbclass | 88 +++++++++++++++++++
meta/classes/native.bbclass | 10 +++
meta/classes/sdk.bbclass | 2 +-
meta/conf/bitbake.conf | 1 +
.../isar-bootstrap/isar-bootstrap.inc | 2 +
.../sbuild-chroot/sbuild-chroot.inc | 14 +--
11 files changed, 156 insertions(+), 10 deletions(-)
create mode 100644 meta/classes/compat.bbclass
create mode 100644 meta/classes/multiarch.bbclass
create mode 100644 meta/classes/native.bbclass
diff --git a/meta-isar/recipes-app/samefile/samefile_2.14.bb b/meta-isar/recipes-app/samefile/samefile_2.14.bb
index 5e36a2ac..c53c9445 100644
--- a/meta-isar/recipes-app/samefile/samefile_2.14.bb
+++ b/meta-isar/recipes-app/samefile/samefile_2.14.bb
@@ -21,7 +21,7 @@ do_prepare_build() {
# deb_debianize. Pre-exisiting files will not be recreated, changelog
# will be prepended unless its latest entry is for CHANGELOG_V.
cat << EOF > ${WORKDIR}/changelog
-${PN} (0.1) unstable; urgency=low
+${BPN} (0.1) unstable; urgency=low
* a long long time ago there was an early version
diff --git a/meta/classes/compat.bbclass b/meta/classes/compat.bbclass
new file mode 100644
index 00000000..f0a23b6b
--- /dev/null
+++ b/meta/classes/compat.bbclass
@@ -0,0 +1,40 @@
+# This software is a part of ISAR.
+# Copyright (C) 2023 Siemens AG
+#
+# SPDX-License-Identifier: MIT
+
+# this class is "dual-use": it can be inherited (e.g., by bootstrap and image
+# classes) to access variables and functions, and it's also added via BBCLASSEXTEND
+# when inheriting multiconfig.bbclass.
+
+################################################################################
+# generic functions
+################################################################################
+
+# determine COMPAT_DISTRO_ARCH and ISAR_ENABLE_COMPAT_ARCH
+# this must always use the DISTRO_ARCH override (not PACKAGE_ARCH), so needs
+# to happen in a modified environment
+python() {
+ distro_arch = d.getVar('DISTRO_ARCH')
+ package_arch = d.getVar('PACKAGE_ARCH')
+ overrides = d.getVar('OVERRIDES').split(':')
+
+ localdata = bb.data.createCopy(d)
+ new_overrides = [distro_arch] + [o for o in overrides if not o == package_arch]
+ localdata.setVar('OVERRIDES', ':'.join(new_overrides))
+ isar_enable_compat_arch = localdata.getVar('ISAR_ENABLE_COMPAT_ARCH')
+ compat_distro_arch = localdata.getVar('COMPAT_DISTRO_ARCH')
+
+ d.setVar('COMPAT_DISTRO_ARCH', compat_distro_arch)
+ d.setVar('ISAR_ENABLE_COMPAT_ARCH', isar_enable_compat_arch)
+}
+
+def isar_can_build_compat(d):
+ return (d.getVar('COMPAT_DISTRO_ARCH') is not None and
+ d.getVar('ISAR_ENABLE_COMPAT_ARCH') == '1')
+
+################################################################################
+# package recipe modifications when building *-compat:
+################################################################################
+
+PACKAGE_ARCH:class-compat = "${COMPAT_DISTRO_ARCH}"
diff --git a/meta/classes/debianize.bbclass b/meta/classes/debianize.bbclass
index a6694a00..1b98c02d 100644
--- a/meta/classes/debianize.bbclass
+++ b/meta/classes/debianize.bbclass
@@ -31,7 +31,7 @@ deb_add_changelog() {
date=$(LANG=C date -R -d @${timestamp})
cat <<EOF > ${S}/debian/changelog
-${PN} (${changelog_v}) UNRELEASED; urgency=low
+${BPN} (${changelog_v}) UNRELEASED; urgency=low
* generated by Isar
diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass
index ad28f7b3..55cc6655 100644
--- a/meta/classes/dpkg-base.bbclass
+++ b/meta/classes/dpkg-base.bbclass
@@ -5,6 +5,7 @@
# SPDX-License-Identifier: MIT
inherit sbuild
+inherit multiarch
inherit debianize
inherit terminal
inherit repository
diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index ef7d5a2a..ce7c549c 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -79,9 +79,11 @@ image_do_mounts() {
buildchroot_do_mounts
}
+inherit multiarch
+
ROOTFSDIR = "${IMAGE_ROOTFS}"
ROOTFS_FEATURES += "clean-package-cache clean-pycache generate-manifest export-dpkg-status clean-log-files clean-debconf-cache"
-ROOTFS_PACKAGES += "${IMAGE_PREINSTALL} ${IMAGE_INSTALL}"
+ROOTFS_PACKAGES += "${IMAGE_PREINSTALL} ${@isar_multiarch_packages('IMAGE_INSTALL', d)}"
ROOTFS_MANIFEST_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}"
ROOTFS_DPKGSTATUS_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}"
ROOTFS_PACKAGE_SUFFIX ?= "${PN}-${DISTRO}-${MACHINE}"
diff --git a/meta/classes/multiarch.bbclass b/meta/classes/multiarch.bbclass
new file mode 100644
index 00000000..c1846ab0
--- /dev/null
+++ b/meta/classes/multiarch.bbclass
@@ -0,0 +1,88 @@
+# This software is a part of ISAR.
+# Copyright (C) 2021-2022 Siemens AG
+#
+# SPDX-License-Identifier: MIT
+
+BPN = "${PN}"
+
+inherit compat
+python() {
+ # provide compat only when we can build it
+ if isar_can_build_compat(d):
+ d.appendVar('BBCLASSEXTEND', ' compat')
+
+ # build native separately only when it differs from the target variant
+ if d.getVar('HOST_ARCH') == d.getVar('DISTRO_ARCH'):
+ pn = d.getVar('PN')
+ if not pn.endswith('-native') and not pn.endswith('-compat'):
+ provides = (d.getVar('PROVIDES') or '').split()
+ for p in provides:
+ d.appendVar('PROVIDES', f' {p}-native')
+ d.appendVar('PROVIDES', f' {pn}-native')
+ else:
+ d.appendVar('BBCLASSEXTEND', ' native')
+}
+
+python multiarch_virtclass_handler() {
+ # In compat/native builds, ${PN} includes the -compat/-native suffix,
+ # so recipe-writers need to be careful when using it. Most of the time,
+ # they probably want to use ${BPN}, and in general, it's their responsibility
+ # to do so. If they don't, then it's ok for the build of the compat/native
+ # variant to fail. However, some variables are evaluated at parse time,
+ # and this will break the recipe even when compat/native is not requested.
+ # e.g., SRC_URI="file://${PN}" will try to checksum the local file at
+ # parse time, and parsing always happens for all build variants. So in those
+ # few variables, we automatically replace ${PN} with ${BPN}.
+ def fixup_pn_in_vars(d):
+ vars = 'SRC_URI FILESPATH'.split()
+ for var in vars:
+ v = d.getVar(var, expand=False)
+ if v is not None:
+ d.setVar(var, v.replace('${PN}', '${BPN}'))
+
+ # When building compat/native, the corresponding suffix needs to be
+ # propagated to all bitbake dependency definitions.
+ def fixup_depends(suffix, d):
+ vars = 'PROVIDES RPROVIDES DEPENDS RDEPENDS'.split()
+ for var in vars:
+ multiarch_var = []
+ val = d.getVar(var)
+ if val is None:
+ continue
+ for v in val.split():
+ if v.endswith('-compat') or v.endswith('-native'):
+ multiarch_var.append(v)
+ else:
+ multiarch_var.append(v + suffix)
+ d.setVar(var, ' '.join(multiarch_var))
+
+ pn = e.data.getVar('PN')
+ if pn.endswith('-compat'):
+ e.data.setVar('BPN', pn[:-len('-compat')])
+ e.data.appendVar('OVERRIDES', ':class-compat')
+ fixup_pn_in_vars(e.data)
+ fixup_depends('-compat', e.data)
+ elif pn.endswith('-native'):
+ e.data.setVar('BPN', pn[:-len('-native')])
+ e.data.appendVar('OVERRIDES', ':class-native')
+ fixup_pn_in_vars(e.data)
+ fixup_depends('-native', e.data)
+}
+addhandler multiarch_virtclass_handler
+multiarch_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise"
+
+# function to convert bitbake targets to installable debian packages,
+# e.g., "hello-compat" to "hello:i386".
+def isar_multiarch_packages(var, d):
+ bb_targets = (d.getVar(var) or '').split()
+ packages = []
+ compat_distro_arch = d.getVar('COMPAT_DISTRO_ARCH')
+ host_arch = d.getVar('HOST_ARCH')
+ for t in bb_targets:
+ if t.endswith('-compat') and compat_distro_arch is not None:
+ packages.append(t[:-len('-compat')] + ':' + compat_distro_arch)
+ elif t.endswith('-native'):
+ packages.append(t[:-len('-native')] + ':' + host_arch)
+ else:
+ packages.append(t)
+ return ' '.join(packages)
diff --git a/meta/classes/native.bbclass b/meta/classes/native.bbclass
new file mode 100644
index 00000000..d2581ac1
--- /dev/null
+++ b/meta/classes/native.bbclass
@@ -0,0 +1,10 @@
+# This software is a part of ISAR.
+# Copyright (C) 2023 Siemens AG
+#
+# SPDX-License-Identifier: MIT
+
+################################################################################
+# package recipe modifications when building *-native:
+################################################################################
+
+PACKAGE_ARCH:class-native = "${HOST_ARCH}"
diff --git a/meta/classes/sdk.bbclass b/meta/classes/sdk.bbclass
index 01eb3a67..da8f6c89 100644
--- a/meta/classes/sdk.bbclass
+++ b/meta/classes/sdk.bbclass
@@ -58,7 +58,7 @@ python __anonymous() {
# rootfs/image overrides for the SDK
ROOTFS_ARCH:class-sdk = "${HOST_ARCH}"
ROOTFS_DISTRO:class-sdk = "${HOST_DISTRO}"
-ROOTFS_PACKAGES:class-sdk = "sdk-files ${TOOLCHAIN} ${SDK_PREINSTALL} ${SDK_INSTALL}"
+ROOTFS_PACKAGES:class-sdk = "sdk-files ${TOOLCHAIN} ${SDK_PREINSTALL} ${@isar_multiarch_packages('SDK_INSTALL', d)}"
ROOTFS_FEATURES:append:class-sdk = " clean-package-cache generate-manifest export-dpkg-status"
ROOTFS_MANIFEST_DEPLOY_DIR:class-sdk = "${DEPLOY_DIR_SDKCHROOT}"
ROOTFS_DPKGSTATUS_DEPLOY_DIR:class-sdk = "${DEPLOY_DIR_SDKCHROOT}"
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 05ccb7b8..dd21319a 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -81,6 +81,7 @@ QEMU_ARCH:riscv64 = "riscv64"
# Codename of the repository created by the caching class
DEBDISTRONAME ?= "isar"
+NATIVELSBSTRING ?= "isarnative"
# Strings used in sstate signature files
TARGET_VENDOR = ""
diff --git a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
index 99d75e21..21a2d92f 100644
--- a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
+++ b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
@@ -274,6 +274,8 @@ do_bootstrap[dirs] = "${DEPLOY_DIR_BOOTSTRAP}"
do_bootstrap[depends] = "base-apt:do_cache isar-apt:do_cache_config"
do_bootstrap[network] = "${TASK_USE_NETWORK_AND_SUDO}"
+inherit compat
+
do_bootstrap() {
if [ "${ISAR_ENABLE_COMPAT_ARCH}" = "1" ]; then
if [ -z "${COMPAT_DISTRO_ARCH}" ]; then
diff --git a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
index fb061dac..fd8bb648 100644
--- a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
+++ b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
@@ -9,6 +9,7 @@ LIC_FILES_CHKSUM = "file://${LAYERDIR_core}/licenses/COPYING.GPLv2;md5=751419260
PV = "1.0"
inherit rootfs
+inherit compat
python() {
distro_gcc = d.getVar('DISTRO_GCC')
@@ -20,18 +21,19 @@ python() {
d.appendVar('SBUILD_CHROOT_PREINSTALL_COMMON',
' libstdc++-{}-dev:{}'.format(distro_gcc, distro_arch))
- if d.getVar('ISAR_ENABLE_COMPAT_ARCH') == '1':
- compat_arch = d.getVar('COMPAT_DISTRO_ARCH')
+ if d.getVar('ISAR_ENABLE_COMPAT_ARCH') == '1':
+ compat_arch = d.getVar('COMPAT_DISTRO_ARCH')
+ d.appendVar('SBUILD_CHROOT_COMPAT_PREINSTALL',
+ ' libc6-dev:{}'.format(compat_arch))
+ d.appendVar('SBUILD_CHROOT_COMPAT_PREINSTALL',
+ ' crossbuild-essential-{}'.format(compat_arch))
+ if d.getVar('DISTRO_GCC'):
d.appendVar('SBUILD_CHROOT_COMPAT_PREINSTALL',
' libgcc-{}-dev:{}'.format(distro_gcc, compat_arch))
d.appendVar('SBUILD_CHROOT_COMPAT_PREINSTALL',
' libstdc++-{}-dev:{}'.format(distro_gcc, compat_arch))
}
-SBUILD_CHROOT_COMPAT_PREINSTALL:compat-arch = " \
- libc6-dev:${COMPAT_DISTRO_ARCH} \
- crossbuild-essential-${COMPAT_DISTRO_ARCH}"
-
SBUILD_CHROOT_PREINSTALL_COMMON = " \
${SBUILD_CHROOT_COMPAT_PREINSTALL} \
libc6-dev:${DISTRO_ARCH} \
--
2.30.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v4 3/4] remove obsolete compat-arch override
2023-03-03 10:20 [PATCH v4 0/4] multiarch support Adriaan Schmidt
2023-03-03 10:20 ` [PATCH v4 1/4] bitbake.conf: use PACKAGE_ARCH in overrides Adriaan Schmidt
2023-03-03 10:20 ` [PATCH v4 2/4] add multiarch support Adriaan Schmidt
@ 2023-03-03 10:20 ` Adriaan Schmidt
2023-03-03 10:20 ` [PATCH v4 4/4] doc: add compat/native targets to user manual Adriaan Schmidt
2023-03-06 6:05 ` [PATCH v4 0/4] multiarch support Uladzimir Bely
4 siblings, 0 replies; 6+ messages in thread
From: Adriaan Schmidt @ 2023-03-03 10:20 UTC (permalink / raw)
To: isar-users; +Cc: Adriaan Schmidt
The compat-arch override is no longer needed, as PACKAGE_ARCH is controlled
by DEPENDing on <package>-compat.
Also change the compat test: adding the compat package now happens via
IMAGE_INSTALL in the config.
Signed-off-by: Adriaan Schmidt <adriaan.schmidt@siemens.com>
---
meta-isar/recipes-app/hello-isar/hello-isar.bb | 3 ---
meta-isar/recipes-app/libhello/libhello.bb | 3 ---
meta/conf/bitbake.conf | 3 +--
testsuite/cibuilder.py | 4 ++++
4 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/meta-isar/recipes-app/hello-isar/hello-isar.bb b/meta-isar/recipes-app/hello-isar/hello-isar.bb
index 39ddecb9..7d9f8322 100644
--- a/meta-isar/recipes-app/hello-isar/hello-isar.bb
+++ b/meta-isar/recipes-app/hello-isar/hello-isar.bb
@@ -20,7 +20,4 @@ SRC_URI = " \
file://yet-another-change.txt;apply=yes;striplevel=0"
SRCREV = "a18c14cc11ce6b003f3469e89223cffb4016861d"
-# NOTE: This is just to test 32-bit building on 64-bit archs.
-PACKAGE_ARCH:compat-arch = "${COMPAT_DISTRO_ARCH}"
-
inherit dpkg
diff --git a/meta-isar/recipes-app/libhello/libhello.bb b/meta-isar/recipes-app/libhello/libhello.bb
index 3770fdb4..8b10842f 100644
--- a/meta-isar/recipes-app/libhello/libhello.bb
+++ b/meta-isar/recipes-app/libhello/libhello.bb
@@ -13,7 +13,4 @@ PV = "0.1-98f2e41"
SRC_URI = "git://github.com/ilbers/libhello.git;protocol=https;branch=master;destsuffix=${P}"
SRCREV = "98f2e41e7d05ab8d19b0c5d160b104b725c8fd93"
-# NOTE: This is just to test 32-bit building on 64-bit archs.
-PACKAGE_ARCH:compat-arch = "${COMPAT_DISTRO_ARCH}"
-
inherit dpkg
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index dd21319a..0c79a5b6 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -67,9 +67,8 @@ KERNEL_FILE:mipsel ?= "vmlinux"
KERNEL_FILE:riscv64 ?= "vmlinux"
KERNEL_FILE:arm64 ?= "vmlinux"
-OVERRIDES = "${PACKAGE_ARCH}:${COMPAT_OVERRIDE}:${MACHINE}:${DISTRO}:${BASE_DISTRO_CODENAME}:forcevariable"
+OVERRIDES = "${PACKAGE_ARCH}:${MACHINE}:${DISTRO}:${BASE_DISTRO_CODENAME}:forcevariable"
FILESOVERRIDES = "${PACKAGE_ARCH}:${MACHINE}"
-COMPAT_OVERRIDE = "${@'compat-arch' if d.getVar('ISAR_ENABLE_COMPAT_ARCH') == '1' else ''}"
# Setting default QEMU_ARCH variables for different DISTRO_ARCH:
QEMU_ARCH:amd64 = "x86_64"
diff --git a/testsuite/cibuilder.py b/testsuite/cibuilder.py
index 5eebd5aa..34438f7f 100755
--- a/testsuite/cibuilder.py
+++ b/testsuite/cibuilder.py
@@ -97,7 +97,11 @@ class CIBuilder(Test):
with open(self.build_dir + '/conf/ci_build.conf', 'w') as f:
if compat_arch:
f.write('ISAR_ENABLE_COMPAT_ARCH:amd64 = "1"\n')
+ f.write('IMAGE_INSTALL:remove:amd64 = "hello-isar"\n')
+ f.write('IMAGE_INSTALL:append:amd64 = " hello-isar-compat"\n')
f.write('ISAR_ENABLE_COMPAT_ARCH:arm64 = "1"\n')
+ f.write('IMAGE_INSTALL:remove:arm64 = "hello-isar"\n')
+ f.write('IMAGE_INSTALL:append:arm64 = " hello-isar-compat"\n')
f.write('IMAGE_INSTALL += "kselftest"\n')
if cross:
f.write('ISAR_CROSS_COMPILE = "1"\n')
--
2.30.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v4 4/4] doc: add compat/native targets to user manual
2023-03-03 10:20 [PATCH v4 0/4] multiarch support Adriaan Schmidt
` (2 preceding siblings ...)
2023-03-03 10:20 ` [PATCH v4 3/4] remove obsolete compat-arch override Adriaan Schmidt
@ 2023-03-03 10:20 ` Adriaan Schmidt
2023-03-06 6:05 ` [PATCH v4 0/4] multiarch support Uladzimir Bely
4 siblings, 0 replies; 6+ messages in thread
From: Adriaan Schmidt @ 2023-03-03 10:20 UTC (permalink / raw)
To: isar-users; +Cc: Adriaan Schmidt
Signed-off-by: Adriaan Schmidt <adriaan.schmidt@siemens.com>
---
RECIPE-API-CHANGELOG.md | 8 ++++++++
doc/user_manual.md | 19 ++++++++++++-------
2 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
index e48c98c7..b7fc710e 100644
--- a/RECIPE-API-CHANGELOG.md
+++ b/RECIPE-API-CHANGELOG.md
@@ -476,3 +476,11 @@ Bitbake 2.0 for better performance. It also requires isar-sstate script to be
migrated to zstd.
Mixing old Gzip-based and new ZStandatd-based sstate cache is not recommended
and should be avoid for correct compatibility.
+
+### The `compat-arch` override was removed
+
+Recipes inheriting dpkg-base now automatically have a bitbake target
+`<foo>-compat`, if `ISAR_ENABLE_COMPAT_ARCH == "1"`, and if a compat architecture
+exists for the current `DISTRO_ARCH`.
+In that case the compat package can be built by adding `<foo>-compat`
+to `DEPENDS` or `IMAGE_INSTALL`.
diff --git a/doc/user_manual.md b/doc/user_manual.md
index b9a0bb64..3db5eb26 100644
--- a/doc/user_manual.md
+++ b/doc/user_manual.md
@@ -963,18 +963,24 @@ Debian cross-compilation works out of the box. Currently the following build con
Experimental support for riscv64 is available as well.
-### Cross-building for a compat architecture
+### Building for a compat and/or native architecture
Some architectures, under Isar amd64 and arm64 so far, support running 32-bit
legacy applications on 64-bit kernels. Debian supports this via the multiarch
concept.
Isar can build 32-bit packages as part of a 64-bit image build and also enable
-the image with the necessary packages. To activate the compat mode of a build,
-set `ISAR_ENABLE_COMPAT_ARCH = "1"` in `local.conf`. Packages that shall be
-built for the compat arch need to be tagged individually by setting
-`PACKAGE_ARCH = "${COMPAT_DISTRO_ARCH}"` in the package recipe. Non-tagged
-packages will continue to be built for the primary target architecture.
+the image with the necessary packages. To activate compat support,
+set `ISAR_ENABLE_COMPAT_ARCH = "1"` in `local.conf`. This will install neccessary
+build dependencies in the buildchroot.
+
+For all dpkg package recipes, Isar automatically provides a `<package>-compat`
+target that builds the package for the `COMPAT_DISTRO_ARCH`. This can be
+referenced using the `DEPENDS` and `IMAGE_INSTALL` variables.
+
+To explicitly build a package for the build host architecture (in cross build
+scenarios, or when generating an SDK), Isar automatically provides a
+`<package>-native` target for all dpkg package recipes.
### Cross Support for Imagers
@@ -987,7 +993,6 @@ In case your setup does not support cross-imaging, you can disable this
just for the particular image by adding `ISAR_CROSS_COMPILE = "0"` to your
image recipe.
-
## Examining and debugging package generation inside their buildchroot
Just like OpenEmbedded, Isar supports a devshell target for all dpkg package
--
2.30.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 0/4] multiarch support
2023-03-03 10:20 [PATCH v4 0/4] multiarch support Adriaan Schmidt
` (3 preceding siblings ...)
2023-03-03 10:20 ` [PATCH v4 4/4] doc: add compat/native targets to user manual Adriaan Schmidt
@ 2023-03-06 6:05 ` Uladzimir Bely
4 siblings, 0 replies; 6+ messages in thread
From: Uladzimir Bely @ 2023-03-06 6:05 UTC (permalink / raw)
To: isar-users
In the email from Friday, 3 March 2023 13:20:41 +03 user Adriaan Schmidt wrote:
> This adds `<package>-compat` and `<package>-native` bitbake
> targets to all recipes inheriting dpkg-base.
>
> The new -compat build variant replaces the old compat mechanism.
> Note that `ISAR_ENABLE_COMPAT_ARCH="1"` is still required to
> ensure that the bootstrap and buildchroot is prepared correctly.
>
> Regarding testing of the new features:
> - we have (limited) testing of compat, by adding `hello-isar-compat` to
> amd64 and arm64 builds.
> - currently no testing of native. There are two main use cases for the feature:
> - SDK that needs `<package>-native`. This could be turned into a test
> easily, by setting/appending SDK_INSTALL. Would require a new option
> in testsuite, similar to `image_install` introduced in 57a0ade9a.
> - A build tool that is provided by a recipe, when using it in cross
> compilation. E.g. if someone needed a patched cmake, they would
> write cmake.bb, and applications that need it would (in case cross
> compilation is enabled) DEPEND+="cmake-native". Or, another real-world
> example from a downstream layer: packaging applications with goreleaser,
> which is not found in the Debian apt repos. Instead, I'm fetching it
> via a dpkg-prebuilt recipe, written to support multiple architectures
> (architecture is part of the download URL). Now if I want to cross
> compile go applications, they DEPEND+="goreleaser-native", and
> DEBIAN_BUILD_DEPENDS_append=", goreleaser:native".
> These cases are more complex, but maybe we can find an example along
> those lines and add it to meta-isar.
>
> As testing of the native feature would (in the simple case) need an
> extension of the test classes (for SDK_INSTALL), or introduce something
> completely new into meta-isar, I'd like to do that after discussion, in
> a later series.
>
> Adriaan
>
> changes since v3:
> - removed the unneeded (expand=)True argument from d.getVar() calls
> - changed "calculate" to "determine" in comment
> - added note to RECIPE-API-CHANGELOG
>
> changes since v2:
> - fixed a bug that completely broke things for targets without a compat
> arch (e.g., i386). The compat variant of packages is now only available
> when it can actually be built.
> - the native variant is only generated if it differs from the target.
> If DISTRO_ARCH==HOST_ARCH, then `<package>-native` is automatically
> provided by the target package.
> - also do the bitbake-target->debian-package transformation on SDK_INSTALL
> - fix compat packages in testsuite: when we add hello-isar-compat, we
> need to remove hello-isar.
>
> changes since v1:
> - fixed an issue that prevented arch overrides of
> ISAR_ENABLE_COMPAT_ARCH, which is used in testsuite
> - added `-native` expansion to contents of IMAGE_INSTALL
> - documentation in user_manual
>
>
> Adriaan Schmidt (4):
> bitbake.conf: use PACKAGE_ARCH in overrides
> add multiarch support
> remove obsolete compat-arch override
> doc: add compat/native targets to user manual
>
> RECIPE-API-CHANGELOG.md | 8 ++
> doc/user_manual.md | 19 ++--
> .../recipes-app/hello-isar/hello-isar.bb | 3 -
> meta-isar/recipes-app/libhello/libhello.bb | 3 -
> .../recipes-app/samefile/samefile_2.14.bb | 2 +-
> meta/classes/compat.bbclass | 40 +++++++++
> meta/classes/debianize.bbclass | 2 +-
> meta/classes/dpkg-base.bbclass | 1 +
> meta/classes/image.bbclass | 4 +-
> meta/classes/multiarch.bbclass | 88 +++++++++++++++++++
> meta/classes/native.bbclass | 10 +++
> meta/classes/sdk.bbclass | 2 +-
> meta/conf/bitbake.conf | 6 +-
> .../isar-bootstrap/isar-bootstrap.inc | 2 +
> .../sbuild-chroot/sbuild-chroot.inc | 14 +--
> testsuite/cibuilder.py | 4 +
> 16 files changed, 182 insertions(+), 26 deletions(-)
> create mode 100644 meta/classes/compat.bbclass
> create mode 100644 meta/classes/multiarch.bbclass
> create mode 100644 meta/classes/native.bbclass
>
>
Applied to next, thanks.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-03-06 6:05 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-03 10:20 [PATCH v4 0/4] multiarch support Adriaan Schmidt
2023-03-03 10:20 ` [PATCH v4 1/4] bitbake.conf: use PACKAGE_ARCH in overrides Adriaan Schmidt
2023-03-03 10:20 ` [PATCH v4 2/4] add multiarch support Adriaan Schmidt
2023-03-03 10:20 ` [PATCH v4 3/4] remove obsolete compat-arch override Adriaan Schmidt
2023-03-03 10:20 ` [PATCH v4 4/4] doc: add compat/native targets to user manual Adriaan Schmidt
2023-03-06 6:05 ` [PATCH v4 0/4] multiarch support Uladzimir Bely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox