Stefan Dirsch
6bebdfbdba
- U_configure.ac-rework-llvm-libs-handling-for-3.9.patch * llvm-config 3.9 and higher works properly, use its values instead of guessing. Fixes build against llvm built as single shared library. OBS-URL: https://build.opensuse.org/request/show/534468 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=654
108 lines
5.2 KiB
Diff
108 lines
5.2 KiB
Diff
Git-commit: 13a53c4f5cdd664fd155c9e78fb46a4387af006c
|
|
Patch-Mainline: Upstream
|
|
Author: Emil Velikov <emil.velikov@collabora.com>
|
|
Subject: configure.ac: rework llvm libs handling for 3.9+
|
|
Signed-off-by: Michal Srb <msrb@suse.com>
|
|
|
|
Earlier versions need different quirks, but as of LLVM 3.9 llvm-config
|
|
provides --link-shared/link-static toggles.
|
|
|
|
The output of which seems to be reliable - looking at LLVM 3.9, 4.0 and
|
|
5.0.
|
|
|
|
Note that there are earlier code will be used for pre LLVM 3.9 and is
|
|
unchanged.
|
|
|
|
This effectively fixes LLVM static linking, while providing a clearer
|
|
and more robust solution for future versions.
|
|
|
|
Mildly interesting side notes:
|
|
|
|
- build-mode (introduced with 3.8) was buggy with 3.8
|
|
It shows "static" when build with -DLLVM_LINK_LLVM_DYLIB=ON, yet it was
|
|
consistent with --libs. The latter shows the static libraries.
|
|
|
|
- libnames and libfiles are broken with LVM 3.9
|
|
The library prefix and extension is printed twice liblibLLVM-3.9.so.so
|
|
|
|
v2: Invoke llvm-config twice, instead of using sed, to combine the two
|
|
lines into one (Tobias)
|
|
|
|
Cc: mesa-stable@lists.freedesktop.org
|
|
Cc: Dieter Nützel <Dieter@nuetzel-hh.de>
|
|
Cc: Michel Dänzer <michel.daenzer@amd.com>
|
|
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
|
|
Reviewed-by: Tobias Droste <tdroste@gmx.de>
|
|
---
|
|
configure.ac | 30 ++++++++++++++++++++----------
|
|
1 file changed, 20 insertions(+), 10 deletions(-)
|
|
|
|
Index: mesa-17.2.2/configure.ac
|
|
===================================================================
|
|
--- mesa-17.2.2.orig/configure.ac
|
|
+++ mesa-17.2.2/configure.ac
|
|
@@ -2684,44 +2684,28 @@ if test "x$enable_llvm" = xyes; then
|
|
if ! $LLVM_CONFIG --libs ${LLVM_COMPONENTS} >/dev/null; then
|
|
AC_MSG_ERROR([Calling ${LLVM_CONFIG} failed])
|
|
fi
|
|
- LLVM_LIBS="`$LLVM_CONFIG --libs ${LLVM_COMPONENTS}`"
|
|
-
|
|
- dnl llvm-config may not give the right answer when llvm is a built as a
|
|
- dnl single shared library, so we must work the library name out for
|
|
- dnl ourselves.
|
|
- dnl (See https://llvm.org/bugs/show_bug.cgi?id=6823)
|
|
- if test "x$enable_llvm_shared_libs" = xyes; then
|
|
- dnl We can't use $LLVM_VERSION because it has 'svn' stripped out,
|
|
- LLVM_SO_NAME=LLVM-`$LLVM_CONFIG --version`
|
|
- AS_IF([test -f "$LLVM_LIBDIR/lib$LLVM_SO_NAME.$IMP_LIB_EXT"], [llvm_have_one_so=yes])
|
|
-
|
|
- if test "x$llvm_have_one_so" = xyes; then
|
|
- dnl LLVM was built using auto*, so there is only one shared object.
|
|
- LLVM_LIBS="-l$LLVM_SO_NAME"
|
|
+ if test $LLVM_VERSION_MAJOR -ge 4 -o $LLVM_VERSION_MAJOR -eq 3 -a $LLVM_VERSION_MINOR -ge 9; then
|
|
+ if test "x$enable_llvm_shared_libs" = xyes; then
|
|
+ LLVM_LIBS="`$LLVM_CONFIG --link-shared --libs ${LLVM_COMPONENTS}`"
|
|
else
|
|
- dnl If LLVM was built with CMake, there will be one shared object per
|
|
- dnl component.
|
|
- AS_IF([test ! -f "$LLVM_LIBDIR/libLLVMTarget.$IMP_LIB_EXT"],
|
|
- [AC_MSG_ERROR([Could not find llvm shared libraries:
|
|
- Please make sure you have built llvm with the --enable-shared option
|
|
- and that your llvm libraries are installed in $LLVM_LIBDIR
|
|
- If you have installed your llvm libraries to a different directory you
|
|
- can use the --with-llvm-prefix= configure flag to specify this directory.
|
|
- NOTE: Mesa is attempting to use llvm shared libraries by default.
|
|
- If you do not want to build with llvm shared libraries and instead want to
|
|
- use llvm static libraries then add --disable-llvm-shared-libs to your configure
|
|
- invocation and rebuild.])])
|
|
-
|
|
- dnl We don't need to update LLVM_LIBS in this case because the LLVM
|
|
- dnl install uses a shared object for each component and we have
|
|
- dnl already added all of these objects to LLVM_LIBS.
|
|
+ dnl Invoking llvm-config with both -libs and --system-libs produces the
|
|
+ dnl two separate lines - each for the set of libraries.
|
|
+ dnl Call the program twice, effectively folding them into a single line.
|
|
+ LLVM_LIBS="`$LLVM_CONFIG --link-static --libs ${LLVM_COMPONENTS}`"
|
|
+ dnl We need to link to llvm system libs when using static libs
|
|
+ LLVM_LIBS="$LLVM_LIBS `$LLVM_CONFIG --link-static --system-libs`"
|
|
fi
|
|
else
|
|
- AC_MSG_WARN([Building mesa with statically linked LLVM may cause compilation issues])
|
|
- dnl We need to link to llvm system libs when using static libs
|
|
- dnl However, only llvm 3.5+ provides --system-libs
|
|
- if test $LLVM_VERSION_MAJOR -ge 4 -o $LLVM_VERSION_MAJOR -eq 3 -a $LLVM_VERSION_MINOR -ge 5; then
|
|
- LLVM_LIBS="$LLVM_LIBS `$LLVM_CONFIG --system-libs`"
|
|
+ LLVM_LIBS="`$LLVM_CONFIG --libs ${LLVM_COMPONENTS}`"
|
|
+ if test "x$enable_llvm_shared_libs" = xyes; then
|
|
+ detect_old_buggy_llvm
|
|
+ else
|
|
+ AC_MSG_WARN([Building mesa with statically linked LLVM may cause compilation issues])
|
|
+ dnl We need to link to llvm system libs when using static libs
|
|
+ dnl However, only llvm 3.5+ provides --system-libs
|
|
+ if test $LLVM_VERSION_MAJOR -ge 4 -o $LLVM_VERSION_MAJOR -eq 3 -a $LLVM_VERSION_MINOR -ge 5; then
|
|
+ LLVM_LIBS="$LLVM_LIBS `$LLVM_CONFIG --system-libs`"
|
|
+ fi
|
|
fi
|
|
fi
|
|
fi
|