summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Kanavin <alex.kanavin@gmail.com>2022-11-14 20:00:56 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-12-01 19:35:11 +0000
commit8f41af0ee94e87b673aa75ee2ecb7cf5a43b0d3d (patch)
tree1a8564bad404eed7bd83fed77d555290ad457102
parentbdfff3b14ecc29da760220e5c57aed5627b283b1 (diff)
downloadpoky-8f41af0ee94e87b673aa75ee2ecb7cf5a43b0d3d.tar.gz
mesa: do not rely on native llvm-config in target sysroot
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. Upstream tickets: https://github.com/llvm/llvm-project/issues/58984 https://github.com/mesonbuild/meson/issues/11043 (From OE-Core rev: d2860e67a37623b17fc9c6e1192f06a63b7d52ff) Signed-off-by: Alexander Kanavin <alex@linutronix.de> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> (cherry picked from commit 056431883e94296b767a479d029b914392e4fd7c) Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/llvm/llvm/llvm-config9
-rw-r--r--meta/recipes-graphics/mesa/mesa.inc10
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
29 --ldflags) 29 --ldflags)
30 output="${output} ${LDFLAGS}" 30 output="${output} ${LDFLAGS}"
31 ;; 31 ;;
32 --shared-mode)
33 output="${output} shared"
34 ;;
35 --libs)
36 output="${output} -lLLVM"
37 ;;
38 --link-shared)
39 break
40 ;;
32 *) 41 *)
33 remain="${remain} ${arg}" 42 remain="${remain} ${arg}"
34 ;; 43 ;;
diff --git a/meta/recipes-graphics/mesa/mesa.inc b/meta/recipes-graphics/mesa/mesa.inc
index 3754bb14de..f9007f3187 100644
--- a/meta/recipes-graphics/mesa/mesa.inc
+++ b/meta/recipes-graphics/mesa/mesa.inc
@@ -54,17 +54,7 @@ ANY_OF_DISTRO_FEATURES:class-target = "opengl vulkan"
54 54
55PLATFORMS ??= "${@bb.utils.filter('PACKAGECONFIG', 'x11 wayland', d)}" 55PLATFORMS ??= "${@bb.utils.filter('PACKAGECONFIG', 'x11 wayland', d)}"
56 56
57# By placing llvm-config in the target sysroot bindir, it will then map values
58# to the target libdir magically. We can safely add to path as there are no other binaries
59# there.
60PATH:prepend = "${STAGING_BINDIR_CROSS}:${STAGING_BINDIR}:"
61MESA_LLVM_RELEASE ?= "${LLVMVERSION}" 57MESA_LLVM_RELEASE ?= "${LLVMVERSION}"
62do_configure:prepend () {
63 if [ -e ${STAGING_BINDIR_NATIVE}/llvm-config${MESA_LLVM_RELEASE} ]; then
64 cp ${STAGING_BINDIR_NATIVE}/llvm-config${MESA_LLVM_RELEASE} ${STAGING_BINDIR}
65 cp ${STAGING_BINDIR_NATIVE}/llvm-config ${STAGING_BINDIR}
66 fi
67}
68 58
69# set the MESA_BUILD_TYPE to either 'release' (default) or 'debug' 59# set the MESA_BUILD_TYPE to either 'release' (default) or 'debug'
70# by default the upstream mesa sources build a debug release 60# by default the upstream mesa sources build a debug release