The SDK environment sets PKG_CONFIG_SYSROOT_DIR, PKG_CONFIG_PATH and PKG_CONFIG_LIBDIR so that pkg-config answers for the target. That is right for everything built to run there and wrong for a program built to run on the SDK host.
The kernel build compiles host tools of its own, and objtool asks pkg-config where libelf is. It gets the target's include directory, compiles a host tool against the target's C library headers, and stops on warnings that -Wno-system-headers would otherwise have covered: usr/include/sys/cdefs.h:486: error: "__attribute_const__" redefined Export a HOSTPKG_CONFIG that undoes those three variables, and pass the same value on the make command line when the test builds an external module. Both halves are needed: the kernel assigns HOSTPKG_CONFIG with '=', so only a command line assignment takes effect today, and the export is there for kernels that assign it with '?=', which is proposed in https://lore.kernel.org/linux-kbuild/[email protected]/ OE-Core already does the command line half for its own kernel builds, in kernel.bbclass. Fixes [YOCTO #16239]. AI-Generated: codex/claude-opus 5 (xhigh) Signed-off-by: Trevor Woerner <[email protected]> --- meta/classes-recipe/toolchain-scripts.bbclass | 3 +++ meta/lib/oeqa/sdk/cases/kmod.py | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/meta/classes-recipe/toolchain-scripts.bbclass b/meta/classes-recipe/toolchain-scripts.bbclass index d94dcdee39b3..54d05c242c4b 100644 --- a/meta/classes-recipe/toolchain-scripts.bbclass +++ b/meta/classes-recipe/toolchain-scripts.bbclass @@ -63,6 +63,9 @@ toolchain_create_sdk_env_script () { echo "export PATH=$sdkpathnative$bindir:$sdkpathnative$sbindir:$sdkpathnative$base_bindir:$sdkpathnative$base_sbindir:$sdkpathnative$bindir/../${HOST_SYS}/bin:$sdkpathnative$bindir/${TARGET_SYS}"$EXTRAPATH':"$PATH"' >> $script echo 'export PKG_CONFIG_SYSROOT_DIR=$SDKTARGETSYSROOT' >> $script echo 'export PKG_CONFIG_PATH=$SDKTARGETSYSROOT'"$libdir"'/pkgconfig:$SDKTARGETSYSROOT'"$prefix"'/share/pkgconfig' >> $script + # pkg-config here answers for the target, which is wrong for the host + # tools the kernel build compiles. Honoured by kernels using '?='. + echo 'export HOSTPKG_CONFIG="env -u PKG_CONFIG_SYSROOT_DIR -u PKG_CONFIG_PATH -u PKG_CONFIG_LIBDIR pkg-config"' >> $script echo 'export CONFIG_SITE=${SDKPATH}/site-config-'"${multimach_target_sys}" >> $script echo "export OECORE_NATIVE_SYSROOT=\"$sdkpathnative\"" >> $script echo 'export OECORE_TARGET_SYSROOT="$SDKTARGETSYSROOT"' >> $script diff --git a/meta/lib/oeqa/sdk/cases/kmod.py b/meta/lib/oeqa/sdk/cases/kmod.py index 1be23e994fd2..1d73f076e552 100644 --- a/meta/lib/oeqa/sdk/cases/kmod.py +++ b/meta/lib/oeqa/sdk/cases/kmod.py @@ -26,8 +26,11 @@ class KernelModuleTest(OESDKTestCase): parallel_make = "-j %d" % (pmv) if pmv else "" self.ensure_target_package("kernel-devsrc") + # the kernel assigns HOSTPKG_CONFIG with '=', so it has to come from + # the make command line, as kernel.bbclass does + host_pkg_config = 'HOSTPKG_CONFIG="env -u PKG_CONFIG_SYSROOT_DIR -u PKG_CONFIG_PATH -u PKG_CONFIG_LIBDIR pkg-config"' # These targets need to be built before kernel modules can be built. - self._run("make %s -C $OECORE_TARGET_SYSROOT/usr/src/kernel prepare scripts" % (parallel_make)) + self._run("make %s %s -C $OECORE_TARGET_SYSROOT/usr/src/kernel prepare scripts" % (parallel_make, host_pkg_config)) with tempfile.TemporaryDirectory(prefix="cryptodev", dir=self.tc.sdk_dir) as testdir: git_url = "https://github.com/cryptodev-linux/cryptodev-linux" @@ -39,5 +42,5 @@ class KernelModuleTest(OESDKTestCase): self.assertTrue(os.path.isdir(sourcedir)) subprocess.check_output(["git", "-C", sourcedir, "checkout", git_sha], stderr=subprocess.STDOUT) - self._run("make -C %s V=1 KERNEL_DIR=$OECORE_TARGET_SYSROOT/usr/src/kernel" % sourcedir) + self._run("make -C %s V=1 %s KERNEL_DIR=$OECORE_TARGET_SYSROOT/usr/src/kernel" % (sourcedir, host_pkg_config)) self.check_elf(os.path.join(sourcedir, "cryptodev.ko")) -- 2.50.0.173.g8b6f19ccfc3a
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#242828): https://lists.openembedded.org/g/openembedded-core/message/242828 Mute This Topic: https://lists.openembedded.org/mt/120606848/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
