diff mbox series

[v2] llvm: enable LLVMgold.so build by adding binutils dependency

Message ID 20260115042452.39219-1-mark.yang@lge.com
State New
Headers show
Series [v2] llvm: enable LLVMgold.so build by adding binutils dependency | expand

Commit Message

mark.yang Jan. 15, 2026, 4:24 a.m. UTC
From: "mark.yang" <mark.yang@lge.com>

Currently, LLVMgold.so is not built because the binutils headers
are missing during the build process.

This allows LLVM to find the necessary headers and build the LLVMgold.so,
which is required for Link Time Optimization (LTO) support properly.

Signed-off-by: mark.yang <mark.yang@lge.com>
---
changes in v2:
- Add llvm-linker-tools package to include LLVMgold.so and libLTO.so
---
 meta/recipes-devtools/clang/llvm_git.bb | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Ross Burton Jan. 19, 2026, 6:12 p.m. UTC | #1
On 15 Jan 2026, at 04:24, mark.yang via lists.openembedded.org <mark.yang=lge.com@lists.openembedded.org> wrote:
> -DEPENDS = "llvm-tblgen-native libffi libxml2 zlib zstd"
> +DEPENDS = "llvm-tblgen-native libffi libxml2 zlib zstd binutils"

This recipe already has an ‘lto’ PACKAGECONFIG that pulls in a dependency on binutils, so you shouldn’t need this line if you’d enabled the LTO distro-feature (or if not, the packageconfig).

Can you verify what is actually needed to enable the library build?

Ross
mark.yang Jan. 19, 2026, 10:23 p.m. UTC | #2
Ross Burton, thank you for the review.

The build reproduction steps and the intention for this patch can be found in the v1 patch at https://lists.openembedded.org/g/openembedded-core/topic/117252728.

PACKAGECONFIG:remove:class-native = "lto thin-lto"
Due to the configuration, llvm-native cannot enable lto in PACKAGECONFIG in any way.

When attempting to use clang + lto, components that cannot use the lld linker (and instead use the bfd linker) require the LLVMgold.so plugin.
To achieve this, binutils and the -DLLVM_BINUTILS_INCDIR flag in CMake are required.
( https://github.com/llvm/llvm-project/blob/main/clang/docs/ThinLTO.rst#basic )

Anyway, llvm-native cannot have LTO enabled due to the `remove`.
-DLLVM_ENABLE_LTO=Full determines whether LLVM itself will be built with LTO applied.

However, even if LLVM is not built using LTO, I think the environment should still be configured so that other components using the LLVM/clang toolchain can use LTO.
diff mbox series

Patch

diff --git a/meta/recipes-devtools/clang/llvm_git.bb b/meta/recipes-devtools/clang/llvm_git.bb
index 96ea383731..108e884a6f 100644
--- a/meta/recipes-devtools/clang/llvm_git.bb
+++ b/meta/recipes-devtools/clang/llvm_git.bb
@@ -11,7 +11,7 @@  require common-source.inc
 
 LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=8a15a0759ef07f2682d2ba4b893c9afe"
 
-DEPENDS = "llvm-tblgen-native libffi libxml2 zlib zstd"
+DEPENDS = "llvm-tblgen-native libffi libxml2 zlib zstd binutils"
 
 inherit cmake pkgconfig lib_package multilib_header
 
@@ -50,6 +50,7 @@  EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=MinSizeRel \
                   -DLLVM_TOOL_YAML2OBJ_BUILD=OFF \
                   -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
                   -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
+                  -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \
                   -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
                  "
 
@@ -126,6 +127,10 @@  llvm_sysroot_preprocess() {
         install -m 0755 ${S}/llvm/tools/llvm-config/llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
 }
 
+PACKAGES =+ "llvm-linker-tools"
+
+FILES:llvm-linker-tools = "${libdir}/LLVMgold* ${libdir}/libLTO.so.*"
+
 FILES:${PN}-dev += "${libdir}/llvm-config"
 
 BBCLASSEXTEND = "native nativesdk"