On Thu, 2026-06-11 at 20:46 -0700, [email protected] wrote:
> From: Deepesh Varatharajan <[email protected]>
> 
> Replace PATH-based llvm-config discovery with explicit sysroot-native
> resolution and simplify the target llvm-config wrapper to act as a pure
> pass-through while preserving Yocto alternate path handling.
> 
> The previous implementation relied on:
> 
> * `which -a llvm-config | sed -n 2p`
>    which is unreliable in cross-build environments because it only
>    searches executables present in $PATH. Native sysroot tools
>    (e.g. recipe-sysroot-native llvm-config) are not guaranteed to be
>    exposed via PATH, so they may not be discovered at all.

We always configure PATH to contain the cross scripts and native
sysroot. Is there something which is reconfiguring PATH to skip the
native sysroot?

> * `echo $base_libdir | sed -n '/lib64/p'`
>    which depends on a BitBake variable that may be empty or unset
>    in certain build contexts, leading to incorrect libdir selection.
> 
> Update the wrapper to:
> 
> * Use an @LLVM_CONFIG_PATH@ placeholder that is replaced during the
>   build with the appropriate native llvm-config path.
> * Detect libdir using filesystem inspection rather than variable
>   parsing.
> * Preserve `YOCTO_ALTERNATE_EXE_PATH` and
>   `YOCTO_ALTERNATE_LIBDIR` handling.
> * Delegate all arguments directly to the native llvm-config.
> 
> Update rust and mesa recipes to replace the placeholder with the native
> llvm-config path during target and nativesdk builds.
> 
> Also remove the native llvm-config copy logic and lib/lib64 symlink
> workarounds, relying instead on explicit native tool resolution.
> 
> Signed-off-by: Deepesh Varatharajan <[email protected]>
> ---
>  ...unwind.pc.in-and-llvm-config-scripts.patch | 52 +++----------------
>  meta/recipes-devtools/rust/rust_1.96.0.bb     | 52 ++++++-------------
>  meta/recipes-graphics/mesa/mesa.inc           | 16 ++++++
>  3 files changed, 39 insertions(+), 81 deletions(-)
> 
> diff --git 
> a/meta/recipes-devtools/clang/clang/0026-llvm-Add-libunwind.pc.in-and-llvm-config-scripts.patch
>  
> b/meta/recipes-devtools/clang/clang/0026-llvm-Add-libunwind.pc.in-and-llvm-config-scripts.patch
> index eeb802732b..72ffdc6c1f 100644
> --- 
> a/meta/recipes-devtools/clang/clang/0026-llvm-Add-libunwind.pc.in-and-llvm-config-scripts.patch
> +++ 
> b/meta/recipes-devtools/clang/clang/0026-llvm-Add-libunwind.pc.in-and-llvm-config-scripts.patch
> @@ -8,6 +8,7 @@ These are added by OE project
>  Upstream-Status: Inappropriate [ OE-Specific ]
>  
>  Signed-off-by: Khem Raj <[email protected]>
> +Signed-off-by: Deepesh Varatharajan <[email protected]>
>  ---
>   libunwind/libunwind.pc.in          |  9 ++++++
>   llvm/tools/llvm-config/llvm-config | 52 ++++++++++++++++++++++++++++++
> @@ -35,56 +36,19 @@ new file mode 100644
>  index 000000000000..6a0dd54b8eab
>  --- /dev/null
>  +++ b/llvm/tools/llvm-config/llvm-config
> -@@ -0,0 +1,52 @@
> +@@ -0,0 +1,15 @@
>  +#!/bin/bash
>  +#
> -+# Wrapper script for llvm-config. Supplies the right environment variables
> -+# for the target and delegates to the native llvm-config for anything else. 
> This
> -+# is needed because arguments like --ldflags, --cxxflags, etc. are set by 
> the
> -+# native compile rather than the target compile.
> ++# The llvm-config wrapper will act as a pure pass-through to the native 
> llvm-config
> ++# while preserving Yocto-specific environment variables used for alternate 
> executable
> ++# and library path resolution.
>  +#
>  +SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
> -+NEXT_LLVM_CONFIG="$(which -a llvm-config | sed -n 2p)"
> ++NEXT_LLVM_CONFIG="@LLVM_CONFIG_PATH@"

As I understand it, this is always being configured to point at the
llvm-config in the native sysroot?

I think this script is only ever installed into STAGING_BINDIR_CROSS?

If that is the case, could we just set this to a relative path to
SCRIPT_DIR, which would then always point at the right places without
needing to be adjusted each time?

>  +export YOCTO_ALTERNATE_EXE_PATH="${YOCTO_ALTERNATE_EXE_PATH:="$(readlink -f 
> "$SCRIPT_DIR/../llvm-config")"}"
> -+if [ -n "$( echo $base_libdir | sed -n '/lib64/p')" ]; then
> ++if [ -d "$(readlink -f "$SCRIPT_DIR/../../lib64")" ]; then
>  +    export YOCTO_ALTERNATE_LIBDIR="${YOCTO_ALTERNATE_LIBDIR:="/lib64"}"
>  +else
>  +    export YOCTO_ALTERNATE_LIBDIR="${YOCTO_ALTERNATE_LIBDIR:="/lib"}"
>  +fi
> -+if [[ $# == 0 ]]; then
> -+  exec "$NEXT_LLVM_CONFIG"
> -+fi
> -+
> -+remain=""
> -+output=""
> -+for arg in "$@"; do
> -+  case "$arg" in
> -+    --cppflags)
> -+      output="${output} ${CPPFLAGS}"
> -+      ;;
> -+    --cflags)
> -+      output="${output} ${CFLAGS}"
> -+      ;;

Can you remind me, how does the native llvm-config provide the target
cflags? Is that triggered by setting the YOCTO_ALTERNATE_LIBDIR above?

Cheers,

Richard
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#238594): 
https://lists.openembedded.org/g/openembedded-core/message/238594
Mute This Topic: https://lists.openembedded.org/mt/119769053/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to