aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Jirutka <jakub@jirutka.cz>2016-08-07 04:08:34 +0200
committerJakub Jirutka <jakub@jirutka.cz>2016-08-07 13:22:27 +0200
commit36ead8ea412bd3d2c5b51083f2f6c44bccb92955 (patch)
tree29163bba87e208bab9526c04c3057b6ddc812691
parent29249283f7efcb933875984ca19f1297c9e74cb0 (diff)
downloadaports-36ead8ea412bd3d2c5b51083f2f6c44bccb92955.tar.bz2
aports-36ead8ea412bd3d2c5b51083f2f6c44bccb92955.tar.xz
testing/llvm3.7: move libLLVM.so to /usr/lib, add version to libs name
This is needed for binaries that are dynamically linked with libLLVM, so they can find it on the default LD_LIBRARY_PATH. To be honest, I'm still not sure if everything is right. LLVM's CMake scripts have a lot flaws in this version (see recent commits). Most distribution still use old make files. However, it already works for Rust (linked statically) and Julia (linked dynamically).
-rw-r--r--testing/llvm3.7/APKBUILD26
-rw-r--r--testing/llvm3.7/cmake-fix-libLLVM-name.patch76
2 files changed, 97 insertions, 5 deletions
diff --git a/testing/llvm3.7/APKBUILD b/testing/llvm3.7/APKBUILD
index 5b04e400c1..4524414694 100644
--- a/testing/llvm3.7/APKBUILD
+++ b/testing/llvm3.7/APKBUILD
@@ -6,7 +6,7 @@ pkgname=llvm3.7
_pkgname=llvm
_majorver=3.7
pkgver=$_majorver.1
-pkgrel=2
+pkgrel=3
pkgdesc="Low Level Virtual Machine compiler system (version $_majorver)"
arch="all"
url="http://llvm.org/"
@@ -36,6 +36,7 @@ source="http://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.xz
llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch
llvm-nm-workaround.patch
config.guess.patch
+ cmake-fix-libLLVM-name.patch
"
builddir="$srcdir/$_pkgname-$pkgver.src"
@@ -164,8 +165,20 @@ static() {
libs() {
pkgdesc="LLVM $_majorver runtime libraries"
+ local soname="libLLVM-$_majorver.so"
- _mv "$pkgdir"/$_prefix/lib/libLLVM.so.[0-9]* "$subpkgdir"/$_prefix/lib/
+ mkdir -p "$subpkgdir"
+ cd "$subpkgdir"
+
+ # libLLVM should be in /usr/lib. This is needed for binaries that are
+ # dynamically linked with libLLVM, so they can find it on default path.
+ _mv "$pkgdir"/$_prefix/lib/$soname usr/lib/ || return 1
+ ln -s $soname usr/lib/${soname/$_majorver/$pkgver} || return 1
+
+ # And also symlink it back to the LLVM prefix.
+ mkdir -p $_prefix/lib
+ ln -s ../../$soname $_prefix/lib/$soname || return 1
+ ln -s ../../$soname $_prefix/lib/${soname/$_majorver/$pkgver}
}
dev() {
@@ -189,16 +202,19 @@ b370ea6589931c560a92699b890dd888 llvm-0001-Add-Musl-MuslEABI-and-Musl-EABIHF-tr
b0cd098117223159b76e96c3f884536b llvm-0002-Fix-build-with-musl-libc.patch
9cc5050619f764ca9dc842a5ab122290 llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch
785147afd8ab80fa95955a5637b6582f llvm-nm-workaround.patch
-57d95aabd731eca1c1411ceb1894120c config.guess.patch"
+57d95aabd731eca1c1411ceb1894120c config.guess.patch
+a263b29c441c1c83b12535a3f9fd3410 cmake-fix-libLLVM-name-2.patch"
sha256sums="be7794ed0cec42d6c682ca8e3517535b54555a3defabec83554dbc74db545ad5 llvm-3.7.1.src.tar.xz
6018671b549f3043ab4d7100956f0e05092d83de72b88edea199c91d5755d819 llvm-0001-Add-Musl-MuslEABI-and-Musl-EABIHF-triples.patch
e1b0fd5f6918d8c8404f3ec4b8d3ab8fbe8dadc2d6011792349b56e5e8ee51e2 llvm-0002-Fix-build-with-musl-libc.patch
fc28356bf0d5fcfe9b99e28f4abbc2f49f50d263b44e428e30f33bf5472747b4 llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch
1870f910a6f5f2ba6144bd079ec55ed879fe8fd8b1b1b384935f36da43e5f114 llvm-nm-workaround.patch
-10a719450c48433756c9f7a51593f415758ac587911349b22f7d440415a0c6d5 config.guess.patch"
+10a719450c48433756c9f7a51593f415758ac587911349b22f7d440415a0c6d5 config.guess.patch
+e3a9d29441e5a701deb5d89b00ba0b93103ca1aef3f9dffe97f2378aca0e9ef6 cmake-fix-libLLVM-name-2.patch"
sha512sums="ac521debc02f6deba96ef975d6a546b0c5c77299c1dbf5e1b87a7974ff5e7fd715bd7e384b92d9adf572ce47130bdbf6d3c648eb0d7f72f16f976292e4909e90 llvm-3.7.1.src.tar.xz
64388ca3100fd36dfcfa7ba8ec8eb8dd40a7388d4363952ec9b4012e5b82494bd445a1b46506b479283121ec2f74fe3dc07b154f5c76db27b6f5b1af50c265aa llvm-0001-Add-Musl-MuslEABI-and-Musl-EABIHF-triples.patch
4cb3fabbb627b596ce398ed717c66ad20bbea7092ba30751520cc5a63d38e1ac53d23e98a6ad82121ddcf2434383ba5cadbc2990f99a4528e99c6e2160c2f725 llvm-0002-Fix-build-with-musl-libc.patch
19bfb9282455d39d07dbb2b1293b03a45c57d522fbb9c5e58dac034200669628b97e7a90cd4ff5d52d9bb79acfccbef653d8a1140a7f0589ecd6f9b7c4ba0eb6 llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch
11db6f3c5d697bc536c7d053530f7a5572756185e16399c32c31306861b58046ca9bc14b8d8097758c00a8c1a7026cbfb75636c0e697e59c53dda5848f93b006 llvm-nm-workaround.patch
-caf1c9466e8163f8844bd40095d1c3ce26c9e96dcb639f64833baca65a81708d39496e8c8ea65c7f11476d752265080998f1873b79cbc92b23349258e4dfa3ab config.guess.patch"
+caf1c9466e8163f8844bd40095d1c3ce26c9e96dcb639f64833baca65a81708d39496e8c8ea65c7f11476d752265080998f1873b79cbc92b23349258e4dfa3ab config.guess.patch
+52287dd37f62e0b51c487abe62a22440d3e9df2cb6144af45ba9ddc42848495fad533bf6b13f08e1b454ee653be9b8a14e02cf81f430a7d2c9be030889ef7f72 cmake-fix-libLLVM-name-2.patch"
diff --git a/testing/llvm3.7/cmake-fix-libLLVM-name.patch b/testing/llvm3.7/cmake-fix-libLLVM-name.patch
new file mode 100644
index 0000000000..600e32777f
--- /dev/null
+++ b/testing/llvm3.7/cmake-fix-libLLVM-name.patch
@@ -0,0 +1,76 @@
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Sun, 07 Aug 2016 12:37:00 +0200
+Subject: [PATCH] Include version in name of shared libs
+
+This change makes the CMake build system generate libraries for Linux and
+Darwin matching the makefile build system.
+
+libLLVM.so -> libLLVM-$MAJOR.$MINOR.so
+libLTO.so -> libLTO-$MAJOR.$MINOR.so
+
+See https://github.com/llvm-mirror/llvm/commit/61dbca10ea813ea3af447cc7ac2556a5e81211f9
+
+--- a/cmake/modules/AddLLVM.cmake
++++ b/cmake/modules/AddLLVM.cmake
+@@ -313,10 +313,12 @@
+ # Same semantics as target_link_libraries().
+ # ADDITIONAL_HEADERS
+ # May specify header files for IDE generators.
++# SONAME
++# Should set SONAME link flags and create symlinks
+ # )
+ function(llvm_add_library name)
+ cmake_parse_arguments(ARG
+- "MODULE;SHARED;STATIC"
++ "MODULE;SHARED;STATIC;SONAME"
+ "OUTPUT_NAME"
+ "ADDITIONAL_HEADERS;DEPENDS;LINK_COMPONENTS;LINK_LIBS;OBJLIBS"
+ ${ARGN})
+@@ -418,11 +420,6 @@
+ PREFIX ""
+ )
+ endif()
+-
+- set_target_properties(${name}
+- PROPERTIES
+- SOVERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}
+- VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX})
+ endif()
+
+ if(ARG_MODULE OR ARG_SHARED)
+@@ -483,7 +480,7 @@
+
+ macro(add_llvm_library name)
+ cmake_parse_arguments(ARG
+- "SHARED"
++ "SHARED;SONAME"
+ ""
+ ""
+ ${ARGN})
+@@ -526,6 +523,15 @@
+ -DCMAKE_INSTALL_COMPONENT=${name}
+ -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
+ endif()
++ if(ARG_SHARED)
++ get_target_property(output_name ${name} OUTPUT_NAME)
++ if(${output_name} STREQUAL "output_name-NOTFOUND")
++ set(output_name ${name})
++ endif()
++ set(library_name ${output_name}-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX})
++ set(api_name ${output_name}-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX})
++ set_target_properties(${name} PROPERTIES OUTPUT_NAME ${library_name})
++ endif()
+ endif()
+ set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
+ endif()
+--- a/tools/llvm-shlib/CMakeLists.txt
++++ b/tools/llvm-shlib/CMakeLists.txt
+@@ -95,7 +95,7 @@
+ add_custom_target(libLLVMExports DEPENDS ${LLVM_EXPORTED_SYMBOL_FILE})
+ endif()
+
+-add_llvm_library(LLVM SHARED ${SOURCES})
++add_llvm_library(LLVM SHARED SONAME ${SOURCES})
+
+ list(REMOVE_DUPLICATES LIB_NAMES)
+ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") # FIXME: It should be "GNU ld for elf"