diff options
author | Stuart Shelton <stuart@shelton.me> | 2018-01-08 15:19:17 +0000 |
---|---|---|
committer | Stuart Shelton <stuart@shelton.me> | 2018-01-08 15:19:17 +0000 |
commit | 744e06e805aa98114711aff02c6d23f495fe14a5 (patch) | |
tree | 2884f1a2fad7b9e95bf2884c1062196703b4b9ea /sys-devel | |
parent | Add app-shells/bash-4.4_p12, update app-shells/bash-4.3_p48-r1 (diff) | |
download | srcshelton-744e06e805aa98114711aff02c6d23f495fe14a5.tar.gz srcshelton-744e06e805aa98114711aff02c6d23f495fe14a5.tar.bz2 srcshelton-744e06e805aa98114711aff02c6d23f495fe14a5.zip |
Add sys-devel/llvm-4.0.1-r1
Diffstat (limited to 'sys-devel')
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" +} |