On Mon, 2022-11-14 at 14:35 +0100, Alexander Kanavin wrote:
> Sadly the magic is not perfect: llvm-config contains a hardcoded
> value for the libdir from the native configuration, and things will
> break if the target build installs libraries somewhere else (e.g. lib64).
> 
> llvm-config in target bindir also needs a rpath adjustment,
> otherwise it simply won't even run when e.g. building for arm on x86.
> 
> To avoid patching llvm-source let's simply add more cases to the
> llvm-config wrapper script, so that falling through to llvm-config binary
> is avoided. Fortunately those cases are all static in what they return,
> even though llvm-config binary does poke around the file tree to arrive
> at them (which is where breakage happens if native and target don't match
> exactly wrt libdir).
> 
> I verified that this works by building mesa with llvm enabled for
> qemuarm64 and with baselib set to 'lib64' - so that both the target
> architecture and target libdir differ from native ones.
> 
> Signed-off-by: Alexander Kanavin <[email protected]>
> ---
>  meta/recipes-devtools/llvm/llvm/llvm-config |  9 +++++++++
>  meta/recipes-graphics/mesa/mesa.inc         | 10 ----------
>  2 files changed, 9 insertions(+), 10 deletions(-)
> 
> diff --git a/meta/recipes-devtools/llvm/llvm/llvm-config 
> b/meta/recipes-devtools/llvm/llvm/llvm-config
> index a45f38c650..5e4ded2da5 100644
> --- a/meta/recipes-devtools/llvm/llvm/llvm-config
> +++ b/meta/recipes-devtools/llvm/llvm/llvm-config
> @@ -29,6 +29,15 @@ for arg in "$@"; do
>      --ldflags)
>        output="${output} ${LDFLAGS}"
>        ;;
> +    --shared-mode)
> +      output="${output} shared"
> +      ;;
> +    --libs)
> +      output="${output} -lLLVM"
> +      ;;
> +    --link-shared)
> +      break
> +      ;;
>      *)
>        remain="${remain} ${arg}"
>        ;;
> diff --git a/meta/recipes-graphics/mesa/mesa.inc 
> b/meta/recipes-graphics/mesa/mesa.inc
> index 7dbca5876a..5839b6d6a7 100644
> --- a/meta/recipes-graphics/mesa/mesa.inc
> +++ b/meta/recipes-graphics/mesa/mesa.inc
> @@ -55,17 +55,7 @@ ANY_OF_DISTRO_FEATURES:class-target = "opengl vulkan"
>  
>  PLATFORMS ??= "${@bb.utils.filter('PACKAGECONFIG', 'x11 wayland', d)}"
>  
> -# By placing llvm-config in the target sysroot bindir, it will then map 
> values
> -# to the target libdir magically. We can safely add to path as there are no 
> other binaries
> -# there.
> -PATH:prepend = "${STAGING_BINDIR_CROSS}:${STAGING_BINDIR}:"
>  MESA_LLVM_RELEASE ?= "${LLVMVERSION}"
> -do_configure:prepend () {
> -     if [ -e ${STAGING_BINDIR_NATIVE}/llvm-config${MESA_LLVM_RELEASE} ]; then
> -             cp ${STAGING_BINDIR_NATIVE}/llvm-config${MESA_LLVM_RELEASE} 
> ${STAGING_BINDIR}
> -             cp ${STAGING_BINDIR_NATIVE}/llvm-config ${STAGING_BINDIR}
> -     fi
> -}
>  
>  # set the MESA_BUILD_TYPE to either 'release' (default) or 'debug'
>  # by default the upstream mesa sources build a debug release

The trouble is how many people are ever going to check whether the
output of llvm-config changes? We really need to work with upstream to
make this util cross safe...

Cheers,

Richard

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

Reply via email to