* [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG
@ 2025-09-15 19:11 Ross Burton
2025-09-15 19:11 ` [PATCH v3 2/8] clang: disable all test targets Ross Burton
` (7 more replies)
0 siblings, 8 replies; 11+ messages in thread
From: Ross Burton @ 2025-09-15 19:11 UTC (permalink / raw)
To: openembedded-core
Instead of patching the python module detection, we can use the hidden
option LLVM_TOOL_OPT_VIEWER_BUILD.
Signed-off-by: Ross Burton <ross.burton@arm.com>
---
...-users-to-set-LLVM_HAVE_OPT_VIEWER_M.patch | 70 -------------------
meta/recipes-devtools/clang/clang_git.bb | 2 +-
meta/recipes-devtools/clang/common.inc | 1 -
3 files changed, 1 insertion(+), 72 deletions(-)
delete mode 100644 meta/recipes-devtools/clang/clang/0040-opt-viewer-Allow-users-to-set-LLVM_HAVE_OPT_VIEWER_M.patch
diff --git a/meta/recipes-devtools/clang/clang/0040-opt-viewer-Allow-users-to-set-LLVM_HAVE_OPT_VIEWER_M.patch b/meta/recipes-devtools/clang/clang/0040-opt-viewer-Allow-users-to-set-LLVM_HAVE_OPT_VIEWER_M.patch
deleted file mode 100644
index 4e93756af92..00000000000
--- a/meta/recipes-devtools/clang/clang/0040-opt-viewer-Allow-users-to-set-LLVM_HAVE_OPT_VIEWER_M.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From c2b576a49ed1b83def75578f7d2b2e8c3c54e60f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 2 Aug 2025 17:58:20 -0700
-Subject: [PATCH] [opt-viewer] Allow users to set LLVM_HAVE_OPT_VIEWER_MODULES
- manually from the CMake
-
-Check right before setting LLVM_HAVE_OPT_VIEWER_MODULES
-so that if the user specifies the variable on the commandline
-it takes precedence. If not, fall back to the old logic
-
-Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/151845]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- llvm/CMakeLists.txt | 2 ++
- llvm/cmake/config-ix.cmake | 13 ++++++++++---
- llvm/include/llvm/Config/config.h.cmake | 3 +++
- 3 files changed, 15 insertions(+), 3 deletions(-)
-
-diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
-index cb945b578e46..e4ed9eca6014 100644
---- a/llvm/CMakeLists.txt
-+++ b/llvm/CMakeLists.txt
-@@ -7,6 +7,8 @@ set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
- include(${LLVM_COMMON_CMAKE_UTILS}/Modules/CMakePolicy.cmake
- NO_POLICY_SCOPE)
-
-+option(LLVM_HAVE_OPT_VIEWER_MODULES "Enable opt-viewer modules support" ON)
-+
- # Builds with custom install names and installation rpath setups may not work
- # in the build tree. Allow these cases to use CMake's default build tree
- # behavior by setting `LLVM_NO_INSTALL_NAME_DIR_FOR_BUILD_TREE` to do this.
-diff --git a/llvm/cmake/config-ix.cmake b/llvm/cmake/config-ix.cmake
-index a8e4e5a63244..17af3dc1e93f 100644
---- a/llvm/cmake/config-ix.cmake
-+++ b/llvm/cmake/config-ix.cmake
-@@ -805,10 +805,17 @@ foreach(module ${PYTHON_MODULES})
- find_python_module(${module})
- endforeach()
-
--if(PY_PYGMENTS_FOUND AND PY_PYGMENTS_LEXERS_C_CPP_FOUND AND PY_YAML_FOUND)
-- set (LLVM_HAVE_OPT_VIEWER_MODULES 1)
-+if(NOT DEFINED LLVM_HAVE_OPT_VIEWER_MODULES)
-+ if(PY_PYGMENTS_FOUND AND PY_PYGMENTS_LEXERS_C_CPP_FOUND AND PY_YAML_FOUND)
-+ set (LLVM_HAVE_OPT_VIEWER_MODULES 1)
-+ else()
-+ set (LLVM_HAVE_OPT_VIEWER_MODULES 0)
-+ endif()
-+elseif(LLVM_HAVE_OPT_VIEWER_MODULES)
-+ # Use the user-provided value
-+ set(LLVM_HAVE_OPT_VIEWER_MODULES 1)
- else()
-- set (LLVM_HAVE_OPT_VIEWER_MODULES 0)
-+ set(LLVM_HAVE_OPT_VIEWER_MODULES 0)
- endif()
-
- function(llvm_get_host_prefixes_and_suffixes)
-diff --git a/llvm/include/llvm/Config/config.h.cmake b/llvm/include/llvm/Config/config.h.cmake
-index ce83de8e4cba..02cf6d2ec363 100644
---- a/llvm/include/llvm/Config/config.h.cmake
-+++ b/llvm/include/llvm/Config/config.h.cmake
-@@ -287,6 +287,9 @@
- /* Define to a function implementing strdup */
- #cmakedefine strdup ${strdup}
-
-+/* Define indicating opt-viewer modules */
-+#cmakedefine LLVM_HAVE_OPT_VIEWER_MODULES
-+
- /* Whether GlobalISel rule coverage is being collected */
- #cmakedefine01 LLVM_GISEL_COV_ENABLED
-
diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb
index 0009a95628d..f53ecbfe398 100644
--- a/meta/recipes-devtools/clang/clang_git.bb
+++ b/meta/recipes-devtools/clang/clang_git.bb
@@ -59,7 +59,7 @@ PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF,lib
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_HAVE_OPT_VIEWER_MODULES=ON,-DLLVM_HAVE_OPT_VIEWER_MODULES=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[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm,"
diff --git a/meta/recipes-devtools/clang/common.inc b/meta/recipes-devtools/clang/common.inc
index 625b0b064b7..e01eb2d2879 100644
--- a/meta/recipes-devtools/clang/common.inc
+++ b/meta/recipes-devtools/clang/common.inc
@@ -60,7 +60,6 @@ SRC_URI = "\
file://0037-Revert-libc-Remap-headers-in-the-debug-info-when-bui.patch \
file://0038-Prevent-revisiting-block-when-searching-for-noreturn.patch \
file://0039-Only-build-c-index-test-when-clang-tests-are-include.patch \
- file://0040-opt-viewer-Allow-users-to-set-LLVM_HAVE_OPT_VIEWER_M.patch \
"
# Fallback to no-PIE if not set
GCCPIE ??= ""
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v3 2/8] clang: disable all test targets 2025-09-15 19:11 [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Ross Burton @ 2025-09-15 19:11 ` Ross Burton 2025-09-15 19:11 ` [PATCH v3 3/8] clang: add option for llvm-exegesis Ross Burton ` (6 subsequent siblings) 7 siblings, 0 replies; 11+ messages in thread From: Ross Burton @ 2025-09-15 19:11 UTC (permalink / raw) To: openembedded-core We don't install the tests, or run them in the build tree, so tell cmake not to generate the targets at all. This removes internal dependencies which means we can turn off more components that we don't want. Signed-off-by: Ross Burton <ross.burton@arm.com> --- meta/recipes-devtools/clang/clang_git.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb index f53ecbfe398..09dda563bd3 100644 --- a/meta/recipes-devtools/clang/clang_git.bb +++ b/meta/recipes-devtools/clang/clang_git.bb @@ -120,6 +120,7 @@ EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \ -DLLVM_HEADERS_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-min-tblgen \ + -DLLVM_INCLUDE_TESTS=OFF \ " EXTRA_OECMAKE:append:class-nativesdk = "\ -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 3/8] clang: add option for llvm-exegesis 2025-09-15 19:11 [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Ross Burton 2025-09-15 19:11 ` [PATCH v3 2/8] clang: disable all test targets Ross Burton @ 2025-09-15 19:11 ` Ross Burton 2025-09-15 19:11 ` [PATCH v3 4/8] clang: remove obsolete install steps Ross Burton ` (5 subsequent siblings) 7 siblings, 0 replies; 11+ messages in thread From: Ross Burton @ 2025-09-15 19:11 UTC (permalink / raw) To: openembedded-core Quoting from the README: llvm-exegesis is a benchmarking tool that accepts or generates snippets and can measure characteristics of those snippets by executing it while keeping track of performance counters. Potentially useful but not essential. This reduces the size of llvm-bin by ~30MB and llvm-dbg by ~1100MB. Signed-off-by: Ross Burton <ross.burton@arm.com> --- meta/recipes-devtools/clang/clang_git.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb index 09dda563bd3..f5550e1b44b 100644 --- a/meta/recipes-devtools/clang/clang_git.bb +++ b/meta/recipes-devtools/clang/clang_git.bb @@ -54,6 +54,7 @@ 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,," -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 4/8] clang: remove obsolete install steps 2025-09-15 19:11 [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Ross Burton 2025-09-15 19:11 ` [PATCH v3 2/8] clang: disable all test targets Ross Burton 2025-09-15 19:11 ` [PATCH v3 3/8] clang: add option for llvm-exegesis Ross Burton @ 2025-09-15 19:11 ` Ross Burton 2025-09-15 19:11 ` [PATCH v3 5/8] llvm: add recipe for just the LLVM libraries Ross Burton ` (4 subsequent siblings) 7 siblings, 0 replies; 11+ messages in thread From: Ross Burton @ 2025-09-15 19:11 UTC (permalink / raw) To: openembedded-core clang-pseudo and clang-rename have both been removed from upstream, so don't try to install them anymore: llvm 40c45b6b4318 ("Remove clang-rename (#108988)") llvm ed8f78827895 ("Remove clang-pseudo (#109154)") Signed-off-by: Ross Burton <ross.burton@arm.com> --- meta/recipes-devtools/clang/clang_git.bb | 6 ------ 1 file changed, 6 deletions(-) diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb index f5550e1b44b..9a19cefc961 100644 --- a/meta/recipes-devtools/clang/clang_git.bb +++ b/meta/recipes-devtools/clang/clang_git.bb @@ -168,12 +168,6 @@ do_configure:append:class-nativesdk() { } do_install:append() { - for t in clang-pseudo clang-pseudo-gen clang-rename; do - if [ -e ${B}${BINPATHPREFIX}/bin/$t ]; then - install -Dm 0755 ${B}${BINPATHPREFIX}/bin/$t ${D}${bindir}/$t - fi - done - oe_multilib_header llvm/Config/llvm-config.h oe_multilib_header clang/Config/config.h } -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 5/8] llvm: add recipe for just the LLVM libraries 2025-09-15 19:11 [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Ross Burton ` (2 preceding siblings ...) 2025-09-15 19:11 ` [PATCH v3 4/8] clang: remove obsolete install steps Ross Burton @ 2025-09-15 19:11 ` Ross Burton 2025-09-15 19:11 ` [PATCH v3 6/8] clang: use llvm recipe Ross Burton ` (3 subsequent siblings) 7 siblings, 0 replies; 11+ messages in thread From: Ross Burton @ 2025-09-15 19:11 UTC (permalink / raw) To: openembedded-core 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 <ross.burton@arm.com> --- meta/conf/distro/include/maintainers.inc | 1 + meta/recipes-devtools/clang/llvm_git.bb | 132 +++++++++++++++++++++++ 2 files changed, 133 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 3ede77df4e0..5588dd4c492 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 <raj.khem@gmail.com>" RECIPE_MAINTAINER:pn-lldb = "Khem Raj <raj.khem@gmail.com>" RECIPE_MAINTAINER:pn-llvm-project-source-21.1.1 = "Khem Raj <raj.khem@gmail.com>" RECIPE_MAINTAINER:pn-llvm-tblgen-native = "Khem Raj <raj.khem@gmail.com>" +RECIPE_MAINTAINER:pn-llvm = "Khem Raj <raj.khem@gmail.com>" RECIPE_MAINTAINER:pn-logrotate = "Yi Zhao <yi.zhao@windriver.com>" RECIPE_MAINTAINER:pn-log4cplus = "Unassigned <unassigned@yoctoproject.org>" RECIPE_MAINTAINER:pn-lrzsz = "Anuj Mittal <anuj.mittal@intel.com>" diff --git a/meta/recipes-devtools/clang/llvm_git.bb b/meta/recipes-devtools/clang/llvm_git.bb new file mode 100644 index 00000000000..913fff48082 --- /dev/null +++ b/meta/recipes-devtools/clang/llvm_git.bb @@ -0,0 +1,132 @@ +# Copyright (C) 2017 Khem Raj <raj.khem@gmail.com> +# 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 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', '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_ASSERTIONS=OFF \ + -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \ + -DLLVM_ENABLE_PIC=ON \ + -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_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ + " + +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 \ + -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \ + " + +EXTRA_OECMAKE:append:class-nativesdk = "\ + -DLLVM_HOST_TRIPLE=${SDK_SYS} \ + -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \ + -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \ + " + +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" -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 6/8] clang: use llvm recipe 2025-09-15 19:11 [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Ross Burton ` (3 preceding siblings ...) 2025-09-15 19:11 ` [PATCH v3 5/8] llvm: add recipe for just the LLVM libraries Ross Burton @ 2025-09-15 19:11 ` Ross Burton 2025-09-15 19:11 ` [PATCH v3 7/8] clang: use EXTRA_OECMAKE += Ross Burton ` (2 subsequent siblings) 7 siblings, 0 replies; 11+ messages in thread From: Ross Burton @ 2025-09-15 19:11 UTC (permalink / raw) To: openembedded-core 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. Signed-off-by: Ross Burton <ross.burton@arm.com> --- meta/recipes-devtools/clang/clang_git.bb | 165 ++++------------------- 1 file changed, 24 insertions(+), 141 deletions(-) diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb index 9a19cefc961..9e977379325 100644 --- a/meta/recipes-devtools/clang/clang_git.bb +++ b/meta/recipes-devtools/clang/clang_git.bb @@ -19,7 +19,7 @@ require common-source.inc BPN = "clang" -CVE_PRODUCT += "llvm:clang" +CVE_PRODUCT = "llvm:clang" INHIBIT_DEFAULT_DEPS:class-native = "1" @@ -28,72 +28,31 @@ 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 extra-tools 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[extra-tools] = "-DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=${S}/clang-tools-extra" 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 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', '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,25 +61,18 @@ SOLIBSDEV:mingw32 = ".pyd" EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ -DLLVM_APPEND_VC_REV=OFF \ - -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \ + -DLLVM_BUILD_LLVM_DYLIB=ON \ + -DLLVM_LINK_LLVM_DYLIB=ON \ -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=Release \ -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_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \ - -DLLVM_HEADERS_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-min-tblgen \ + -DLLVM_CMAKE_DIR=${STAGING_LIBDIR}/cmake/llvm \ -DLLVM_INCLUDE_TESTS=OFF \ " @@ -132,58 +84,27 @@ EXTRA_OECMAKE:append:class-nativesdk = "\ -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \ " EXTRA_OECMAKE:append:class-target = "\ + -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \ + -DLLVM_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ -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} \ " -DEPENDS = "binutils zlib zstd libffi libxml2 libxml2-native llvm-tblgen-native" +DEPENDS = "llvm-tblgen-native llvm binutils zlib zstd libffi libxml2 libxml2-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)}" 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_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-release.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-release.cmake - if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then mkdir -p ${D}${nonarch_libdir} mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang @@ -194,44 +115,18 @@ endif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-release.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 + if ${@bb.utils.contains('PACKAGECONFIG', 'extra-tools', 'true', 'false', d)}; then + install -Dm 0755 ${B}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen fi - install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen - - 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 - install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen - install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen - for f in `find ${D}${bindir} -executable -type f -not -type l`; do - test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f - done - ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV} - ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV} - ln -sf llvm-config ${D}${bindir}/llvm-config${PV} - rm -rf ${D}${datadir}/llvm/cmake - rm -rf ${D}${datadir}/llvm #reproducibility if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then @@ -239,12 +134,7 @@ do_install:append:class-nativesdk () { 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" @@ -262,8 +152,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/*" @@ -326,12 +214,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.* \ " @@ -352,7 +234,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" @@ -366,15 +247,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}/ 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-refactor clang-check clang-extdef-mapping" + + if ${@bb.utils.contains('PACKAGECONFIG', 'extra-tools', 'true', 'false', d)}; then + 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" + fi if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then binaries="${binaries} clangd" -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 7/8] clang: use EXTRA_OECMAKE += 2025-09-15 19:11 [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Ross Burton ` (4 preceding siblings ...) 2025-09-15 19:11 ` [PATCH v3 6/8] clang: use llvm recipe Ross Burton @ 2025-09-15 19:11 ` Ross Burton 2025-09-15 19:11 ` [PATCH v3 8/8] clang: globally disable build-time RPATHs for reproducibility Ross Burton 2025-09-17 11:06 ` [OE-core] [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Mathieu Dubois-Briand 7 siblings, 0 replies; 11+ messages in thread From: Ross Burton @ 2025-09-15 19:11 UTC (permalink / raw) To: openembedded-core Don't assign EXTRA_OECMAKE so that the include files can set defaults. Signed-off-by: Ross Burton <ross.burton@arm.com> --- meta/recipes-devtools/clang/libclc_git.bb | 2 +- meta/recipes-devtools/clang/lld_git.bb | 6 +++--- meta/recipes-devtools/clang/lldb_git.bb | 18 +++++++++--------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/meta/recipes-devtools/clang/libclc_git.bb b/meta/recipes-devtools/clang/libclc_git.bb index e56cf2eb6c0..60909339e70 100644 --- a/meta/recipes-devtools/clang/libclc_git.bb +++ b/meta/recipes-devtools/clang/libclc_git.bb @@ -21,7 +21,7 @@ B_NATIVE = "${B}-native" # Semicolon-separated list of targets to build LIBCLC_TARGETS ?= "all" -EXTRA_OECMAKE = "-DLIBCLC_TARGETS_TO_BUILD=${LIBCLC_TARGETS}" +EXTRA_OECMAKE += "-DLIBCLC_TARGETS_TO_BUILD=${LIBCLC_TARGETS}" EXTRA_OECMAKE:append:class-target = " -DPREPARE_BUILTINS=${B_NATIVE}/prepare_builtins" EXTRA_OECMAKE:append:class-nativesdk = " -DPREPARE_BUILTINS=${B_NATIVE}/prepare_builtins" diff --git a/meta/recipes-devtools/clang/lld_git.bb b/meta/recipes-devtools/clang/lld_git.bb index 02006e0edc9..b0261ad2cb6 100644 --- a/meta/recipes-devtools/clang/lld_git.bb +++ b/meta/recipes-devtools/clang/lld_git.bb @@ -19,8 +19,8 @@ OECMAKE_SOURCEPATH = "${S}/lld" # # 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" +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" diff --git a/meta/recipes-devtools/clang/lldb_git.bb b/meta/recipes-devtools/clang/lldb_git.bb index eafc3cb3128..ecab8c09a75 100644 --- a/meta/recipes-devtools/clang/lldb_git.bb +++ b/meta/recipes-devtools/clang/lldb_git.bb @@ -16,15 +16,15 @@ DEPENDS = "llvm-tblgen-native clang" OECMAKE_SOURCEPATH = "${S}/lldb" -EXTRA_OECMAKE = "-DLLDB_INCLUDE_TESTS=OFF \ - -DLLDB_ENABLE_LUA=OFF \ - -DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \ - -DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON_PN} \ - -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \ - -DLLVM_DIR=${STAGING_LIBDIR}/cmake/llvm/ \ - -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ - -DLLDB_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/lldb-tblgen \ - -DLLDB_NO_INSTALL_DEFAULT_RPATH=ON \ +EXTRA_OECMAKE += "-DLLDB_INCLUDE_TESTS=OFF \ + -DLLDB_ENABLE_LUA=OFF \ + -DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \ + -DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON_PN} \ + -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \ + -DLLVM_DIR=${STAGING_LIBDIR}/cmake/llvm/ \ + -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ + -DLLDB_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/lldb-tblgen \ + -DLLDB_NO_INSTALL_DEFAULT_RPATH=ON \ " PACKAGECONFIG ??= "libedit libxml2 lzma" -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 8/8] clang: globally disable build-time RPATHs for reproducibility 2025-09-15 19:11 [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Ross Burton ` (5 preceding siblings ...) 2025-09-15 19:11 ` [PATCH v3 7/8] clang: use EXTRA_OECMAKE += Ross Burton @ 2025-09-15 19:11 ` Ross Burton 2025-09-17 11:06 ` [OE-core] [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Mathieu Dubois-Briand 7 siblings, 0 replies; 11+ messages in thread From: Ross Burton @ 2025-09-15 19:11 UTC (permalink / raw) To: openembedded-core 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 <ross.burton@arm.com> --- 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 bf3a63914a7..643721bad48 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_SKIP_BUILD_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" -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [OE-core] [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG 2025-09-15 19:11 [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Ross Burton ` (6 preceding siblings ...) 2025-09-15 19:11 ` [PATCH v3 8/8] clang: globally disable build-time RPATHs for reproducibility Ross Burton @ 2025-09-17 11:06 ` Mathieu Dubois-Briand 2025-09-17 14:27 ` Richard Purdie 7 siblings, 1 reply; 11+ messages in thread From: Mathieu Dubois-Briand @ 2025-09-17 11:06 UTC (permalink / raw) To: ross.burton, openembedded-core On Mon Sep 15, 2025 at 9:11 PM CEST, Ross Burton via lists.openembedded.org wrote: > Instead of patching the python module detection, we can use the hidden > option LLVM_TOOL_OPT_VIEWER_BUILD. > > Signed-off-by: Ross Burton <ross.burton@arm.com> > --- Hi Ross, Sorry, but it looks like one of these patches is breaking tc tests: ERROR: clang-native-21.1.1-r0 do_compile: Execution of '/srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/temp/run.do_compile.1114131' failed with exit code 1 ... /clang-tblgen.dir/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangCommentHTMLTagsEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangDataCollectorsEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangDiagnosticsEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangOpcodesEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangOpenCLBuiltinEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangOptionDocEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangSACheckersEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangSyntaxEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangTypeNodesEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/MveEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/NeonEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/RISCVVEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/SveEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/TableGen.cpp.o -o bin/clang-tblgen /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMSupport.a /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMTableGen.a /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMSupport.a -lrt -ldl -lm -lz -lzstd /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMDemangle.a && : | /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/hosttools/ld: /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMTableGen.a(TGLexer.cpp.o): in function `llvm::TGLexer::LexNumber() [clone .localalias]': | TGLexer.cpp:(.text._ZN4llvm7TGLexer9LexNumberEv+0xea): undefined reference to `__isoc23_strtoll' | /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/hosttools/ld: TGLexer.cpp:(.text._ZN4llvm7TGLexer9LexNumberEv+0xf1): undefined reference to `__isoc23_strtoull' https://autobuilder.yoctoproject.org/valkyrie/#/builders/5/builds/2313 https://autobuilder.yoctoproject.org/valkyrie/#/builders/28/builds/2308 On the good news, reproducibility issues seem to be gone. Thanks, Mathieu -- Mathieu Dubois-Briand, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [OE-core] [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG 2025-09-17 11:06 ` [OE-core] [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Mathieu Dubois-Briand @ 2025-09-17 14:27 ` Richard Purdie 2025-09-17 16:24 ` Khem Raj 0 siblings, 1 reply; 11+ messages in thread From: Richard Purdie @ 2025-09-17 14:27 UTC (permalink / raw) To: mathieu.dubois-briand, ross.burton, openembedded-core On Wed, 2025-09-17 at 13:06 +0200, Mathieu Dubois-Briand via lists.openembedded.org wrote: > On Mon Sep 15, 2025 at 9:11 PM CEST, Ross Burton via lists.openembedded.org wrote: > > Instead of patching the python module detection, we can use the hidden > > option LLVM_TOOL_OPT_VIEWER_BUILD. > > > > Signed-off-by: Ross Burton <ross.burton@arm.com> > > --- > > Hi Ross, > > Sorry, but it looks like one of these patches is breaking tc tests: > > ERROR: clang-native-21.1.1-r0 do_compile: Execution of '/srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/temp/run.do_compile.1114131' failed with exit code 1 > ... > /clang-tblgen.dir/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangCommentHTMLTagsEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangDataCollectorsEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangDiagnosticsEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangOpcodesEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangOpenCLBuiltinEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangOptionDocEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangSACheckersEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangSyntaxEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangTypeNodesEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/MveEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/NeonEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/RISCVVEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/SveEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/TableGen.cpp.o -o bin/clang-tblgen /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMSupport.a /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMTableGen.a /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMSupport.a -lrt -ldl -lm -lz -lzstd /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMDemangle.a && : > > /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/hosttools/ld: /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMTableGen.a(TGLexer.cpp.o): in function `llvm::TGLexer::LexNumber() [clone .localalias]': > > TGLexer.cpp:(.text._ZN4llvm7TGLexer9LexNumberEv+0xea): undefined reference to `__isoc23_strtoll' > > /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/hosttools/ld: TGLexer.cpp:(.text._ZN4llvm7TGLexer9LexNumberEv+0xf1): undefined reference to `__isoc23_strtoull' > > https://autobuilder.yoctoproject.org/valkyrie/#/builders/5/builds/2313 > https://autobuilder.yoctoproject.org/valkyrie/#/builders/28/builds/2308 > > On the good news, reproducibility issues seem to be gone. This is a horrible one. For a bit of background and the fun we had in pseudo with this: https://git.yoctoproject.org/pseudo/commit/?id=865ca5b647bba47ca5c4d3e65597d9a25d4261bf Cheers, Richard ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [OE-core] [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG 2025-09-17 14:27 ` Richard Purdie @ 2025-09-17 16:24 ` Khem Raj 0 siblings, 0 replies; 11+ messages in thread From: Khem Raj @ 2025-09-17 16:24 UTC (permalink / raw) To: richard.purdie; +Cc: mathieu.dubois-briand, ross.burton, openembedded-core On Wed, Sep 17, 2025 at 7:27 AM Richard Purdie via lists.openembedded.org <richard.purdie=linuxfoundation.org@lists.openembedded.org> wrote: > > On Wed, 2025-09-17 at 13:06 +0200, Mathieu Dubois-Briand via lists.openembedded.org wrote: > > On Mon Sep 15, 2025 at 9:11 PM CEST, Ross Burton via lists.openembedded.org wrote: > > > Instead of patching the python module detection, we can use the hidden > > > option LLVM_TOOL_OPT_VIEWER_BUILD. > > > > > > Signed-off-by: Ross Burton <ross.burton@arm.com> > > > --- > > > > Hi Ross, > > > > Sorry, but it looks like one of these patches is breaking tc tests: > > > > ERROR: clang-native-21.1.1-r0 do_compile: Execution of '/srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/temp/run.do_compile.1114131' failed with exit code 1 > > ... > > /clang-tblgen.dir/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangCommentHTMLTagsEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangDataCollectorsEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangDiagnosticsEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangOpcodesEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangOpenCLBuiltinEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangOptionDocEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangSACheckersEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangSyntaxEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangTypeNodesEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/MveEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/NeonEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/RISCVVEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/SveEmitter.cpp.o utils/TableGen/CMakeFiles/clang-tblgen.dir/TableGen.cpp.o -o bin/clang-tblgen /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMSupport.a /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMTableGen.a /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMSupport.a -lrt -ldl -lm -lz -lzstd /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMDemangle.a && : > > > /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/hosttools/ld: /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/work/x86_64-linux/clang-native/21.1.1/recipe-sysroot-native/usr/lib/libLLVMTableGen.a(TGLexer.cpp.o): in function `llvm::TGLexer::LexNumber() [clone .localalias]': > > > TGLexer.cpp:(.text._ZN4llvm7TGLexer9LexNumberEv+0xea): undefined reference to `__isoc23_strtoll' > > > /srv/pokybuild/yocto-worker/qemuarm64-tc/build/build-st-3689262/tmp/hosttools/ld: TGLexer.cpp:(.text._ZN4llvm7TGLexer9LexNumberEv+0xf1): undefined reference to `__isoc23_strtoull' > > I wonder if we have a uninative out of sync here, the build is on debian12 and it has glibc < 2.38 so __iso23 symbols won't be there. > > https://autobuilder.yoctoproject.org/valkyrie/#/builders/5/builds/2313 > > https://autobuilder.yoctoproject.org/valkyrie/#/builders/28/builds/2308 > > > > On the good news, reproducibility issues seem to be gone. > > This is a horrible one. > > For a bit of background and the fun we had in pseudo with this: > > https://git.yoctoproject.org/pseudo/commit/?id=865ca5b647bba47ca5c4d3e65597d9a25d4261bf > > Cheers, > > Richard > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#223608): https://lists.openembedded.org/g/openembedded-core/message/223608 > Mute This Topic: https://lists.openembedded.org/mt/115260480/1997914 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- > ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2025-09-17 16:24 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-09-15 19:11 [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Ross Burton 2025-09-15 19:11 ` [PATCH v3 2/8] clang: disable all test targets Ross Burton 2025-09-15 19:11 ` [PATCH v3 3/8] clang: add option for llvm-exegesis Ross Burton 2025-09-15 19:11 ` [PATCH v3 4/8] clang: remove obsolete install steps Ross Burton 2025-09-15 19:11 ` [PATCH v3 5/8] llvm: add recipe for just the LLVM libraries Ross Burton 2025-09-15 19:11 ` [PATCH v3 6/8] clang: use llvm recipe Ross Burton 2025-09-15 19:11 ` [PATCH v3 7/8] clang: use EXTRA_OECMAKE += Ross Burton 2025-09-15 19:11 ` [PATCH v3 8/8] clang: globally disable build-time RPATHs for reproducibility Ross Burton 2025-09-17 11:06 ` [OE-core] [PATCH v3 1/8] clang: improve opt-viewer PACKAGECONFIG Mathieu Dubois-Briand 2025-09-17 14:27 ` Richard Purdie 2025-09-17 16:24 ` Khem Raj
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox