From patchwork Thu Jul 31 19:12:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 67833 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 BE608C87FCC for ; Thu, 31 Jul 2025 19:12:22 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.70538.1753989140294417368 for ; Thu, 31 Jul 2025 12:12:20 -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 7FB091A25 for ; Thu, 31 Jul 2025 12:12:11 -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 0E0423F66E for ; Thu, 31 Jul 2025 12:12:18 -0700 (PDT) From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH v3] clang: split lld into a separate lld recipe Date: Thu, 31 Jul 2025 20:12:13 +0100 Message-ID: <20250731191213.1382928-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 ; Thu, 31 Jul 2025 19:12:22 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/221204 The lld linker is a standalone project under the LLVM umbrella that just depends on libLLVM and nothing else, such as clang. To reduce the build time of clang if lld is not being used, split it out into a separate recipe. To ensure that lld is present if needed, the clang-cross recipe will depend on lld-native if ld-is-lld is enable. Signed-off-by: Ross Burton --- meta/conf/distro/include/maintainers.inc | 1 + .../clang/clang-cross-canadian_git.bb | 2 +- .../recipes-devtools/clang/clang-cross_git.bb | 6 +++-- .../clang/clang-crosssdk_git.bb | 3 ++- meta/recipes-devtools/clang/clang_git.bb | 12 ++++----- meta/recipes-devtools/clang/lld_git.bb | 26 +++++++++++++++++++ 6 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 meta/recipes-devtools/clang/lld_git.bb diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index ed1bc18ba39..96d5a0819c8 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc @@ -480,6 +480,7 @@ RECIPE_MAINTAINER:pn-linux-yocto = "Bruce Ashfield " RECIPE_MAINTAINER:pn-linux-yocto-dev = "Bruce Ashfield " RECIPE_MAINTAINER:pn-linux-yocto-rt = "Bruce Ashfield " RECIPE_MAINTAINER:pn-linux-yocto-tiny = "Bruce Ashfield " +RECIPE_MAINTAINER:pn-lld = "Khem Raj " RECIPE_MAINTAINER:pn-lldb = "Khem Raj " RECIPE_MAINTAINER:pn-llvm-project-source-20.1.8 = "Khem Raj " RECIPE_MAINTAINER:pn-llvm-tblgen-native = "Khem Raj " diff --git a/meta/recipes-devtools/clang/clang-cross-canadian_git.bb b/meta/recipes-devtools/clang/clang-cross-canadian_git.bb index c9668615780..18bd6ecfded 100644 --- a/meta/recipes-devtools/clang/clang-cross-canadian_git.bb +++ b/meta/recipes-devtools/clang/clang-cross-canadian_git.bb @@ -11,7 +11,7 @@ PN = "clang-cross-canadian-${TRANSLATED_TARGET_ARCH}" inherit cross-canadian -DEPENDS = "nativesdk-clang binutils-cross-canadian-${TRANSLATED_TARGET_ARCH} virtual/nativesdk-cross-binutils virtual/nativesdk-libc" +DEPENDS = "nativesdk-clang binutils-cross-canadian-${TRANSLATED_TARGET_ARCH} virtual/nativesdk-cross-binutils virtual/nativesdk-libc ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'nativesdk-lld', '', d)}" do_install() { install -d ${D}${bindir} diff --git a/meta/recipes-devtools/clang/clang-cross_git.bb b/meta/recipes-devtools/clang/clang-cross_git.bb index bd72ee4e6d7..33b01e42349 100644 --- a/meta/recipes-devtools/clang/clang-cross_git.bb +++ b/meta/recipes-devtools/clang/clang-cross_git.bb @@ -11,7 +11,7 @@ PN = "clang-cross-${TARGET_ARCH}" inherit cross -DEPENDS = "clang-native virtual/cross-binutils" +DEPENDS = "clang-native virtual/cross-binutils ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'lld-native', '', d)}" do_install() { install -d ${D}${bindir} @@ -19,6 +19,8 @@ do_install() { llvm-nm llvm-ar llvm-as llvm-ranlib llvm-strip llvm-objcopy llvm-objdump llvm-readelf \ llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov do - ln -sf ../$tool ${D}${bindir}/${TARGET_PREFIX}$tool + if [ -x ${STAGING_BINDIR_NATIVE}/$tool ]; then + ln -sf ../$tool ${D}${bindir}/${TARGET_PREFIX}$tool + fi done } diff --git a/meta/recipes-devtools/clang/clang-crosssdk_git.bb b/meta/recipes-devtools/clang/clang-crosssdk_git.bb index 320579d8f12..9b527975a93 100644 --- a/meta/recipes-devtools/clang/clang-crosssdk_git.bb +++ b/meta/recipes-devtools/clang/clang-crosssdk_git.bb @@ -11,7 +11,8 @@ PN = "clang-crosssdk-${SDK_SYS}" inherit crosssdk -DEPENDS = "clang-native nativesdk-clang-glue virtual/nativesdk-cross-binutils virtual/nativesdk-libc" +DEPENDS = "clang-native nativesdk-clang-glue virtual/nativesdk-cross-binutils virtual/nativesdk-libc \ + ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'lld-native', '', d)}" do_install() { install -d ${D}${bindir} diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb index df091d3a554..3b803ead835 100644 --- a/meta/recipes-devtools/clang/clang_git.bb +++ b/meta/recipes-devtools/clang/clang_git.bb @@ -57,7 +57,7 @@ PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=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[lld] = "-DCLANG_DEFAULT_LINKER=lld,,," PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm," PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF,," @@ -89,7 +89,7 @@ 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;lld" +LLVM_PROJECTS ?= "clang;clang-tools-extra" # linux hosts (.so) on Windows .pyd SOLIBSDEV:mingw32 = ".pyd" @@ -141,8 +141,8 @@ DEPENDS = "binutils zlib zstd libffi libxml2 libxml2-native swig-native llvm-tbl DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_SYS} virtual/nativesdk-cross-binutils" DEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}" -RRECOMMENDS:${PN} = "binutils" -RRECOMMENDS:${PN}:append:class-target = "${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', ' libcxx-dev', '', 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() { @@ -370,10 +370,8 @@ 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} - # LLDTargets.cmake references the lld executable(!) that some modules/plugins link to - install -d ${SYSROOT_DESTDIR}${bindir} - binaries="lld diagtool clang-${MAJOR_VER} clang-format clang-offload-packager + 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 diff --git a/meta/recipes-devtools/clang/lld_git.bb b/meta/recipes-devtools/clang/lld_git.bb new file mode 100644 index 00000000000..02006e0edc9 --- /dev/null +++ b/meta/recipes-devtools/clang/lld_git.bb @@ -0,0 +1,26 @@ +SUMMARY = "LLD - the LLVM Linker" +DESCRIPTION = "LLD is a linker from the LLVM project that is a drop-in replacement for system linkers and runs much faster than them." +HOMEPAGE = "https://lld.llvm.org" +SECTION = "devel" + +require common-clang.inc +require common-source.inc + +LIC_FILES_CHKSUM = "file://lld/LICENSE.TXT;md5=ae7dc7c027b1fa89b5b013d391d3ee2b" + +inherit cmake pkgconfig + +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 \ + -DLLVM_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/llvm-tblgen" + +BBCLASSEXTEND = "native nativesdk"