From 6bebdfbdba7e30999f7db872d3efeb2f129c544225434779d8b7cffcc6184a0d Mon Sep 17 00:00:00 2001 From: Stefan Dirsch Date: Tue, 17 Oct 2017 14:05:27 +0000 Subject: [PATCH] Accepting request 534468 from home:michalsrb:branches:X11:XOrg - 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 --- Mesa.changes | 8 ++ Mesa.spec | 2 + ...ac-rework-llvm-libs-handling-for-3.9.patch | 107 ++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 U_configure.ac-rework-llvm-libs-handling-for-3.9.patch diff --git a/Mesa.changes b/Mesa.changes index f6a9db1..4e66ddb 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue Oct 17 13:55:17 UTC 2017 - msrb@suse.com + +- 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. + ------------------------------------------------------------------- Thu Oct 12 12:29:38 UTC 2017 - schwab@suse.de diff --git a/Mesa.spec b/Mesa.spec index 06cb2f1..74c92f4 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -84,6 +84,7 @@ Patch21: n_Define-GLAPIVAR-separate-from-GLAPI.patch Patch31: archlinux_0001-Fix-linkage-against-shared-glapi.patch Patch32: archlinux_glvnd-fix-gl-dot-pc.patch Patch42: u_r600-Add-support-for-B5G5R5A1.patch +Patch43: U_configure.ac-rework-llvm-libs-handling-for-3.9.patch BuildRequires: autoconf >= 2.60 BuildRequires: automake @@ -658,6 +659,7 @@ rm -rf docs/README.{VMS,WIN32,OS2} %endif %patch42 -p1 +%patch43 -p1 # Remove requires to libglvnd/libglvnd-devel from baselibs.conf when # disabling libglvnd build; ugly ... diff --git a/U_configure.ac-rework-llvm-libs-handling-for-3.9.patch b/U_configure.ac-rework-llvm-libs-handling-for-3.9.patch new file mode 100644 index 0000000..c1a26b2 --- /dev/null +++ b/U_configure.ac-rework-llvm-libs-handling-for-3.9.patch @@ -0,0 +1,107 @@ +Git-commit: 13a53c4f5cdd664fd155c9e78fb46a4387af006c +Patch-Mainline: Upstream +Author: Emil Velikov +Subject: configure.ac: rework llvm libs handling for 3.9+ +Signed-off-by: Michal Srb + +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 +Cc: Michel Dänzer +Signed-off-by: Emil Velikov +Reviewed-by: Tobias Droste +--- + 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