diff options
| author | Alexander Kanavin <alex.kanavin@gmail.com> | 2022-11-14 20:00:56 +0100 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-12-01 19:35:11 +0000 |
| commit | 8f41af0ee94e87b673aa75ee2ecb7cf5a43b0d3d (patch) | |
| tree | 1a8564bad404eed7bd83fed77d555290ad457102 | |
| parent | bdfff3b14ecc29da760220e5c57aed5627b283b1 (diff) | |
| download | poky-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-config | 9 | ||||
| -rw-r--r-- | 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 | |||
| 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 | ||
| 55 | PLATFORMS ??= "${@bb.utils.filter('PACKAGECONFIG', 'x11 wayland', d)}" | 55 | PLATFORMS ??= "${@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. | ||
| 60 | PATH:prepend = "${STAGING_BINDIR_CROSS}:${STAGING_BINDIR}:" | ||
| 61 | MESA_LLVM_RELEASE ?= "${LLVMVERSION}" | 57 | MESA_LLVM_RELEASE ?= "${LLVMVERSION}" |
| 62 | do_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 |
