aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Shelton <stuart@shelton.me>2018-01-08 15:19:17 +0000
committerStuart Shelton <stuart@shelton.me>2018-01-08 15:19:17 +0000
commit744e06e805aa98114711aff02c6d23f495fe14a5 (patch)
tree2884f1a2fad7b9e95bf2884c1062196703b4b9ea /sys-devel
parentAdd app-shells/bash-4.4_p12, update app-shells/bash-4.3_p48-r1 (diff)
downloadsrcshelton-744e06e805aa98114711aff02c6d23f495fe14a5.tar.gz
srcshelton-744e06e805aa98114711aff02c6d23f495fe14a5.tar.bz2
srcshelton-744e06e805aa98114711aff02c6d23f495fe14a5.zip
Add sys-devel/llvm-4.0.1-r1
Diffstat (limited to 'sys-devel')
-rw-r--r--sys-devel/llvm/Manifest6
-rw-r--r--sys-devel/llvm/files/4.0.1/0001-cmake-Pass-Wl-z-nodelete-on-Linux-to-prevent-unloadi.patch56
-rw-r--r--sys-devel/llvm/files/9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch47
-rw-r--r--sys-devel/llvm/llvm-4.0.1-r1.ebuild235
4 files changed, 306 insertions, 38 deletions
diff --git a/sys-devel/llvm/Manifest b/sys-devel/llvm/Manifest
index dace51f7..3ca805d2 100644
--- a/sys-devel/llvm/Manifest
+++ b/sys-devel/llvm/Manifest
@@ -64,7 +64,8 @@ AUX 3.9.1/clang/gcc-config.patch 23901 SHA256 83f551013cdb83610eaa99ee1fad1ac457
AUX 3.9.1/compiler-rt/0001-cmake-Install-compiler-rt-into-usr-lib-without-suffi.patch 1130 SHA256 df99addad6f7ea387d27c8dc282681f1a7358653ac207802cacc585c9bd9f350 SHA512 48cdd9d720877b9b91940ea40c1c95f585b500d9ad6f1973453cb335a2be02f48b57c8d6ec3a59356c360c7e23fe2cd9ab9f648d6b966f606593fcbe74e8ef1e WHIRLPOOL 23d90689da0c947166bd0369b0e3b51375144fb9f81b5a0d45cdacaa14b0d5828bd78fcdaf6331abf9697faf1579557e8d0285e3e2cf53ddfd546ce73e57e5d2
AUX 3.9.1/lldb/six.patch 766 SHA256 fbd732d0f2a5fe0b2d0b5507525cff250efe868384cfd7c5a638586de8608b15 SHA512 5c3096eb168ac9a37d980d7253317de5c89abd78672e3afbe93a8b3f47a30aa87670f6b01e8a0480f930dd572fbb46bb6ad2c41e8bb11f2059db77aa229be8c2 WHIRLPOOL 5b02d5b6aacf1fa27a599a86cb35b771b855672bd2150baa3518e026a958e7e97b4e9ac04dd44c75b3de61057139aaec1315442127ad37d7f842c24cc454dd77
AUX 3.9.1/llvm-config-r1.patch 3310 SHA256 263e4c9724c3faee0d800c0c6793bbf7529928214911f174fab47a4cb57e507f SHA512 4c77807a509ba4d7549ea11eaa5cb6e8d8c01eb8479b9d2128f6afd42fd8b1cb2d0bf5ae86470df94027f855f5fa0050c08612ca8dcb3ac08fc7848aa5f5fd5f WHIRLPOOL 1d49c5b735bc6426ecf5b14ccf5a5ba3af81f7ae6a00298abccf1882ce9b6ae193c7e4f6eafe639862c3c9651c0b88fa53dacd60a0e24d2bb5916e2826150270
-AUX 9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch 3727 SHA256 35a7bea7f4e089312aecfacc723f31f61bccaee6f94db4ee94249608b6fad051 SHA512 c10eb24eb92ddc881b81733093c6e65acd0d37a0443dc2387f7f51fdef6cd461d3d39827cd3010c54f96f7d3b7e136d7af9c1baf37d5cb523f1afa2d8ae4a0f3 WHIRLPOOL efb54468844f01d7cc2d90d2d5ff9b990df06a2e580d6d5092ebd4e940046719a3f07e657644cdbc8a308267b24938aae20b0195d1901d909ffefcebc2abd68d
+AUX 4.0.1/0001-cmake-Pass-Wl-z-nodelete-on-Linux-to-prevent-unloadi.patch 2408 SHA256 47cfa92e46e1ad1962ec44f27f2de679e7862270ca4a4d6eb020a0ff81aa2a6d SHA512 0424f35f12054a7e3e20d948c714979cfcf01200e8aac1cfab1b9fdd08718b4f4143a635eca9500e7ac77993ff390358cb630b8d97029cd9ec1e14c9cfaedfd2 WHIRLPOOL c8d9ebd1d0f555c4fc286dbdb592a095e556e3c719190155df79ca53b54cfcdf775a45c55645fc6cc5f6257d44e7938ad6c2f4fb2c1b30009bbaf048751d6098
+AUX 9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch 2626 SHA256 66481b2fb647e72007a3a66bfce6283de6e882dd9cd126f826fdd3543b14f1ef SHA512 34a84427c34fa8886f55e05cf0ffce258cdee8e98190e070eb40dc555a30784c49ebe4f946f7ea51b7d00fceb8071fc745007250dc5b5a61c4d2bb9910672ec5 WHIRLPOOL cccdbed2df2ad42496e5b3db71104775d7c34e82ae7b631c3715487f54d8084d1a8b35bf4ff805698ebefb8e4f7581495bb5b62fa168de8ed95feaceb45ff7d8
AUX 9999/musl-fixes.patch 1258 SHA256 8b0ae461e2d50f052e71a9498058f3d514c439973af32d0e0bab5ce73efedefa SHA512 314dcbe846a66312c9f1634f4ff3f4670b3db1d3210bb550f1d3877a423333ba042da2e90c8736918a36be4d4faf58dab8d3236d4f26df5af7f7f019b0e0ec8f WHIRLPOOL 893934dd9ea093d2c102144be0e6fb80ec846299c662939e7093d21fb38fe237a49909c1c69e5b5839a1686aa0281b8a865eb4162ede3e7e64642b11621c08d5
AUX clang-3.1-gentoo-runtime-gcc-detection-v3.patch 1457 SHA256 f4b22281d21e39bc4681519cec90243c0e50262ce56ae68b0a8d9e7d92ce0375 SHA512 81c582791f4b0b1ccfcf3e8c82fbb68312320c5287402236d8c6d2d76767bbba031094c26d2b7bd9581c473896b78dda5a6284c5a87726e1bc0c539ae9294763 WHIRLPOOL bb68797804c89f8797561964697a72a015daf2c951d92f490f8c83f38aac6f50ce1527f39b53ccc6a3d93f84ec8f868e40340a5472b9e7ee4c34ceaa4b9ca845
AUX clang-3.4-darwin_build_fix.patch 1876 SHA256 b2fe85911006affc8ac5fc68496c45845872cf4b37445910b8d10a5bfbe77fcc SHA512 54841b590e14b84f90b00ec782785181018196d076764e4048960d1321d18aac388e1220bdc70b10432dfb5fcad5a43af6c33124ec93df8bc3a724cceeee9260 WHIRLPOOL 8c1373a558619be095427d7986246524e5f7c1239ee706234debc2add1f03626d630a1e5216bdc7127f0b833eca791fae666765a27d394ecc55d394492f424ab
@@ -170,6 +171,8 @@ DIST llvm-3.8.1.src.tar.xz 16551472 SHA256 6e82ce4adb54ff3afc18053d6981b6aed1406
DIST llvm-3.9.0_rc3-manpages.tar.bz2 80007 SHA256 991f5238d23c0aee2fd303d1adecd6045c42ed066f42f0d58f62c3a25c197140 SHA512 f96c340021de3f096ec3ad7d51a6af2c7a84974122d1df15729a39d4f9d65452f063a85ab38adb064288dc14220d9cc679b31ee19b48424d3d7cde621ff37597 WHIRLPOOL d3f24a2faaa5aa909519373532262c342acf517048ac543f303b6ddb539f5ece876a338c8efc445f4ada6f723a4e65e35bd5f2f9b4f52ef96ef832000259ab20
DIST llvm-3.9.1-patchset.tar.xz 16404 SHA256 a4b3e5887b53af47984ea39ff8640f11e8a9accbafd1be20fb9cf25f2980b16c SHA512 dcae89ba910b5195bb455924242912f526b6994f0f236571b6364fd594bf9ca03cc74e116a44ae4372e34ce63b21f1351125157e7af7a957aee115f400b54089 WHIRLPOOL a9ec4315e8bb9593e6734e22a0d81fbe0398adedcfe7f6b81de852c1a1092593e07624a5ce7b67bca8be8b34c7453fda9f7eb33be41d11f51458800248a15649
DIST llvm-3.9.1.src.tar.xz 18130436 SHA256 1fd90354b9cf19232e8f168faf2220e79be555df3aa743242700879e8fd329ee SHA512 50cbe8ee911080f586e77861c442348701bd02e2de0c090c54c34f82ac275ecfcd712af0f41e387c33b4a6057778a4258a27554292fe68ab4af3fd9dd6d90683 WHIRLPOOL 1cd1a25befcb178bec4a4aace4367167f3838d32edbe9db9de8c6e558c01c1fcf123f6d6f80b7ec9ff32b3d6dcf2de2f4eb4201d417c3d17a5c8a69934832903
+DIST llvm-4.0.1.src.tar.xz 21065652 SHA256 da783db1f82d516791179fe103c71706046561f7972b18f0049242dee6712b51 SHA512 16adc39b34ddb628f81b171119a8e2a0e9138b25011e803ef0b688e2fbea116fc4953d3a1b61b90a98a75e33619f81566b7cb06a9a2ea4d04ac5e0eb303a2d1d WHIRLPOOL 1626ff270f7ce4801d02a0797b227fda9314ff5c0c01d653111599e9a4d2854c4d9edc3c698a7abee8d79d6bce8b18dc619fbced3c07ca610d44a248d65830cc
+DIST llvm-manpages-4.0.1.tar.bz2 87981 SHA256 28fa1dcd4774156247ba253d2d79c81796ef0f0763b4f37c9c5ae27af93f4320 SHA512 d5b3213567c25db58ef364d272314a79c311a80fc21d98c09a5540af45a8190a38f489228663fe9a9b63bf0f2b952c460c4196a8fc8d6f221619f6e7ed2fc415 WHIRLPOOL da897ea8d3713a5c4c10a6320f0e7dd13e0125e942e3444b0e8a2a062b83a8e86e3754be025b89ae00f63f557ec0518ab62d8cd21237962e93c708ca72c8e3f5
EBUILD llvm-3.4-r1.ebuild 14995 SHA256 87ea57c9fb79f18e77f64c364ce7c04fda60bf783d06952763a6c85881eb9fd8 SHA512 386bac99f1cd72b1902e66e722fe2c59c906b89a9585f2d923637c54aa8f84f3ba06a58562db41c10d88eeb06ef209a0d0faee6917de3beb4f3286b4fd1664ec WHIRLPOOL f48f2b0348bf76fae1b8573cac2b160e83be20a869740bbf6066fa26d7e1b8a8e2a121c86bd41dfd3c262dc56dfdf6d4246d6565b0c41d8f951706dfcff066af
EBUILD llvm-3.4.1-r1.ebuild 15272 SHA256 4528de334c4063ef7ebc6edb0714b2228a7cb5e0c6bfacf583b32221f29c674a SHA512 0a8df6a7d4b0c4ffd7fc1540ce90c4d4dcfcd6c7bd656d25195cda667755faf6834218f42e73e4c81ead457a2998ad5e14324d7405b7b98b29bf431839a2660e WHIRLPOOL 01d11a235456fd8b377fd7eda66dfc731cb1b23331781b18bd3066a4741f4259c5b1e591fddc395b7c879dc609167508e585eb6fd55230c5ea9119d5366ec165
EBUILD llvm-3.4.1-r2.ebuild 15472 SHA256 57b1d7dc400100386e612ea34b452e0c7e7e0a8a76be9fcfb5c5b04b5e9a9718 SHA512 c1a2d65cedf519ae63200dada23ef442360b6ddec836fecdbf19aacd70748f8f0918b261e841730a934daaa697a6a8d72270ddeafdfb6caa53175492f1c5402c WHIRLPOOL bc178094fa072d808bd881381acd3e6401333bd128904c8b7e99d02a7a006d13c3b5d85b333492a7db18ce527dae535552d00cfbda9f119ebdd3698955e34406
@@ -190,3 +193,4 @@ EBUILD llvm-3.8.1-r2.ebuild 17607 SHA256 9289a935cffdc02f27f98b8c9967f022362e252
EBUILD llvm-3.8.1.ebuild 16561 SHA256 aa397a9b5a0482bd1e13448e592d7390173b21e56b1958271da635c7c5ab689c SHA512 315ca900a0d43275f5901fb5de9a966d41763c14ce62ece73b0ec44995d649b4a88bb2439263f90330cc18f9751fb6b2afe89a7d32d47171c68edeff7582ada6 WHIRLPOOL c9cbc888eccb6c6788a929e3a3ff746f93117c99f470c94191b8d3ca01b6f74796fa0bb7775d037229b35e9dc456f0144526f418ce3fa6f725252d0f465c84dd
EBUILD llvm-3.9.1-r1.ebuild 16724 SHA256 7f42e7806500d8169c4a1970ba6d8b1a8e0417cb9c4a3016704633bc11e8863f SHA512 7a7a25baaa85c21cc9ac44da2e73a953a410b82691a71666290a0080febbe2464f737df2ec1a9ee37c0b2e63deaa803ced07b485e2ea0e5dc47ed3d51a839b54 WHIRLPOOL fbaa60e9b392a4407f0c253cda3324d68e14fefdfff79907c359d5a505978864330615728f05bd871423cf7fc8baa954ed75c0822793cd2a093ae82b07c3445c
EBUILD llvm-3.9.1.ebuild 16379 SHA256 fa289a551b919807b204ed0499fc7906120a487e39b87e0b189dbcbd1da949a1 SHA512 6dc6904c38d83595e781a7cfd6789c97f33c1d2d9560a8d7e8aa65e7f12229d1dd47577fd34ac073fa9b6e2802909672a4384f5dea3d0a8852f5af0d671cd4f4 WHIRLPOOL 7e9ef9633f31d602515e6e6bc41c1367e6c19fb26d07461d825f654cb981b43ebbd0d5ce5437e3025a3aca2c1b3a1e7f0411eafbe81430ebf034d2a1ee7bb5aa
+EBUILD llvm-4.0.1-r1.ebuild 6834 SHA256 65743c23f5274753e8a2db72d93ccd95a92df4c196efe0d0abf889d659f22d1f SHA512 11c5632071a4f4fe89b2b2daff9e50a9e1db87a2ed6ad581a50039162a7c3046b41cf129368be0922bbc7b61ac2627c7c0e3423a30fbaaafb0f363ca847a91b1 WHIRLPOOL fa15696012eeea9d30488644d21f9e30a51bd7c4398d2442c93a748442dad413cd1a02b9f949407158046649108c3b006dc1ebacd9b152ab5a688ebd99793e0e
diff --git a/sys-devel/llvm/files/4.0.1/0001-cmake-Pass-Wl-z-nodelete-on-Linux-to-prevent-unloadi.patch b/sys-devel/llvm/files/4.0.1/0001-cmake-Pass-Wl-z-nodelete-on-Linux-to-prevent-unloadi.patch
new file mode 100644
index 00000000..b8571364
--- /dev/null
+++ b/sys-devel/llvm/files/4.0.1/0001-cmake-Pass-Wl-z-nodelete-on-Linux-to-prevent-unloadi.patch
@@ -0,0 +1,56 @@
+From 937b23b5fffa59deb1dc342cc5602d387d84a762 Mon Sep 17 00:00:00 2001
+From: Michal Gorny <mgorny@gentoo.org>
+Date: Mon, 27 Nov 2017 22:23:09 +0000
+Subject: [PATCH] [cmake] Pass -Wl,-z,nodelete on Linux to prevent unloading
+
+Prevent unloading shared libraries on Linux when dlclose() is called.
+This is necessary since command-line option parsing API relies on
+registering the global option instances in the option parser instance
+which can be loaded in a different shared library.
+
+Given that we can't reliably remove those options when a library is
+unloaded, the parser ends up containing dangling references. Since glibc
+has relatively complex library unloading rules, some of the LLVM
+libraries can be unloaded while others (including the Support library)
+stay loaded causing quite a mayhem. To reliably prevent that, just
+forbid unloading all libraries -- it's a very bad idea anyway.
+
+While the issue arguably happens only with BUILD_SHARED_LIBS, it may
+affect any library reusing llvm::cl interface.
+
+Based on patch provided Ross Hayward on https://bugs.gentoo.org/617154.
+Previously hit by Fedora back in Feb 2016:
+https://lists.freedesktop.org/archives/mesa-dev/2016-February/107242.html
+
+Differential Revision: https://reviews.llvm.org/D40459
+
+git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319105 91177308-0d34-0410-b5e6-96231b3b80d8
+---
+ cmake/modules/HandleLLVMOptions.cmake | 8 ++++++++
+ unittests/Support/DynamicLibrary/CMakeLists.txt | 7 +++++++
+ 2 files changed, 15 insertions(+)
+
+ 4.0.1 backport: removed the unittest part
+
+diff --git a/cmake/modules/HandleLLVMOptions.cmake b/cmake/modules/HandleLLVMOptions.cmake
+index c5390371845..b5059a8a60e 100644
+--- a/cmake/modules/HandleLLVMOptions.cmake
++++ b/cmake/modules/HandleLLVMOptions.cmake
+@@ -151,6 +151,14 @@ if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR WIN32 OR CYGWIN OR
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,defs")
+ endif()
+
++# Pass -Wl,-z,nodelete. This makes sure our shared libraries are not unloaded
++# by dlclose(). We need that since the CLI API relies on cross-references
++# between global objects which became horribly broken when one of the libraries
++# is unloaded.
++if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,nodelete")
++endif()
++
+
+ function(append value)
+ foreach(variable ${ARGN})
+--
+2.15.1
+
diff --git a/sys-devel/llvm/files/9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch b/sys-devel/llvm/files/9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch
index 0ae66bd5..5def55d3 100644
--- a/sys-devel/llvm/files/9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch
+++ b/sys-devel/llvm/files/9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch
@@ -1,27 +1,20 @@
-From df2ea14b7c07dd7cf3e33f2e66f36af8af3b425e Mon Sep 17 00:00:00 2001
+From 628b899be14a6bab4b32dbd53aabd447dcc16cb7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Sat, 20 Aug 2016 23:47:41 +0200
-Subject: [PATCH 6/9] llvm-config: Clean up exported values, update for shared
+Subject: [PATCH] llvm-config: Clean up exported values, update for shared
linking
Gentoo-specific fixup for llvm-config, including:
- wiping build-specific CFLAGS, CXXFLAGS,
-- updating library suffixes for shared libs,
-- wiping --system-libs for shared linking,
-- making --src-root return invalid path (/dev/null),
-- making --build-mode return "Release" rather than "Gentoo".
+- making --src-root return invalid path (/dev/null).
Thanks to Steven Newbury for the initial patch.
Bug: https://bugs.gentoo.org/565358
Bug: https://bugs.gentoo.org/501684
----
- tools/llvm-config/CMakeLists.txt | 11 ++++++++---
- tools/llvm-config/llvm-config.cpp | 9 +++++++--
- 2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/tools/llvm-config/CMakeLists.txt b/tools/llvm-config/CMakeLists.txt
-index 744fa4e..593788a 100644
+index 744fa4e44d1..593788aaef3 100644
--- a/tools/llvm-config/CMakeLists.txt
+++ b/tools/llvm-config/CMakeLists.txt
@@ -32,8 +32,12 @@ get_property(COMPILE_FLAGS TARGET llvm-config PROPERTY COMPILE_FLAGS)
@@ -39,31 +32,11 @@ index 744fa4e..593788a 100644
set(LLVM_BUILD_SYSTEM cmake)
set(LLVM_HAS_RTTI ${LLVM_CONFIG_HAS_RTTI})
set(LLVM_DYLIB_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX}")
-@@ -46,7 +50,8 @@ endif()
- # Use the C++ link flags, since they should be a superset of C link flags.
- set(LLVM_LDFLAGS "${CMAKE_CXX_LINK_FLAGS}")
- set(LLVM_BUILDMODE ${CMAKE_BUILD_TYPE})
--set(LLVM_SYSTEM_LIBS ${SYSTEM_LIBS})
-+# We don't do static libs, so we don't need to supply any system-libs
-+set(LLVM_SYSTEM_LIBS "")
- if(BUILD_SHARED_LIBS)
- set(LLVM_ENABLE_SHARED ON)
- else()
diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp
-index c63733f..3162091 100644
+index d780094861c..c61c72ff48c 100644
--- a/tools/llvm-config/llvm-config.cpp
+++ b/tools/llvm-config/llvm-config.cpp
-@@ -522,7 +522,8 @@ int main(int argc, char **argv) {
- } else if (Arg == "--host-target") {
- OS << Triple::normalize(LLVM_DEFAULT_TARGET_TRIPLE) << '\n';
- } else if (Arg == "--build-mode") {
-- OS << build_mode << '\n';
-+ // force Release since we force non-standard Gentoo build mode
-+ OS << "Release" << '\n';
- } else if (Arg == "--assertion-mode") {
- #if defined(NDEBUG)
- OS << "OFF\n";
-@@ -540,7 +541,11 @@ int main(int argc, char **argv) {
+@@ -549,7 +550,11 @@ int main(int argc, char **argv) {
} else if (Arg == "--obj-root") {
OS << ActivePrefix << '\n';
} else if (Arg == "--src-root") {
@@ -73,9 +46,9 @@ index c63733f..3162091 100644
+ } else {
+ OS << "/dev/null\n";
+ }
- } else if (Arg == "--link-shared") {
- LinkMode = LinkModeShared;
- } else if (Arg == "--link-static") {
+ } else if (Arg == "--ignore-libllvm") {
+ LinkDyLib = false;
+ LinkMode = BuiltSharedLibs ? LinkModeShared : LinkModeAuto;
--
-2.9.3
+2.11.0
diff --git a/sys-devel/llvm/llvm-4.0.1-r1.ebuild b/sys-devel/llvm/llvm-4.0.1-r1.ebuild
new file mode 100644
index 00000000..0ae1c7bb
--- /dev/null
+++ b/sys-devel/llvm/llvm-4.0.1-r1.ebuild
@@ -0,0 +1,235 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+: ${CMAKE_MAKEFILE_GENERATOR:=ninja}
+# (needed due to CMAKE_BUILD_TYPE != Gentoo)
+CMAKE_MIN_VERSION=3.7.0-r1
+PYTHON_COMPAT=( python2_7 )
+
+inherit cmake-utils flag-o-matic multilib-minimal pax-utils \
+ python-any-r1 toolchain-funcs versionator
+
+DESCRIPTION="Low Level Virtual Machine"
+HOMEPAGE="https://llvm.org/"
+SRC_URI="https://releases.llvm.org/${PV/_//}/${P/_/}.src.tar.xz
+ !doc? ( https://dev.gentoo.org/~mgorny/dist/llvm/llvm-manpages-${PV}.tar.bz2 )"
+
+# Keep in sync with CMakeLists.txt
+ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM BPF Hexagon Lanai Mips MSP430
+ NVPTX PowerPC RISCV Sparc SystemZ X86 XCore )
+ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
+
+# Additional licenses:
+# 1. OpenBSD regex: Henry Spencer's license ('rc' in Gentoo) + BSD.
+# 2. ARM backend: LLVM Software Grant by ARM.
+# 3. MD5 code: public-domain.
+# 4. Tests (not installed):
+# a. gtest: BSD.
+# b. YAML tests: MIT.
+
+LICENSE="UoI-NCSA rc BSD public-domain
+ llvm_targets_ARM? ( LLVM-Grant )"
+SLOT="$(get_major_version)"
+KEYWORDS="amd64 ~arm ~arm64 x86"
+IUSE="debug doc gold libedit +libffi ncurses test
+ elibc_musl kernel_Darwin ${ALL_LLVM_TARGETS[*]}"
+
+RDEPEND="
+ sys-libs/zlib:0=
+ gold? ( >=sys-devel/binutils-2.22:*[cxx] )
+ libedit? ( dev-libs/libedit:0=[${MULTILIB_USEDEP}] )
+ libffi? ( >=virtual/libffi-3.0.13-r1:0=[${MULTILIB_USEDEP}] )
+ ncurses? ( >=sys-libs/ncurses-5.9-r3:0=[${MULTILIB_USEDEP}] )"
+# configparser-3.2 breaks the build (3.3 or none at all are fine)
+DEPEND="${RDEPEND}
+ dev-lang/perl
+ || ( >=sys-devel/gcc-3.0 >=sys-devel/llvm-3.5
+ ( >=sys-freebsd/freebsd-lib-9.1-r10 sys-libs/libcxx )
+ )
+ || ( >=sys-devel/binutils-2.18 >=sys-devel/binutils-apple-5.1 )
+ kernel_Darwin? ( <sys-libs/libcxx-$(get_version_component_range 1-3).9999 )
+ doc? ( dev-python/sphinx )
+ gold? ( sys-libs/binutils-libs )
+ libffi? ( virtual/pkgconfig )
+ !!<dev-python/configparser-3.3.0.2
+ ${PYTHON_DEPS}"
+# There are no file collisions between these versions but having :0
+# installed means llvm-config there will take precedence.
+RDEPEND="${RDEPEND}
+ !sys-devel/llvm:0"
+PDEPEND="sys-devel/llvm-common
+ gold? ( sys-devel/llvmgold )"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}
+ || ( ${ALL_LLVM_TARGETS[*]} )"
+
+S=${WORKDIR}/${P/_/}.src
+
+# least intrusive of all
+CMAKE_BUILD_TYPE=RelWithDebInfo
+
+src_prepare() {
+ # Fix llvm-config for shared linking and sane flags
+ # https://bugs.gentoo.org/show_bug.cgi?id=565358
+ eapply "${FILESDIR}"/9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch
+
+ # Backport the fix for dlclose() causing option parser mess
+ # e.g. https://bugs.gentoo.org/617154
+ eapply "${FILESDIR}"/4.0.1/0001-cmake-Pass-Wl-z-nodelete-on-Linux-to-prevent-unloadi.patch
+
+ # support building llvm against musl-libc
+ use elibc_musl && eapply "${FILESDIR}"/9999/musl-fixes.patch
+
+ # disable use of SDK on OSX, bug #568758
+ sed -i -e 's/xcrun/false/' utils/lit/lit/util.py || die
+
+ # User patches + QA
+ cmake-utils_src_prepare
+}
+
+multilib_src_configure() {
+ if use prefix; then
+ append-cppflags -I"${EPREFIX%/}/usr/include"
+ fi
+
+ local ffi_cflags ffi_ldflags
+ if use libffi; then
+ ffi_cflags=$($(tc-getPKG_CONFIG) --cflags-only-I libffi)
+ ffi_ldflags=$($(tc-getPKG_CONFIG) --libs-only-L libffi)
+ fi
+
+ local libdir=$(get_libdir)
+ local mycmakeargs=(
+ -DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${SLOT}"
+ -DLLVM_LIBDIR_SUFFIX=${libdir#lib}
+
+ -DBUILD_SHARED_LIBS=ON
+ -DLLVM_TARGETS_TO_BUILD="${LLVM_TARGETS// /;}"
+ -DLLVM_BUILD_TESTS=$(usex test)
+
+ -DLLVM_ENABLE_FFI=$(usex libffi)
+ -DLLVM_ENABLE_LIBEDIT=$(usex libedit)
+ -DLLVM_ENABLE_TERMINFO=$(usex ncurses)
+ -DLLVM_ENABLE_ASSERTIONS=$(usex debug)
+ -DLLVM_ENABLE_EH=ON
+ -DLLVM_ENABLE_RTTI=ON
+
+ -DWITH_POLLY=OFF # TODO
+
+ -DLLVM_HOST_TRIPLE="${CHOST}"
+
+ -DFFI_INCLUDE_DIR="${ffi_cflags#-I}"
+ -DFFI_LIBRARY_DIR="${ffi_ldflags#-L}"
+
+ # disable OCaml bindings (now in dev-ml/llvm-ocaml)
+ -DOCAMLFIND=NO
+ )
+
+# Note: go bindings have no CMake rules at the moment
+# but let's kill the check in case they are introduced
+# if ! multilib_is_native_abi || ! use go; then
+ mycmakeargs+=(
+ -DGO_EXECUTABLE=GO_EXECUTABLE-NOTFOUND
+ )
+# fi
+
+ if multilib_is_native_abi; then
+ mycmakeargs+=(
+ -DLLVM_BUILD_DOCS=$(usex doc)
+ -DLLVM_ENABLE_OCAMLDOC=OFF
+ -DLLVM_ENABLE_SPHINX=$(usex doc)
+ -DLLVM_ENABLE_DOXYGEN=OFF
+ -DLLVM_INSTALL_UTILS=ON
+ )
+ use doc && mycmakeargs+=(
+ -DLLVM_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/html"
+ -DSPHINX_WARNINGS_AS_ERRORS=OFF
+ )
+ use gold && mycmakeargs+=(
+ -DLLVM_BINUTILS_INCDIR="${EPREFIX}"/usr/include
+ )
+ fi
+
+ if tc-is-cross-compiler; then
+ local tblgen="${EPREFIX}/usr/lib/llvm/${SLOT}/bin/llvm-tblgen"
+ [[ -x "${tblgen}" ]] \
+ || die "${tblgen} not found or usable"
+ mycmakeargs+=(
+ -DCMAKE_CROSSCOMPILING=ON
+ -DLLVM_TABLEGEN="${tblgen}"
+ )
+ fi
+
+ # LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
+ use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
+ cmake-utils_src_configure
+}
+
+multilib_src_compile() {
+ cmake-utils_src_compile
+
+ pax-mark m "${BUILD_DIR}"/bin/llvm-rtdyld
+ pax-mark m "${BUILD_DIR}"/bin/lli
+ pax-mark m "${BUILD_DIR}"/bin/lli-child-target
+
+ if use test; then
+ pax-mark m "${BUILD_DIR}"/unittests/ExecutionEngine/Orc/OrcJITTests
+ pax-mark m "${BUILD_DIR}"/unittests/ExecutionEngine/MCJIT/MCJITTests
+ pax-mark m "${BUILD_DIR}"/unittests/Support/SupportTests
+ fi
+}
+
+multilib_src_test() {
+ # respect TMPDIR!
+ local -x LIT_PRESERVES_TMP=1
+ cmake-utils_src_make check
+}
+
+src_install() {
+ local MULTILIB_CHOST_TOOLS=(
+ /usr/lib/llvm/${SLOT}/bin/llvm-config
+ )
+
+ local MULTILIB_WRAPPED_HEADERS=(
+ /usr/include/llvm/Config/llvm-config.h
+ )
+
+ local LLVM_LDPATHS=()
+ multilib-minimal_src_install
+
+ # move wrapped headers back
+ mv "${ED%/}"/usr/include "${ED%/}"/usr/lib/llvm/${SLOT}/include || die
+}
+
+multilib_src_install() {
+ cmake-utils_src_install
+
+ # move headers to /usr/include for wrapping
+ rm -rf "${ED%/}"/usr/include || die
+ mv "${ED%/}"/usr/lib/llvm/${SLOT}/include "${ED%/}"/usr/include || die
+
+ LLVM_LDPATHS+=( "${EPREFIX}/usr/lib/llvm/${SLOT}/$(get_libdir)" )
+}
+
+multilib_src_install_all() {
+ local revord=$(( 9999 - ${SLOT} ))
+ cat <<-_EOF_ > "${T}/10llvm-${revord}" || die
+ PATH="${EPREFIX}/usr/lib/llvm/${SLOT}/bin"
+ # we need to duplicate it in ROOTPATH for Portage to respect...
+ ROOTPATH="${EPREFIX}/usr/lib/llvm/${SLOT}/bin"
+ MANPATH="${EPREFIX}/usr/lib/llvm/${SLOT}/share/man"
+ LDPATH="$( IFS=:; echo "${LLVM_LDPATHS[*]}" )"
+_EOF_
+ doenvd "${T}/10llvm-${revord}"
+
+ # install pre-generated manpages
+ if ! use doc; then
+ # (doman does not support custom paths)
+ insinto "/usr/lib/llvm/${SLOT}/share/man/man1"
+ doins "${WORKDIR}/llvm-manpages-${PV}/llvm"/*.1
+ fi
+
+ docompress "/usr/lib/llvm/${SLOT}/share/man"
+}