From patchwork Tue Oct 7 10:42:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 71763 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id E35DDCCA476 for ; Tue, 7 Oct 2025 10:43:02 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.15413.1759833773669198188 for ; Tue, 07 Oct 2025 03:42:53 -0700 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DBDF91424 for ; Tue, 7 Oct 2025 03:42:44 -0700 (PDT) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 7D47A3F59E for ; Tue, 7 Oct 2025 03:42:52 -0700 (PDT) From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH 1/4] clang: globally disable build-time RPATHs for reproducibility Date: Tue, 7 Oct 2025 11:42:44 +0100 Message-ID: <20251007104247.1530073-1-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 07 Oct 2025 10:43:02 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/224519 Various bits of the LLVM project set the build RPATH in a way that means we have non-deterministic binaries even though we should always be using relative paths. This clearly is not working as some of the binaries get rewritten on install and have large string paddings that correlate with erased build paths. So that we don't have to disable RPATHs in every recipe, just do it once in the common include file and remove the existing recipe-specific assignments that are now not needed. Signed-off-by: Ross Burton --- meta/recipes-devtools/clang/common-clang.inc | 4 ++++ meta/recipes-devtools/clang/libcxx_git.bb | 1 - meta/recipes-devtools/clang/lld_git.bb | 6 +----- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/meta/recipes-devtools/clang/common-clang.inc b/meta/recipes-devtools/clang/common-clang.inc index ca3a3a08b48..f7b7a1cf9a0 100644 --- a/meta/recipes-devtools/clang/common-clang.inc +++ b/meta/recipes-devtools/clang/common-clang.inc @@ -44,4 +44,8 @@ def get_clang_host_arch(bb, d): def get_clang_target_arch(bb, d): return get_clang_arch(bb, d, 'TARGET_ARCH') +# Don't put build-time RPATHs in the binaries, whilst they'll be stripped on +# install they cause non-deterministic binaries. +EXTRA_OECMAKE += "-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON" + require common.inc diff --git a/meta/recipes-devtools/clang/libcxx_git.bb b/meta/recipes-devtools/clang/libcxx_git.bb index b0ee3925f43..c630bd973ea 100644 --- a/meta/recipes-devtools/clang/libcxx_git.bb +++ b/meta/recipes-devtools/clang/libcxx_git.bb @@ -77,7 +77,6 @@ EXTRA_OECMAKE += "\ -DLLVM_RUNTIME_TARGETS=${HOST_ARCH} \ -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \ -DLLVM_APPEND_VC_REV=OFF \ - -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \ " EXTRA_OECMAKE:append:class-target = " \ diff --git a/meta/recipes-devtools/clang/lld_git.bb b/meta/recipes-devtools/clang/lld_git.bb index b0261ad2cb6..ba369427909 100644 --- a/meta/recipes-devtools/clang/lld_git.bb +++ b/meta/recipes-devtools/clang/lld_git.bb @@ -14,13 +14,9 @@ DEPENDS = "llvm-tblgen-native llvm" OECMAKE_SOURCEPATH = "${S}/lld" -# Explicitly disable RPATHs as otherwise they're stipped out of the binaries, -# and are then non-reproducible. -# # Explicitly enable symlinks as the lld build doesn't call into the llvm setup # and turn that on. -EXTRA_OECMAKE += "-DCMAKE_SKIP_BUILD_RPATH=ON \ - -DLLVM_INCLUDE_TESTS=OFF -DLLVM_USE_SYMLINKS=ON \ +EXTRA_OECMAKE += "-DLLVM_INCLUDE_TESTS=OFF -DLLVM_USE_SYMLINKS=ON \ -DLLVM_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/llvm-tblgen" BBCLASSEXTEND = "native nativesdk" From patchwork Tue Oct 7 10:42:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 71764 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C3B8CCD185 for ; Tue, 7 Oct 2025 10:43:03 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.15414.1759833773997337671 for ; Tue, 07 Oct 2025 03:42:54 -0700 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 83A9714BF for ; Tue, 7 Oct 2025 03:42:45 -0700 (PDT) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 25A2B3F59E for ; Tue, 7 Oct 2025 03:42:53 -0700 (PDT) From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH 2/4] llvm: add recipe for just the LLVM libraries Date: Tue, 7 Oct 2025 11:42:45 +0100 Message-ID: <20251007104247.1530073-2-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251007104247.1530073-1-ross.burton@arm.com> References: <20251007104247.1530073-1-ross.burton@arm.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 07 Oct 2025 10:43:03 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/224520 Whilst it's convenient to build all of the LLVM project in one big recipe, that's not ideal when we may just need LLVM on target and not the rest. Bring back a LLVM recipe that can be used by both clang (shortly) and Rust (in the future) Set the build type to MinSizeRel and DEBUG_LEVELFLAG to -g1 (instead of the default, -g): the LLVM debug symbols are very large (several gigabytes) and this reduces them to hundreds of megabytes. Signed-off-by: Ross Burton --- meta/conf/distro/include/maintainers.inc | 1 + meta/recipes-devtools/clang/llvm_git.bb | 129 +++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 meta/recipes-devtools/clang/llvm_git.bb diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index 0e5150895f2..d2c613b8e9d 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc @@ -483,6 +483,7 @@ RECIPE_MAINTAINER:pn-lld = "Khem Raj " RECIPE_MAINTAINER:pn-lldb = "Khem Raj " RECIPE_MAINTAINER:pn-llvm-project-source-21.1.2 = "Khem Raj " RECIPE_MAINTAINER:pn-llvm-tblgen-native = "Khem Raj " +RECIPE_MAINTAINER:pn-llvm = "Khem Raj " RECIPE_MAINTAINER:pn-logrotate = "Yi Zhao " RECIPE_MAINTAINER:pn-log4cplus = "Unassigned " RECIPE_MAINTAINER:pn-lrzsz = "Unassigned " diff --git a/meta/recipes-devtools/clang/llvm_git.bb b/meta/recipes-devtools/clang/llvm_git.bb new file mode 100644 index 00000000000..d2b060ff884 --- /dev/null +++ b/meta/recipes-devtools/clang/llvm_git.bb @@ -0,0 +1,129 @@ +# Copyright (C) 2017 Khem Raj +# Released under the MIT license (see COPYING.MIT for the terms) + +SUMMARY = "The LLVM Compiler Infrastructure" +HOMEPAGE = "http://llvm.org" +LICENSE = "Apache-2.0-with-LLVM-exception" +SECTION = "devel" + +require common-clang.inc +require common-source.inc + +LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=8a15a0759ef07f2682d2ba4b893c9afe" + +DEPENDS = "llvm-tblgen-native libffi libxml2 zlib zstd" + +inherit cmake pkgconfig lib_package + +OECMAKE_SOURCEPATH = "${S}/llvm" + +# By default we build all the supported CPU architectures, and the GPU targets +# if the opencl, opengl or vulkan DISTRO_FEATURES are enabled. +# +# For target builds we default to building that specific architecture, BPF, and the GPU targets if required. +# +# The available target list can be seen in the source code +# in the LLVM_ALL_TARGETS assignment: +# https://github.com/llvm/llvm-project/blob/main/llvm/CMakeLists.txt +LLVM_TARGETS_GPU ?= "${@bb.utils.contains_any('DISTRO_FEATURES', 'opencl opengl vulkan', 'AMDGPU;NVPTX;SPIRV', '', d)}" +LLVM_TARGETS_TO_BUILD ?= "AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86;LoongArch;${LLVM_TARGETS_GPU}" +LLVM_TARGETS_TO_BUILD:class-target ?= "${@get_clang_host_arch(bb, d)};BPF;${LLVM_TARGETS_GPU}" + +LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= "" + +HF = "" +HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}" +HF[vardepvalue] = "${HF}" + +EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=MinSizeRel \ + -DLLVM_ENABLE_BINDINGS=OFF \ + -DLLVM_ENABLE_FFI=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ + -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \ + -DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \ + -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ + -DLLVM_INCLUDE_TESTS=OFF \ + -DLLVM_INCLUDE_EXAMPLES=OFF \ + -DLLVM_TOOL_OBJ2YAML_BUILD=OFF \ + -DLLVM_TOOL_YAML2OBJ_BUILD=OFF \ + -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \ + -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ + -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \ + " + +EXTRA_OECMAKE:append:class-target = "\ + -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \ + -DLLVM_TARGET_ARCH=${HOST_ARCH} \ + -DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \ + -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \ + " + +EXTRA_OECMAKE:append:class-nativesdk = "\ + -DLLVM_HOST_TRIPLE=${SDK_SYS} \ + -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \ + " + +PACKAGECONFIG ??= "eh rtti shared-libs ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)}" +PACKAGECONFIG:remove:class-native = "lto thin-lto" + +PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF" +PACKAGECONFIG[exegesis] = "-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=ON,-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=OFF" +PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF,libedit" +PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF" +PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,-DLLVM_BUILD_LLVM_DYLIB=OFF -DLLVM_LINK_LLVM_DYLIB=OFF" +PACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF" +PACKAGECONFIG[opt-viewer] = "-DLLVM_TOOL_OPT_VIEWER_BUILD=ON,-DLLVM_TOOL_OPT_VIEWER_BUILD=OFF, \ + python3-pyyaml-native python3-pygments-native python3-pyyaml python3-pygments, \ + python3-pyyaml python3-pygments," +PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," +PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," + +# LLVM debug symbols are very large (several gigabytes), reduce the debug level +# so they're just hundreds of megabytes. +DEBUG_LEVELFLAG = "-g1" + +reproducible_build_variables() { + sed -i -e "s,${DEBUG_PREFIX_MAP},,g" \ + -e "s,--sysroot=${RECIPE_SYSROOT},,g" \ + -e "s,${STAGING_DIR_HOST},,g" \ + -e "s,${S}/llvm,,g" \ + -e "s,${B},,g" \ + ${B}/tools/llvm-config/BuildVariables.inc +} + +do_configure:append:class-target() { + reproducible_build_variables +} +do_configure:append:class-nativesdk() { + reproducible_build_variables +} + +do_install:append() { + # llvm hardcodes lib as install path, this corrects it to actual libdir. + # https://github.com/llvm/llvm-project/issues/152193 + if [ -d ${D}/${prefix}/lib -a ! -d ${D}/${libdir} ]; then + mv ${D}/${prefix}/lib ${D}/${libdir} + fi + + # Reproducibility fixes + sed -i -e 's,${WORKDIR},,g' ${D}/${libdir}/cmake/llvm/LLVMConfig.cmake +} + +do_install:append:class-native() { + # These are provided by llvm-tblgen-native + rm ${D}${bindir}/*-tblgen +} + +SYSROOT_PREPROCESS_FUNCS:append:class-target = " llvm_sysroot_preprocess" +SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " llvm_sysroot_preprocess" + +llvm_sysroot_preprocess() { + install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/ + install -m 0755 ${S}/llvm/tools/llvm-config/llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/ +} + +FILES:${PN}-dev += "${libdir}/llvm-config" + +BBCLASSEXTEND = "native nativesdk" From patchwork Tue Oct 7 10:42:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 71765 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id F4028CCA470 for ; Tue, 7 Oct 2025 10:43:02 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.15415.1759833774660841436 for ; Tue, 07 Oct 2025 03:42:54 -0700 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 48D2E1424 for ; Tue, 7 Oct 2025 03:42:46 -0700 (PDT) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id C2C5E3F59E for ; Tue, 7 Oct 2025 03:42:53 -0700 (PDT) From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH 3/4] clang: use llvm recipe Date: Tue, 7 Oct 2025 11:42:46 +0100 Message-ID: <20251007104247.1530073-3-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251007104247.1530073-1-ross.burton@arm.com> References: <20251007104247.1530073-1-ross.burton@arm.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 07 Oct 2025 10:43:02 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/224521 Change this recipe to build just clang and clang-tools-extra, using the LLVM provided by the llvm recipe. This adds an 'extra-tools' PACKAGECONFIG (enabled by default) that controls whether to build the clang-tools-extra project. This includes clang-tidy and clangd, but the compile time and size for these components is not insignificant. Add a patch from upstream to support using native prebuilt tools (such as clang-tblgen) when building standalone. Add a patch that is being worked on with upstream to not rebuild clang- tblgen if it has already been provided. This saves a little build time, but more importantly for us resolves a static linking/uninative problem. Remove the dependency on clang-cross in non-native builds by just depending on llvm-native and using the un-prefixed tools directly. Signed-off-by: Ross Burton --- ...ilding-native-tools-when-cross-compi.patch | 63 ++++++ .../clang/clang/clang-no-tblgen.patch | 24 +++ meta/recipes-devtools/clang/clang_git.bb | 190 +++--------------- meta/recipes-devtools/clang/common.inc | 2 + 4 files changed, 117 insertions(+), 162 deletions(-) create mode 100644 meta/recipes-devtools/clang/clang/0001-clang-Support-building-native-tools-when-cross-compi.patch create mode 100644 meta/recipes-devtools/clang/clang/clang-no-tblgen.patch diff --git a/meta/recipes-devtools/clang/clang/0001-clang-Support-building-native-tools-when-cross-compi.patch b/meta/recipes-devtools/clang/clang/0001-clang-Support-building-native-tools-when-cross-compi.patch new file mode 100644 index 00000000000..c4198394acf --- /dev/null +++ b/meta/recipes-devtools/clang/clang/0001-clang-Support-building-native-tools-when-cross-compi.patch @@ -0,0 +1,63 @@ +From 2ff1134d1d2b9f3c207e3ebd98de922f9ef6c15a Mon Sep 17 00:00:00 2001 +From: Ross Burton +Date: Wed, 24 Sep 2025 17:02:57 +0100 +Subject: [PATCH] [clang] Support building native tools when cross-compiling + standalone clang + +When cross-compiling the LLVM project as a whole (from llvm/), if it +cannot find presupplied tools it will create a native build environment +to build the tools it needs. + +However, when doing a standalone build of clang (that is, from clang/ +and linking against an existing libLLVM) this doesn't work. Instead +a _target_ binary is built which predictably then fails. + +The conventional workaround for this is to build the native tools in a +separate native compile phase and pass the paths to the cross build, for +example see OpenEmbedded[1] or Nix[2]. But we can do better! + +The first problem is that LLVM_USE_HOST_TOOLS is only set in the llvm/ +CMakeLists.txt, so setup_host_tool() will never consider building a +native binary. This can be solved by setting LLVM_USE_HOST_TOOLS based +on CMAKE_CROSSCOMPILING in clang/CMakeLists.txt in the standalone case. + +Now setup_host_tool() will try to build a native tool, but it needs +build_native_tool() from CrossCompile.cmake, so that also needs to be +included. + +Finally, the native binary then fails because there's no provider for +the dependency "CONFIGURE_Clang_NATIVE", so use llvm_create_cross_target +to create the native environment. + +These few lines mirror what the lldb CMakeLists.txt does in the +standalone case, so there is prior art for this. + +[1] https://git.openembedded.org/openembedded-core/tree/meta/recipes-devtools/clang/clang_git.bb?id=e18d697e92b55e57124e80234369d46575226386#n212 +[2] https://github.com/NixOS/nixpkgs/blob/3354d448f2a26117a74638957b0131ce3da9c8c4/pkgs/development/compilers/llvm/common/tblgen.nix#L54 + +Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/160605] +Signed-off-by: Ross Burton +--- + clang/CMakeLists.txt | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt +index 1bb73599970c..4eaa71289985 100644 +--- a/clang/CMakeLists.txt ++++ b/clang/CMakeLists.txt +@@ -80,6 +80,12 @@ if(CLANG_BUILT_STANDALONE) + include(GetErrcMessages) + include(LLVMDistributionSupport) + ++ if(CMAKE_CROSSCOMPILING) ++ set(LLVM_USE_HOST_TOOLS ON) ++ include(CrossCompile) ++ llvm_create_cross_target(Clang NATIVE "" Release) ++ endif() ++ + set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}") + set(BUG_REPORT_URL "${LLVM_PACKAGE_BUGREPORT}" CACHE STRING + "Default URL where bug reports are to be submitted.") +-- +2.43.0 + diff --git a/meta/recipes-devtools/clang/clang/clang-no-tblgen.patch b/meta/recipes-devtools/clang/clang/clang-no-tblgen.patch new file mode 100644 index 00000000000..e89cad8dc83 --- /dev/null +++ b/meta/recipes-devtools/clang/clang/clang-no-tblgen.patch @@ -0,0 +1,24 @@ +[clang] Only build clang-tblgen if it is actually needed + +It's possible to build clang with an existing clang-tblgen (common when +cross-compiling, for instance) by setting CLANG_TABLEGEN_EXE. If this +is the case there's no need to build it, as it won't be used. + +Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/161952] +Signed-off-by: Ross Burton + +diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt +index e4cb1a359620..b650b3b986f4 100644 +--- a/clang/CMakeLists.txt ++++ b/clang/CMakeLists.txt +@@ -479,7 +479,9 @@ option(CLANG_ENABLE_HLSL "Include HLSL build products" Off) + # While HLSL support is experimental this should stay hidden. + mark_as_advanced(CLANG_ENABLE_HLSL) + +-add_subdirectory(utils/TableGen) ++if (NOT DEFINED CLANG_TABLEGEN_EXE OR CLANG_INCLUDE_TESTS) ++ add_subdirectory(utils/TableGen) ++endif() + + # Export CLANG_TABLEGEN_EXE for use by flang docs. + set(CLANG_TABLEGEN_EXE "${CLANG_TABLEGEN_EXE}" CACHE INTERNAL "") diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb index f25633a5861..ca539635902 100644 --- a/meta/recipes-devtools/clang/clang_git.bb +++ b/meta/recipes-devtools/clang/clang_git.bb @@ -19,81 +19,37 @@ require common-source.inc BPN = "clang" -CVE_PRODUCT += "llvm:clang" - -INHIBIT_DEFAULT_DEPS:class-native = "1" +CVE_PRODUCT = "llvm:clang" LDFLAGS:append:class-target:riscv32 = " -Wl,--no-as-needed -latomic -Wl,--as-needed" LDFLAGS:append:class-target:mips = " -Wl,--no-as-needed -latomic -Wl,--as-needed" inherit cmake pkgconfig multilib_header python3-dir -PACKAGECONFIG_CLANG_COMMON = "build-id eh libedit rtti shared-libs libclang-python \ - ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'lld', '', d)} \ - ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcplusplus libomp unwindlib', '', d)} \ - " - -PACKAGECONFIG ??= "${PACKAGECONFIG_CLANG_COMMON} \ +PACKAGECONFIG ??= "build-id clangd libclang-python \ ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'lld', '', d)} \ + ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcplusplus libomp unwindlib', '', d)} \ " -PACKAGECONFIG:class-native = "clangd \ - ${PACKAGECONFIG_CLANG_COMMON} \ - " -PACKAGECONFIG:class-nativesdk = "clangd \ - ${PACKAGECONFIG_CLANG_COMMON} \ - ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \ - " +PACKAGECONFIG:remove:class-native = "lto thin-lto" PACKAGECONFIG[build-id] = "-DENABLE_LINKER_BUILD_ID=ON,-DENABLE_LINKER_BUILD_ID=OFF,," PACKAGECONFIG[clangd] = "-DCLANG_ENABLE_CLANGD=ON,-DCLANG_ENABLE_CLANGD=OFF,," - # Activate to build the dexp tool in clangd # Disabled by default for -native since it is known to trigger compiler failure on Debian 11 # See: https://bugzilla.yoctoproject.org/show_bug.cgi?id=15803 PACKAGECONFIG[clangd-dexp] = "-DCLANGD_BUILD_DEXP=ON,-DCLANGD_BUILD_DEXP=OFF,," - PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,," -PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF,," -PACKAGECONFIG[exegesis] = "-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=ON,-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=OFF" PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,," -PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF,libedit libedit-native" PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,," PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,," PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," -PACKAGECONFIG[opt-viewer] = "-DLLVM_TOOL_OPT_VIEWER_BUILD=ON,-DLLVM_TOOL_OPT_VIEWER_BUILD=OFF, \ - python3-pyyaml-native python3-pygments-native python3-pyyaml python3-pygments, \ - python3-pyyaml python3-pygments," -PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm," -PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF,," -PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,," -PACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF,," PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,," PACKAGECONFIG[libclang-python] = "-DCLANG_PYTHON_BINDINGS_VERSIONS=${PYTHON_BASEVERSION},," -OECMAKE_SOURCEPATH = "${S}/llvm" +OECMAKE_SOURCEPATH = "${S}/clang" -# By default we build all the supported CPU architectures, and the GPU targets -# if the opencl, opengl or vulkan DISTRO_FEATURES are enabled. -# -# For target builds we default to building that specific architecture, BPF, and the GPU targets if required. -# -# The available target list can be seen in the source code -# in the LLVM_ALL_TARGETS assignment: -# https://github.com/llvm/llvm-project/blob/main/llvm/CMakeLists.txt -LLVM_TARGETS_GPU ?= "${@bb.utils.contains_any('DISTRO_FEATURES', 'opencl opengl vulkan', 'AMDGPU;NVPTX;SPIRV', '', d)}" -LLVM_TARGETS_TO_BUILD ?= "AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86;LoongArch;${LLVM_TARGETS_GPU}" -LLVM_TARGETS_TO_BUILD:class-target ?= "${@get_clang_host_arch(bb, d)};BPF;${LLVM_TARGETS_GPU}" - -LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= "" - -HF = "" -HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}" -HF[vardepvalue] = "${HF}" - -# Ensure that LLVM_PROJECTS does not contain compiler runtime components e.g. libcxx etc -# they are enabled via LLVM_ENABLE_RUNTIMES -LLVM_PROJECTS ?= "clang;clang-tools-extra" # linux hosts (.so) on Windows .pyd SOLIBSDEV:mingw32 = ".pyd" @@ -102,89 +58,43 @@ SOLIBSDEV:mingw32 = ".pyd" EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ -DLLVM_APPEND_VC_REV=OFF \ - -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \ - -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \ -DLLVM_ENABLE_PIC=ON \ -DCLANG_DEFAULT_PIE_ON_LINUX=ON \ - -DLLVM_BINDINGS_LIST='' \ - -DLLVM_ENABLE_FFI=ON \ - -DLLVM_ENABLE_ZSTD=ON \ -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \ -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_BUILD_TYPE=MinSizeRel \ - -DLLVM_ENABLE_PROJECTS='${LLVM_PROJECTS}' \ - -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \ -DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \ - -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ - -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ - -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ + -DLLVM_CMAKE_DIR=${STAGING_LIBDIR}/cmake/llvm \ -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \ - -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ -DLLVM_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ + -DCLANG_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/clang-tblgen \ -DLLVM_INCLUDE_TESTS=OFF \ -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \ -" - -EXTRA_OECMAKE:append:class-nativesdk = "\ - -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \ - -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \ - -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \ - -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \ -" -EXTRA_OECMAKE:append:class-target = "\ - -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \ - -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \ - -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \ - -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \ - -DLLVM_TARGET_ARCH=${HOST_ARCH} \ - -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \ - -DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \ -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \ + -DCMAKE_AR=${STAGING_BINDIR_NATIVE}/llvm-ar \ + -DCMAKE_NM=${STAGING_BINDIR_NATIVE}/llvm-nm \ + -DCMAKE_RANLIB=${STAGING_BINDIR_NATIVE}/llvm-ranlib \ + -DCMAKE_STRIP=${STAGING_BINDIR_NATIVE}/llvm-strip \ " -DEPENDS = "binutils zlib zstd libffi libxml2 libxml2-native llvm-tblgen-native" -DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_SYS} virtual/nativesdk-cross-binutils" -DEPENDS:append:class-target = " ${MLPREFIX}clang-cross-${TARGET_ARCH} ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}" +DEPENDS = "llvm-tblgen-native llvm-native llvm binutils zlib zstd libffi libxml2 libxml2-native" +DEPENDS:append:class-target = " ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}" RDEPENDS:${PN}:append:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' lld', '', d)}" RRECOMMENDS:${PN}:append:class-target = "binutils ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', ' libcxx-dev', '', d)}" -# patch out build host paths for reproducibility -reproducible_build_variables() { - sed -i -e "s,${DEBUG_PREFIX_MAP},,g" \ - -e "s,--sysroot=${RECIPE_SYSROOT},,g" \ - -e "s,${STAGING_DIR_HOST},,g" \ - -e "s,${S}/llvm,,g" \ - -e "s,${B},,g" \ - ${B}/tools/llvm-config/BuildVariables.inc -} - -do_configure:append:class-target() { - reproducible_build_variables -} - -do_configure:append:class-nativesdk() { - reproducible_build_variables +do_configure:prepend() { + # Link clang-tools-extra into the clang tree as clang will look for it here + # if it's doing a standalone build. + ln -srf ${S}/clang-tools-extra ${S}/clang/tools/extra } do_install:append() { - oe_multilib_header llvm/Config/llvm-config.h oe_multilib_header clang/Config/config.h } do_install:append:class-target () { - # Allow bin path to change based on YOCTO_ALTERNATE_EXE_PATH - sed -i 's;${_IMPORT_PREFIX}/bin;${_IMPORT_PREFIX_BIN};g' ${D}${libdir}/cmake/llvm/LLVMExports-*.cmake - - # Insert function to populate Import Variables - sed -i "4i\ -if(DEFINED ENV{YOCTO_ALTERNATE_EXE_PATH})\n\ - execute_process(COMMAND \"llvm-config\" \"--bindir\" OUTPUT_VARIABLE _IMPORT_PREFIX_BIN OUTPUT_STRIP_TRAILING_WHITESPACE)\n\ -else()\n\ - set(_IMPORT_PREFIX_BIN \"\${_IMPORT_PREFIX}/bin\")\n\ -endif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-*.cmake - if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then mkdir -p ${D}${nonarch_libdir} mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang @@ -195,53 +105,16 @@ endif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-*.cmake llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov; do ln -sf $t ${D}${bindir}/${TARGET_PREFIX}$t done - - # reproducibility - sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake -} - -do_install:append:class-native () { - if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then - install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clangd-indexer ${D}${bindir}/clangd-indexer - fi - - for f in `find ${D}${bindir} -executable -type f -not -type l`; do - test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f - echo "stripped $f" - done - ln -sf llvm-config ${D}${bindir}/llvm-config${PV} - - # These are provided by llvm-tblgen-native - rm ${D}${bindir}/*-tblgen } do_install:append:class-nativesdk () { - if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then - sed -i -e "s|${B}/./bin/||g" ${D}${libdir}/cmake/llvm/LLVMConfig.cmake - fi - if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then - install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clangd-indexer ${D}${bindir}/clangd-indexer - fi - - for f in `find ${D}${bindir} -executable -type f -not -type l`; do - test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f - done - - rm -rf ${D}${datadir}/llvm/cmake - rm -rf ${D}${datadir}/llvm - #reproducibility if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake fi } -PROVIDES:append:class-native = " llvm-native" -PROVIDES:append:class-target = " llvm" -PROVIDES:append:class-nativesdk = " nativesdk-llvm" - -PACKAGES =+ "${PN}-libllvm ${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools \ - libclang llvm-linker-tools" +PACKAGES =+ "${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools libclang" BBCLASSEXTEND = "native nativesdk" @@ -259,8 +132,6 @@ RDEPENDS:${PN}-tools += "\ RRECOMMENDS:${PN}-tidy += "${PN}-tools" -FILES:llvm-linker-tools = "${libdir}/LLVMgold* ${libdir}/libLTO.so.* ${libdir}/LLVMPolly*" - FILES:${PN}-libclang-cpp = "${libdir}/libclang-cpp.so.*" FILES:${PN}-libclang-python = "${PYTHON_SITEPACKAGES_DIR}/clang/*" @@ -323,12 +194,6 @@ FILES:${PN} += "\ ${nonarch_libdir}/${BPN}/*/include/ \ " -FILES:${PN}-libllvm =+ "\ - ${libdir}/libLLVM.so.${MAJOR_VER}.${MINOR_VER} \ - ${libdir}/libLLVM-${MAJOR_VER}.so \ - ${libdir}/libRemarks.so.* \ -" - FILES:libclang = "\ ${libdir}/libclang.so.* \ " @@ -349,7 +214,6 @@ FILES:${PN}:remove = "${libdir}/${BPN}/*" INSANE_SKIP:${PN} += "already-stripped" #INSANE_SKIP:${PN}-dev += "dev-elf" -INSANE_SKIP:${PN}-libllvm = "dev-so" #Avoid SSTATE_SCAN_COMMAND running sed over llvm-config. SSTATE_SCAN_FILES:remove = "*-config" @@ -363,15 +227,17 @@ SYSROOT_PREPROCESS_FUNCS:append:class-target = " clang_sysroot_preprocess" SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " clang_sysroot_preprocess" clang_sysroot_preprocess() { - install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/ - install -m 0755 ${S}/llvm/tools/llvm-config/llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/ - ln -sf llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config${PV} + install -d ${SYSROOT_DESTDIR}${bindir}/ + # clang and clang-tools binaries="diagtool clang-${MAJOR_VER} clang-format clang-offload-packager - clang-offload-bundler clang-scan-deps clang-repl - clang-refactor clang-check clang-extdef-mapping clang-apply-replacements - clang-reorder-fields clang-tidy clang-change-namespace clang-doc clang-include-fixer - find-all-symbols clang-move clang-query pp-trace modularize" + clang-offload-bundler clang-scan-deps clang-repl + clang-refactor clang-check clang-extdef-mapping" + + # clang-extra-tools + binaries="${binaries} clang-apply-replacements clang-reorder-fields + clang-tidy clang-change-namespace clang-doc clang-include-fixer + find-all-symbols clang-move clang-query pp-trace modularize" if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then binaries="${binaries} clangd" diff --git a/meta/recipes-devtools/clang/common.inc b/meta/recipes-devtools/clang/common.inc index d7f069d2533..a89831ce8f5 100644 --- a/meta/recipes-devtools/clang/common.inc +++ b/meta/recipes-devtools/clang/common.inc @@ -62,6 +62,8 @@ SRC_URI = "\ file://0039-Only-build-c-index-test-when-clang-tests-are-include.patch \ file://0001-Install-lldb-tblgen.patch \ file://0001-dont-expose-LLVM_HAVE_OPT_VIEWER_MODULES.patch \ + file://0001-clang-Support-building-native-tools-when-cross-compi.patch \ + file://clang-no-tblgen.patch \ " # Fallback to no-PIE if not set GCCPIE ??= "" From patchwork Tue Oct 7 10:42:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 71762 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id F3123CCD184 for ; Tue, 7 Oct 2025 10:43:02 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.15491.1759833775384702876 for ; Tue, 07 Oct 2025 03:42:55 -0700 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id EDC961424 for ; Tue, 7 Oct 2025 03:42:46 -0700 (PDT) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 897183F59E for ; Tue, 7 Oct 2025 03:42:54 -0700 (PDT) From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH 4/4] classes/toolchain/clang: depend on llvm-native for tools, not clang Date: Tue, 7 Oct 2025 11:42:47 +0100 Message-ID: <20251007104247.1530073-4-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251007104247.1530073-1-ross.burton@arm.com> References: <20251007104247.1530073-1-ross.burton@arm.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 07 Oct 2025 10:43:02 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/224522 The relevant tools (objdump, strip, etc) are part of llvm-native now, so trim dependencies and depend on that directly instead of clang-cross. Signed-off-by: Ross Burton --- meta/classes/toolchain/clang.bbclass | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta/classes/toolchain/clang.bbclass b/meta/classes/toolchain/clang.bbclass index f422a01988f..b4a1c180f6a 100644 --- a/meta/classes/toolchain/clang.bbclass +++ b/meta/classes/toolchain/clang.bbclass @@ -33,7 +33,7 @@ TUNE_CCARGS += "${@bb.utils.contains("DISTRO_FEATURES", "usrmerge", " --dyld-pre LDFLAGS:append:class-nativesdk:x86-64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-x86-64.so.2" LDFLAGS:append:class-nativesdk:aarch64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-aarch64.so.1" -# do_populate_sysroot needs STRIP -POPULATESYSROOTDEPS:append:class-target = " ${MLPREFIX}clang-cross-${TARGET_ARCH}:do_populate_sysroot" +# do_populate_sysroot needs STRIP, do_package_qa needs OBJDUMP +POPULATESYSROOTDEPS:append:class-target = " llvm-native:do_populate_sysroot" TCOVERRIDE = "toolchain-clang"