* [PATCH v3 0/4] multiarch support
@ 2023-02-24 14:24 Adriaan Schmidt
2023-02-24 14:24 ` [PATCH v3 1/4] bitbake.conf: use PACKAGE_ARCH in overrides Adriaan Schmidt
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Adriaan Schmidt @ 2023-02-24 14:24 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 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
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 +
15 files changed, 174 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] 8+ messages in thread
* [PATCH v3 1/4] bitbake.conf: use PACKAGE_ARCH in overrides
2023-02-24 14:24 [PATCH v3 0/4] multiarch support Adriaan Schmidt
@ 2023-02-24 14:24 ` Adriaan Schmidt
2023-02-24 14:24 ` [PATCH v3 2/4] add multiarch support Adriaan Schmidt
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Adriaan Schmidt @ 2023-02-24 14:24 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] 8+ messages in thread
* [PATCH v3 2/4] add multiarch support
2023-02-24 14:24 [PATCH v3 0/4] multiarch support Adriaan Schmidt
2023-02-24 14:24 ` [PATCH v3 1/4] bitbake.conf: use PACKAGE_ARCH in overrides Adriaan Schmidt
@ 2023-02-24 14:24 ` Adriaan Schmidt
2023-02-24 14:24 ` [PATCH v3 3/4] remove obsolete compat-arch override Adriaan Schmidt
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Adriaan Schmidt @ 2023-02-24 14:24 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..1ca3e960
--- /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
+################################################################################
+
+# calculate 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', True)
+ package_arch = d.getVar('PACKAGE_ARCH', True)
+ overrides = d.getVar('OVERRIDES', True).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', True)
+ compat_distro_arch = localdata.getVar('COMPAT_DISTRO_ARCH', True)
+
+ 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', True) is not None and
+ d.getVar('ISAR_ENABLE_COMPAT_ARCH', True) == '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..21a4f610
--- /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', True) == d.getVar('DISTRO_ARCH', True):
+ pn = d.getVar('PN', True)
+ if not pn.endswith('-native') and not pn.endswith('-compat'):
+ provides = (d.getVar('PROVIDES', True) 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, 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, True)
+ 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, True) or '').split()
+ packages = []
+ compat_distro_arch = d.getVar('COMPAT_DISTRO_ARCH', True)
+ host_arch = d.getVar('HOST_ARCH', True)
+ 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 0a98ea04..bfd47d0e 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] 8+ messages in thread
* [PATCH v3 3/4] remove obsolete compat-arch override
2023-02-24 14:24 [PATCH v3 0/4] multiarch support Adriaan Schmidt
2023-02-24 14:24 ` [PATCH v3 1/4] bitbake.conf: use PACKAGE_ARCH in overrides Adriaan Schmidt
2023-02-24 14:24 ` [PATCH v3 2/4] add multiarch support Adriaan Schmidt
@ 2023-02-24 14:24 ` Adriaan Schmidt
2023-02-24 14:24 ` [PATCH v3 4/4] doc: add compat/native targets to user manual Adriaan Schmidt
2023-03-03 7:31 ` [PATCH v3 0/4] multiarch support Uladzimir Bely
4 siblings, 0 replies; 8+ messages in thread
From: Adriaan Schmidt @ 2023-02-24 14:24 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 72522f4d..89d01531 100755
--- a/testsuite/cibuilder.py
+++ b/testsuite/cibuilder.py
@@ -96,7 +96,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] 8+ messages in thread
* [PATCH v3 4/4] doc: add compat/native targets to user manual
2023-02-24 14:24 [PATCH v3 0/4] multiarch support Adriaan Schmidt
` (2 preceding siblings ...)
2023-02-24 14:24 ` [PATCH v3 3/4] remove obsolete compat-arch override Adriaan Schmidt
@ 2023-02-24 14:24 ` Adriaan Schmidt
2023-03-03 7:31 ` [PATCH v3 0/4] multiarch support Uladzimir Bely
4 siblings, 0 replies; 8+ messages in thread
From: Adriaan Schmidt @ 2023-02-24 14:24 UTC (permalink / raw)
To: isar-users; +Cc: Adriaan Schmidt
Signed-off-by: Adriaan Schmidt <adriaan.schmidt@siemens.com>
---
doc/user_manual.md | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
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] 8+ messages in thread
* Re: [PATCH v3 0/4] multiarch support
2023-02-24 14:24 [PATCH v3 0/4] multiarch support Adriaan Schmidt
` (3 preceding siblings ...)
2023-02-24 14:24 ` [PATCH v3 4/4] doc: add compat/native targets to user manual Adriaan Schmidt
@ 2023-03-03 7:31 ` Uladzimir Bely
2023-03-03 7:39 ` Jan Kiszka
4 siblings, 1 reply; 8+ messages in thread
From: Uladzimir Bely @ 2023-03-03 7:31 UTC (permalink / raw)
To: isar-users, jan.kiszka; +Cc: Adriaan Schmidt
In mail from Friday, 24 February 2023 17:24:28 +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 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
>
> 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 +
> 15 files changed, 174 insertions(+), 26 deletions(-)
> create mode 100644 meta/classes/compat.bbclass
> create mode 100644 meta/classes/multiarch.bbclass
> create mode 100644 meta/classes/native.bbclass
The patchset passes CI (there was a delay in testing due to internal problems
with it) and is ready for merge.
I'd like just to remind that Jan requested mentioning changes in RECIPE-API-
CHANGELOG, not only in user_manual.
If this point is still valid, we need v4; if not, we could proceed with
patchset merge.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 0/4] multiarch support
2023-03-03 7:31 ` [PATCH v3 0/4] multiarch support Uladzimir Bely
@ 2023-03-03 7:39 ` Jan Kiszka
2023-03-03 8:10 ` Schmidt, Adriaan
0 siblings, 1 reply; 8+ messages in thread
From: Jan Kiszka @ 2023-03-03 7:39 UTC (permalink / raw)
To: Uladzimir Bely, isar-users; +Cc: Adriaan Schmidt
On 03.03.23 08:31, Uladzimir Bely wrote:
> In mail from Friday, 24 February 2023 17:24:28 +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 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
>>
>> 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 +
>> 15 files changed, 174 insertions(+), 26 deletions(-)
>> create mode 100644 meta/classes/compat.bbclass
>> create mode 100644 meta/classes/multiarch.bbclass
>> create mode 100644 meta/classes/native.bbclass
>
> The patchset passes CI (there was a delay in testing due to internal problems
> with it) and is ready for merge.
>
> I'd like just to remind that Jan requested mentioning changes in RECIPE-API-
> CHANGELOG, not only in user_manual.
>
> If this point is still valid, we need v4; if not, we could proceed with
> patchset merge.
>
The point remains valid due to patch 3, but I suppose we can quickly add
a related patch for the changelog on top. Adriaan?
Jan
--
Siemens AG, Technology
Competence Center Embedded Linux
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH v3 0/4] multiarch support
2023-03-03 7:39 ` Jan Kiszka
@ 2023-03-03 8:10 ` Schmidt, Adriaan
0 siblings, 0 replies; 8+ messages in thread
From: Schmidt, Adriaan @ 2023-03-03 8:10 UTC (permalink / raw)
To: Kiszka, Jan, Uladzimir Bely, isar-users
Kiszka, Jan (T CED), Freitag, 3. März 2023 08:40:
> On 03.03.23 08:31, Uladzimir Bely wrote:
> > In mail from Friday, 24 February 2023 17:24:28 +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 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
> >>
> >> 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 +
> >> 15 files changed, 174 insertions(+), 26 deletions(-)
> >> create mode 100644 meta/classes/compat.bbclass
> >> create mode 100644 meta/classes/multiarch.bbclass
> >> create mode 100644 meta/classes/native.bbclass
> >
> > The patchset passes CI (there was a delay in testing due to internal
> problems
> > with it) and is ready for merge.
> >
> > I'd like just to remind that Jan requested mentioning changes in RECIPE-
> API-
> > CHANGELOG, not only in user_manual.
> >
> > If this point is still valid, we need v4; if not, we could proceed with
> > patchset merge.
> >
>
> The point remains valid due to patch 3, but I suppose we can quickly add
> a related patch for the changelog on top. Adriaan?
I'm already preparing v4 with cosmetic changes that came up in review (mainly
dropping the expand=True in calls to getVar()).
I will add a note to the recipe api changelog.
Adriaan
> Jan
>
> --
> Siemens AG, Technology
> Competence Center Embedded Linux
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-03-03 8:10 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-24 14:24 [PATCH v3 0/4] multiarch support Adriaan Schmidt
2023-02-24 14:24 ` [PATCH v3 1/4] bitbake.conf: use PACKAGE_ARCH in overrides Adriaan Schmidt
2023-02-24 14:24 ` [PATCH v3 2/4] add multiarch support Adriaan Schmidt
2023-02-24 14:24 ` [PATCH v3 3/4] remove obsolete compat-arch override Adriaan Schmidt
2023-02-24 14:24 ` [PATCH v3 4/4] doc: add compat/native targets to user manual Adriaan Schmidt
2023-03-03 7:31 ` [PATCH v3 0/4] multiarch support Uladzimir Bely
2023-03-03 7:39 ` Jan Kiszka
2023-03-03 8:10 ` Schmidt, Adriaan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox