mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-11-09 06:37:10 -08:00
sys-devel/llvm: Remove old
Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
@@ -6,11 +6,8 @@ DIST llvm-gentoo-patchset-15.0.7-r3.tar.xz 24268 BLAKE2B 6531ae385ecea87bc26dba8
|
||||
DIST llvm-gentoo-patchset-16.0.6.tar.xz 17340 BLAKE2B 37cdf4b38367b4256d4f7a25d1b4f41758e5f81be8e20a1c94a10d6c5e36642e9672121b455e73a0bac2eb40467ef2db4b43789b2912a6790593d97b8b5c27e3 SHA512 2c02b9d8a4c5af9fddcd26c95dc66fffae32cb5b7f85c65a1aa4ed00dd8cd5b01cc1975a711aee63c0b8b11e9dc20f2bc05ea753904eb516892b820f02aff825
|
||||
DIST llvm-gentoo-patchset-17.0.6-r2.tar.xz 3664 BLAKE2B b3d61090bec41469027115f1a7b9c51ff2cd720a5363c755da7c87c120e4c85b5a2b4d65b95e418f15d947e580824d267a5ee86336f2d9272e58ec24fa2acaf7 SHA512 4be3d2fefce3f5b6b8f64632ff47a53d4de8a20b276e538527ba01a1a663c2846e1eba28fdd70364e583884618d94ee774791b1ca03fdda1fef8110b664e506c
|
||||
DIST llvm-gentoo-patchset-17.0.6.tar.xz 1792 BLAKE2B 21b34b436333c0b37522d4340cccc84a572701f6e267cf7c6adfa9be419913f5a6c9ee40a6be5c62d12fbd868912801d30381573c4459c05676e05785cccaefe SHA512 2d90b5e7fcbb950249ef7133fac1ed3dcb758a4d92732119049526cea0b291bd4e9738c4c0d806d70e7d769e1906f8ef3930066c206c00b6ec7d3509ed0fed19
|
||||
DIST llvm-gentoo-patchset-18.1.8-r2.tar.xz 12316 BLAKE2B 25736f6f3417e855924c6eda2ee25f362f406793a37239954e16c8cd11a1fe9f387b524acf95fc04cd84d68a9926cd693efd2bbdfea41ad0d03fd41a559066f5 SHA512 7d62b0d4315e1c73b83e9a33a6f3df02ae422115ae71cb24628436ab1641def3a131907be3f1f5a364ed5818436940c72250beeedb7cb3fb4cbe9365361e9ca0
|
||||
DIST llvm-gentoo-patchset-18.1.8-r4.tar.xz 15912 BLAKE2B 7300128244aafe42fcf5863e3aad2beb0c96c3df527e6d35fe571369bad520ba4aa397a329287da17eb33dca902057da5cd5193ec560ea7f5767ba2d00a45818 SHA512 b32633db387d4adb3bb2d067f824ae4e8e8a24a25aaa4888520f6e61a4bb1f8f70ad5f44057fbc0892c6f93c803e360612b0fc02c4ec068470b546a55f246cba
|
||||
DIST llvm-gentoo-patchset-18.1.8.tar.xz 7444 BLAKE2B ed41325f7e2efc257c03b3500f9ba49a29333f617ff9914705f9df660bbc1e1b3aafada6f2a68a316d2ee47cf628a35f3495f74c9f0ca00c120079e8e93bd4db SHA512 a6bb4313d2635d38f36a3fdb343b2b7f117129ec62f92ead0bbf7010ae73055cb757958975cd9d1677f2c4b1554819a16a918bef9e9e0d982f8025ce49b9a8ef
|
||||
DIST llvm-gentoo-patchset-19.1.0-rc1.tar.xz 3396 BLAKE2B 5715b1689d9806d499e9b0facb07894b0dfebe19b9c41f3ddfbbcc99cf20fc632effed48acedfe4d4184867c4d4d531f491b8495cd81c60318e9e17ed0547c42 SHA512 a1a0c1b7908898ef3921ab145265a51f80359a06305abf1ecfd2288ceb93d80b63524a6519333120f9c5c8b6a7fdc68f961e819e21dbdca1c47b21f742fd6362
|
||||
DIST llvm-project-130c135689ec12ab78c53645808524a8d28f7cae.tar.gz 217788932 BLAKE2B 9ba8ad82597780f24e750272f9439d1e8d464813a607efec4920a13473103975bc181506dcc15c76a6e4ca83622284b77a7903e36aff6145719529630121cf0b SHA512 d9c67155f462e53968ec448e325b35a80c0d207039dd7155568fa366aa1894bc8dfaa2d5c03a67320bdefb1934720a1d23bc4b972c9fae3ff09c7a79d885c53d
|
||||
DIST llvm-project-15.0.7.src.tar.xz 110936452 BLAKE2B f3d277e2029157329e5be78b78af36b0826a1dfd9a337992499bf701e33149665bfc47d5e14978e38f342559629a559f8b2ce328705ba34fdf6830f5ae9721a5 SHA512 4836d3603f32e8e54434cbfa8ef33d9d473ac5dc20ebf9c67132653c73f4524931abd1084655eaee5f20bcfcb91bcc4bbc5c4a0b603ad0c9029c556e14dc4c52
|
||||
DIST llvm-project-15.0.7.src.tar.xz.sig 566 BLAKE2B 47dc8c82d86237b80c6d85f83a6c9a6e9e174cf8e7f367b071e0cd9481d7cd408e991337c5624e07f3f370f26387c814f212808575ed1c1b58404d3e3836b7df SHA512 fc6891b440dd1175eb8df3790590af8d36bc92301660f84744ae15123475aeb900a151e6a8e7998ded27ec4d86871903ad0b89cd61164943054c2e3bc8d8beb2
|
||||
DIST llvm-project-16.0.6.src.tar.xz 118013488 BLAKE2B 95192d39cbd2914e5609db365965f1c00bfea6c2d653b3996bd2acef8a2b37e37f6fc8a9d2b65711ad72657e0ef52c42f733053cf65051e7822f27396c30406d SHA512 89a67ebfbbc764cc456e8825ecfa90707741f8835b1b2adffae0b227ab1fe5ca9cce75b0efaffc9ca8431cae528dc54fd838867a56a2b645344d9e82d19ab1b7
|
||||
@@ -19,8 +16,6 @@ DIST llvm-project-17.0.6.src.tar.xz 127838860 BLAKE2B d6ede1a9fda8756995c3e06541
|
||||
DIST llvm-project-17.0.6.src.tar.xz.sig 438 BLAKE2B 186e75b6a0fbfe1e85408589c149e1800fcc47d685b74e4260018e05cd08bc793d1d1197c9c50e177eea941a3d0c65cb0c583ce6dae449099b920adf8a508ef7 SHA512 f78c55053a6450625f3e95f52c305110b4468a9854fec75831b65b8d6ceee3c9206ab9e63c4b5fda8be9bd344f72cfbdaae0520ed240abd505e08ebeaa25d340
|
||||
DIST llvm-project-18.1.8.src.tar.xz 132067260 BLAKE2B a950492f1dbfb874dff63b1ffef86468169ba2f211a9733ec2d4cf30040f7f277ef00f048bb44dee9f97d7d762f0f241f19e5a2a7b0b49217d3821ddfc8c354f SHA512 25eeee9984c8b4d0fbc240df90f33cbb000d3b0414baff5c8982beafcc5e59e7ef18f6f85d95b3a5f60cb3d4cd4f877c80487b5768bc21bc833f107698ad93db
|
||||
DIST llvm-project-18.1.8.src.tar.xz.sig 566 BLAKE2B 6ab0efc5b38d4483f4e32e8b85774b2edd5d88fdf29f23b88eb0b5130a7a7f0e80549612b025f927e92de4a08ff7c292cff224dbda91a5d598244e98f7ad0fbd SHA512 ddfd1e8a06756759af6cbe488c82a6d6a62ba91f3e8a0eb4cece561321824f5d165b08ed91010588790b76e19790931d2651b24dba8567e3b151d3cb43bec25b
|
||||
DIST llvm-project-19.1.0-rc1.src.tar.xz 141259912 BLAKE2B e882ff54a96900b4948e572cf073c897df6b4ce159869a42c56a4c830187d83b8d9d9b3940dad22346f142f9674575191cc9d079312f0d9aa1105390c07f504f SHA512 9f43dbe8d5f1322f73fb1c638ce4fc7a8179c9ca33fdbfbb6d72632a3d6bf4bc4993f8f5ec827510af55f4f013fba8fe3d7d9e45f262eec16ecf9ab39296b4b8
|
||||
DIST llvm-project-19.1.0-rc1.src.tar.xz.sig 438 BLAKE2B cc1acbd33440bb14f78c19cc3061a5c0cb3d9dbcd6f0d1516fe118ac02c500ba4df129f870ddf3fe1a52519feab4b631866413fce9c726272d52c3865a9eea27 SHA512 a3361992b55be13aeff5d91bb90a15e3a2ab89e486328fa4d9abc9efa3925aee70bea48449b003ae1926909d389bf71afcf6dc56d800ed2e0e3dbc65da6e4e92
|
||||
DIST llvm-project-19.1.0-rc2.src.tar.xz 141264388 BLAKE2B 690b4912d9e4a8019b7990934dd6486362337ccb303dca119c0e75aa1063ad452222be1ee965e43b160dfcea20e491a20c289344152666b618712a1d76dc4780 SHA512 508a401e8433b1ac9a399246eb1a3c18faed7c3d41d8c118e77cefbb64cc6d6e171bd41a3e5584f6c84df141ba6819f1a1cce75b5c1ef33e3d2ac239e662d07c
|
||||
DIST llvm-project-19.1.0-rc2.src.tar.xz.sig 438 BLAKE2B 1eaf10a1419ecf009c033a8f6ecb6eec86107d81621d5b4665c8d929b05f4845ce0c432017343d7b06f33e6ff6384df9e1d8fc7b9c6efe7f10ef69798891b7e5 SHA512 b46e9a1d40f891c5f3544d8cc6295900bff5dda9a4a526b8db55a42a37ae90deb216b316d2117984e82f4e918d15343e75b3b9e6d6c773866707c3398e032826
|
||||
DIST llvm-project-fd7d7882e7fa5a38d4bfde426120d4663718beb4.tar.gz 218217769 BLAKE2B a6c2aa012c342e31527b7e9f85e8fea3549d52530d8f87cd699e094a0aa768d099f9fd2631161ff7f53b4a5011937ed6d1f52b8fa1d23aa34183be1f487d4277 SHA512 c4863fab1a3c03f7f9c42f3501d3a75cebb491343515d77d30b26e5cbd720fc3fd628052099d87ed638e8c424bcbe7a1d066ed857f73da6f243d3d5a76b0e6c5
|
||||
|
||||
@@ -1,549 +0,0 @@
|
||||
# Copyright 1999-2024 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
PYTHON_COMPAT=( python3_{10..13} )
|
||||
|
||||
inherit cmake flag-o-matic llvm.org multilib-minimal pax-utils python-any-r1
|
||||
inherit toolchain-funcs
|
||||
|
||||
DESCRIPTION="Low Level Virtual Machine"
|
||||
HOMEPAGE="https://llvm.org/"
|
||||
|
||||
# Additional licenses:
|
||||
# 1. OpenBSD regex: Henry Spencer's license ('rc' in Gentoo) + BSD.
|
||||
# 2. xxhash: BSD.
|
||||
# 3. MD5 code: public-domain.
|
||||
# 4. ConvertUTF.h: TODO.
|
||||
|
||||
LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA BSD public-domain rc"
|
||||
SLOT="${LLVM_MAJOR}/${LLVM_SOABI}"
|
||||
KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86 ~amd64-linux ~arm64-macos ~ppc-macos ~x64-macos"
|
||||
IUSE="
|
||||
+binutils-plugin debug debuginfod doc exegesis libedit +libffi
|
||||
ncurses test xml z3 zstd
|
||||
"
|
||||
RESTRICT="!test? ( test )"
|
||||
|
||||
RDEPEND="
|
||||
sys-libs/zlib:0=[${MULTILIB_USEDEP}]
|
||||
debuginfod? (
|
||||
net-misc/curl:=
|
||||
dev-cpp/cpp-httplib:=
|
||||
)
|
||||
exegesis? ( dev-libs/libpfm:= )
|
||||
libedit? ( dev-libs/libedit:0=[${MULTILIB_USEDEP}] )
|
||||
libffi? ( >=dev-libs/libffi-3.0.13-r1:0=[${MULTILIB_USEDEP}] )
|
||||
ncurses? ( >=sys-libs/ncurses-5.9-r3:0=[${MULTILIB_USEDEP}] )
|
||||
xml? ( dev-libs/libxml2:2=[${MULTILIB_USEDEP}] )
|
||||
z3? ( >=sci-mathematics/z3-4.7.1:0=[${MULTILIB_USEDEP}] )
|
||||
zstd? ( app-arch/zstd:=[${MULTILIB_USEDEP}] )
|
||||
"
|
||||
DEPEND="
|
||||
${RDEPEND}
|
||||
binutils-plugin? ( sys-libs/binutils-libs )
|
||||
"
|
||||
BDEPEND="
|
||||
${PYTHON_DEPS}
|
||||
dev-lang/perl
|
||||
sys-devel/gnuconfig
|
||||
kernel_Darwin? (
|
||||
<sys-libs/libcxx-${LLVM_VERSION}.9999
|
||||
)
|
||||
libffi? ( virtual/pkgconfig )
|
||||
"
|
||||
# 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
|
||||
sys-devel/llvm-toolchain-symlinks:${LLVM_MAJOR}
|
||||
binutils-plugin? ( >=sys-devel/llvmgold-${LLVM_MAJOR} )
|
||||
"
|
||||
|
||||
LLVM_COMPONENTS=( llvm cmake third-party )
|
||||
LLVM_MANPAGES=1
|
||||
LLVM_PATCHSET=${PV}-r2
|
||||
LLVM_USE_TARGETS=provide
|
||||
llvm.org_set_globals
|
||||
|
||||
[[ -n ${LLVM_MANPAGE_DIST} ]] && BDEPEND+=" doc? ( "
|
||||
BDEPEND+="
|
||||
$(python_gen_any_dep '
|
||||
dev-python/myst-parser[${PYTHON_USEDEP}]
|
||||
dev-python/sphinx[${PYTHON_USEDEP}]
|
||||
')
|
||||
"
|
||||
[[ -n ${LLVM_MANPAGE_DIST} ]] && BDEPEND+=" ) "
|
||||
|
||||
python_check_deps() {
|
||||
llvm_are_manpages_built || return 0
|
||||
|
||||
python_has_version -b "dev-python/myst-parser[${PYTHON_USEDEP}]" &&
|
||||
python_has_version -b "dev-python/sphinx[${PYTHON_USEDEP}]"
|
||||
}
|
||||
|
||||
check_uptodate() {
|
||||
local prod_targets=(
|
||||
$(sed -n -e '/set(LLVM_ALL_TARGETS/,/)/p' CMakeLists.txt \
|
||||
| tail -n +2 | head -n -1)
|
||||
)
|
||||
local all_targets=(
|
||||
lib/Target/*/
|
||||
)
|
||||
all_targets=( "${all_targets[@]#lib/Target/}" )
|
||||
all_targets=( "${all_targets[@]%/}" )
|
||||
|
||||
local exp_targets=() i
|
||||
for i in "${all_targets[@]}"; do
|
||||
has "${i}" "${prod_targets[@]}" || exp_targets+=( "${i}" )
|
||||
done
|
||||
|
||||
if [[ ${exp_targets[*]} != ${ALL_LLVM_EXPERIMENTAL_TARGETS[*]} ]]; then
|
||||
eqawarn "ALL_LLVM_EXPERIMENTAL_TARGETS is outdated!"
|
||||
eqawarn " Have: ${ALL_LLVM_EXPERIMENTAL_TARGETS[*]}"
|
||||
eqawarn "Expected: ${exp_targets[*]}"
|
||||
eqawarn
|
||||
fi
|
||||
|
||||
if [[ ${prod_targets[*]} != ${ALL_LLVM_PRODUCTION_TARGETS[*]} ]]; then
|
||||
eqawarn "ALL_LLVM_PRODUCTION_TARGETS is outdated!"
|
||||
eqawarn " Have: ${ALL_LLVM_PRODUCTION_TARGETS[*]}"
|
||||
eqawarn "Expected: ${prod_targets[*]}"
|
||||
fi
|
||||
}
|
||||
|
||||
check_distribution_components() {
|
||||
if [[ ${CMAKE_MAKEFILE_GENERATOR} == ninja ]]; then
|
||||
local all_targets=() my_targets=() l
|
||||
cd "${BUILD_DIR}" || die
|
||||
|
||||
while read -r l; do
|
||||
if [[ ${l} == install-*-stripped:* ]]; then
|
||||
l=${l#install-}
|
||||
l=${l%%-stripped*}
|
||||
|
||||
case ${l} in
|
||||
# shared libs
|
||||
LLVM|LLVMgold)
|
||||
;;
|
||||
# TableGen lib + deps
|
||||
LLVMDemangle|LLVMSupport|LLVMTableGen)
|
||||
;;
|
||||
# used by lldb
|
||||
LLVMDebuginfod)
|
||||
;;
|
||||
# testing libraries
|
||||
LLVMTestingAnnotations|LLVMTestingSupport)
|
||||
;;
|
||||
# static libs
|
||||
LLVM*)
|
||||
continue
|
||||
;;
|
||||
# meta-targets
|
||||
distribution|llvm-libraries)
|
||||
continue
|
||||
;;
|
||||
# used only w/ USE=doc
|
||||
docs-llvm-html)
|
||||
use doc || continue
|
||||
;;
|
||||
esac
|
||||
|
||||
all_targets+=( "${l}" )
|
||||
fi
|
||||
done < <(${NINJA} -t targets all)
|
||||
|
||||
while read -r l; do
|
||||
my_targets+=( "${l}" )
|
||||
done < <(get_distribution_components $"\n")
|
||||
|
||||
local add=() remove=()
|
||||
for l in "${all_targets[@]}"; do
|
||||
if ! has "${l}" "${my_targets[@]}"; then
|
||||
add+=( "${l}" )
|
||||
fi
|
||||
done
|
||||
for l in "${my_targets[@]}"; do
|
||||
if ! has "${l}" "${all_targets[@]}"; then
|
||||
remove+=( "${l}" )
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#add[@]} -gt 0 || ${#remove[@]} -gt 0 ]]; then
|
||||
eqawarn "get_distribution_components() is outdated!"
|
||||
eqawarn " Add: ${add[*]}"
|
||||
eqawarn "Remove: ${remove[*]}"
|
||||
fi
|
||||
cd - >/dev/null || die
|
||||
fi
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
# disable use of SDK on OSX, bug #568758
|
||||
sed -i -e 's/xcrun/false/' utils/lit/lit/util.py || die
|
||||
|
||||
# Update config.guess to support more systems
|
||||
cp "${BROOT}/usr/share/gnuconfig/config.guess" cmake/ || die
|
||||
|
||||
# Verify that the ebuild is up-to-date
|
||||
check_uptodate
|
||||
|
||||
llvm.org_src_prepare
|
||||
}
|
||||
|
||||
get_distribution_components() {
|
||||
local sep=${1-;}
|
||||
|
||||
local out=(
|
||||
# shared libs
|
||||
LLVM
|
||||
LTO
|
||||
Remarks
|
||||
|
||||
# tools
|
||||
llvm-config
|
||||
|
||||
# common stuff
|
||||
cmake-exports
|
||||
llvm-headers
|
||||
|
||||
# libraries needed for clang-tblgen
|
||||
LLVMDemangle
|
||||
LLVMSupport
|
||||
LLVMTableGen
|
||||
|
||||
# testing libraries
|
||||
llvm_gtest
|
||||
llvm_gtest_main
|
||||
LLVMTestingAnnotations
|
||||
LLVMTestingSupport
|
||||
)
|
||||
|
||||
if multilib_is_native_abi; then
|
||||
out+=(
|
||||
# library used by lldb
|
||||
LLVMDebuginfod
|
||||
|
||||
# utilities
|
||||
llvm-tblgen
|
||||
FileCheck
|
||||
llvm-PerfectShuffle
|
||||
count
|
||||
not
|
||||
yaml-bench
|
||||
UnicodeNameMappingGenerator
|
||||
|
||||
# tools
|
||||
bugpoint
|
||||
dsymutil
|
||||
llc
|
||||
lli
|
||||
lli-child-target
|
||||
llvm-addr2line
|
||||
llvm-ar
|
||||
llvm-as
|
||||
llvm-bcanalyzer
|
||||
llvm-bitcode-strip
|
||||
llvm-c-test
|
||||
llvm-cat
|
||||
llvm-cfi-verify
|
||||
llvm-config
|
||||
llvm-cov
|
||||
llvm-cvtres
|
||||
llvm-cxxdump
|
||||
llvm-cxxfilt
|
||||
llvm-cxxmap
|
||||
llvm-debuginfo-analyzer
|
||||
llvm-debuginfod-find
|
||||
llvm-diff
|
||||
llvm-dis
|
||||
llvm-dlltool
|
||||
llvm-dwarfdump
|
||||
llvm-dwarfutil
|
||||
llvm-dwp
|
||||
llvm-exegesis
|
||||
llvm-extract
|
||||
llvm-gsymutil
|
||||
llvm-ifs
|
||||
llvm-install-name-tool
|
||||
llvm-jitlink
|
||||
llvm-jitlink-executor
|
||||
llvm-lib
|
||||
llvm-libtool-darwin
|
||||
llvm-link
|
||||
llvm-lipo
|
||||
llvm-lto
|
||||
llvm-lto2
|
||||
llvm-mc
|
||||
llvm-mca
|
||||
llvm-ml
|
||||
llvm-modextract
|
||||
llvm-mt
|
||||
llvm-nm
|
||||
llvm-objcopy
|
||||
llvm-objdump
|
||||
llvm-opt-report
|
||||
llvm-otool
|
||||
llvm-pdbutil
|
||||
llvm-profdata
|
||||
llvm-profgen
|
||||
llvm-ranlib
|
||||
llvm-rc
|
||||
llvm-readelf
|
||||
llvm-readobj
|
||||
llvm-readtapi
|
||||
llvm-reduce
|
||||
llvm-remarkutil
|
||||
llvm-rtdyld
|
||||
llvm-sim
|
||||
llvm-size
|
||||
llvm-split
|
||||
llvm-stress
|
||||
llvm-strings
|
||||
llvm-strip
|
||||
llvm-symbolizer
|
||||
llvm-tli-checker
|
||||
llvm-undname
|
||||
llvm-windres
|
||||
llvm-xray
|
||||
obj2yaml
|
||||
opt
|
||||
sancov
|
||||
sanstats
|
||||
split-file
|
||||
verify-uselistorder
|
||||
yaml2obj
|
||||
|
||||
# python modules
|
||||
opt-viewer
|
||||
)
|
||||
|
||||
if llvm_are_manpages_built; then
|
||||
out+=(
|
||||
# manpages
|
||||
docs-dsymutil-man
|
||||
docs-llvm-dwarfdump-man
|
||||
docs-llvm-man
|
||||
)
|
||||
fi
|
||||
use doc && out+=(
|
||||
docs-llvm-html
|
||||
)
|
||||
|
||||
use binutils-plugin && out+=(
|
||||
LLVMgold
|
||||
)
|
||||
use debuginfod && out+=(
|
||||
llvm-debuginfod
|
||||
)
|
||||
fi
|
||||
|
||||
printf "%s${sep}" "${out[@]}"
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
if use ppc && tc-is-gcc && [[ $(gcc-major-version) -lt 14 ]]; then
|
||||
# Workaround for bug #880677
|
||||
append-flags $(test-flags-CXX -fno-ipa-sra -fno-ipa-modref -fno-ipa-icf)
|
||||
fi
|
||||
|
||||
# ODR violations (bug #917536, bug #926529). Just do it for GCC for now
|
||||
# to avoid people grumbling. GCC is, anecdotally, more likely to miscompile
|
||||
# LLVM with LTO anyway (which is not necessarily its fault).
|
||||
tc-is-gcc && filter-lto
|
||||
|
||||
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=(
|
||||
# disable appending VCS revision to the version to improve
|
||||
# direct cache hit ratio
|
||||
-DLLVM_APPEND_VC_REV=OFF
|
||||
-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}"
|
||||
-DLLVM_LIBDIR_SUFFIX=${libdir#lib}
|
||||
|
||||
-DBUILD_SHARED_LIBS=OFF
|
||||
-DLLVM_BUILD_LLVM_DYLIB=ON
|
||||
-DLLVM_LINK_LLVM_DYLIB=ON
|
||||
-DLLVM_DISTRIBUTION_COMPONENTS=$(get_distribution_components)
|
||||
|
||||
# cheap hack: LLVM combines both anyway, and the only difference
|
||||
# is that the former list is explicitly verified at cmake time
|
||||
-DLLVM_TARGETS_TO_BUILD=""
|
||||
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${LLVM_TARGETS// /;}"
|
||||
-DLLVM_INCLUDE_BENCHMARKS=OFF
|
||||
-DLLVM_INCLUDE_TESTS=ON
|
||||
-DLLVM_BUILD_TESTS=$(usex test)
|
||||
-DLLVM_INSTALL_GTEST=ON
|
||||
|
||||
-DLLVM_ENABLE_FFI=$(usex libffi)
|
||||
-DLLVM_ENABLE_LIBEDIT=$(usex libedit)
|
||||
-DLLVM_ENABLE_TERMINFO=$(usex ncurses)
|
||||
-DLLVM_ENABLE_LIBXML2=$(usex xml)
|
||||
-DLLVM_ENABLE_ASSERTIONS=$(usex debug)
|
||||
-DLLVM_ENABLE_LIBPFM=$(usex exegesis)
|
||||
-DLLVM_ENABLE_EH=ON
|
||||
-DLLVM_ENABLE_RTTI=ON
|
||||
-DLLVM_ENABLE_Z3_SOLVER=$(usex z3)
|
||||
-DLLVM_ENABLE_ZLIB=FORCE_ON
|
||||
-DLLVM_ENABLE_ZSTD=$(usex zstd FORCE_ON OFF)
|
||||
-DLLVM_ENABLE_CURL=$(usex debuginfod)
|
||||
-DLLVM_ENABLE_HTTPLIB=$(usex debuginfod)
|
||||
|
||||
-DLLVM_HOST_TRIPLE="${CHOST}"
|
||||
|
||||
-DFFI_INCLUDE_DIR="${ffi_cflags#-I}"
|
||||
-DFFI_LIBRARY_DIR="${ffi_ldflags#-L}"
|
||||
|
||||
-DPython3_EXECUTABLE="${PYTHON}"
|
||||
|
||||
# disable OCaml bindings (now in dev-ml/llvm-ocaml)
|
||||
-DOCAMLFIND=NO
|
||||
)
|
||||
|
||||
local suffix=
|
||||
if [[ -n ${EGIT_VERSION} && ${EGIT_BRANCH} != release/* ]]; then
|
||||
# the ABI of the main branch is not stable, so let's include
|
||||
# the commit id in the SOVERSION to contain the breakage
|
||||
suffix+="git${EGIT_VERSION::8}"
|
||||
fi
|
||||
if [[ $(tc-get-cxx-stdlib) == libc++ ]]; then
|
||||
# Smart hack: alter version suffix -> SOVERSION when linking
|
||||
# against libc++. This way we won't end up mixing LLVM libc++
|
||||
# libraries with libstdc++ clang, and the other way around.
|
||||
suffix+="+libcxx"
|
||||
mycmakeargs+=(
|
||||
-DLLVM_ENABLE_LIBCXX=ON
|
||||
)
|
||||
fi
|
||||
mycmakeargs+=(
|
||||
-DLLVM_VERSION_SUFFIX="${suffix}"
|
||||
)
|
||||
|
||||
use test && mycmakeargs+=(
|
||||
-DLLVM_LIT_ARGS="$(get_lit_flags)"
|
||||
)
|
||||
|
||||
if multilib_is_native_abi; then
|
||||
local build_docs=OFF
|
||||
if llvm_are_manpages_built; then
|
||||
build_docs=ON
|
||||
mycmakeargs+=(
|
||||
-DCMAKE_INSTALL_MANDIR="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/share/man"
|
||||
-DLLVM_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/html"
|
||||
-DSPHINX_WARNINGS_AS_ERRORS=OFF
|
||||
)
|
||||
fi
|
||||
|
||||
mycmakeargs+=(
|
||||
-DLLVM_BUILD_DOCS=${build_docs}
|
||||
-DLLVM_ENABLE_OCAMLDOC=OFF
|
||||
-DLLVM_ENABLE_SPHINX=${build_docs}
|
||||
-DLLVM_ENABLE_DOXYGEN=OFF
|
||||
-DLLVM_INSTALL_UTILS=ON
|
||||
)
|
||||
use binutils-plugin && mycmakeargs+=(
|
||||
-DLLVM_BINUTILS_INCDIR="${EPREFIX}"/usr/include
|
||||
)
|
||||
fi
|
||||
|
||||
use kernel_Darwin && mycmakeargs+=(
|
||||
# On Macos prefix, Gentoo doesn't split sys-libs/ncurses to libtinfo and
|
||||
# libncurses, but llvm tries to use libtinfo before libncurses, and ends up
|
||||
# using libtinfo (actually, libncurses.dylib) from system instead of prefix
|
||||
-DTerminfo_LIBRARIES=-lncurses
|
||||
# Use our libtool instead of looking it up with xcrun
|
||||
-DCMAKE_LIBTOOL="${EPREFIX}/usr/bin/${CHOST}-libtool"
|
||||
)
|
||||
|
||||
# LLVM can have very high memory consumption while linking,
|
||||
# exhausting the limit on 32-bit linker executable
|
||||
use x86 && local -x LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory"
|
||||
|
||||
# LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
|
||||
use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
|
||||
cmake_src_configure
|
||||
|
||||
grep -q -E "^CMAKE_PROJECT_VERSION_MAJOR(:.*)?=${LLVM_MAJOR}$" \
|
||||
CMakeCache.txt ||
|
||||
die "Incorrect version, did you update _LLVM_MAIN_MAJOR?"
|
||||
multilib_is_native_abi && check_distribution_components
|
||||
}
|
||||
|
||||
multilib_src_compile() {
|
||||
tc-env_build cmake_build distribution
|
||||
|
||||
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_build check
|
||||
}
|
||||
|
||||
src_install() {
|
||||
local MULTILIB_CHOST_TOOLS=(
|
||||
/usr/lib/llvm/${LLVM_MAJOR}/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/${LLVM_MAJOR}/include || die
|
||||
}
|
||||
|
||||
multilib_src_install() {
|
||||
DESTDIR=${D} cmake_build install-distribution
|
||||
|
||||
# move headers to /usr/include for wrapping
|
||||
rm -rf "${ED}"/usr/include || die
|
||||
mv "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/include "${ED}"/usr/include || die
|
||||
|
||||
LLVM_LDPATHS+=( "${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/$(get_libdir)" )
|
||||
}
|
||||
|
||||
multilib_src_install_all() {
|
||||
local revord=$(( 9999 - ${LLVM_MAJOR} ))
|
||||
newenvd - "60llvm-${revord}" <<-_EOF_
|
||||
PATH="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/bin"
|
||||
# we need to duplicate it in ROOTPATH for Portage to respect...
|
||||
ROOTPATH="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/bin"
|
||||
MANPATH="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/share/man"
|
||||
LDPATH="$( IFS=:; echo "${LLVM_LDPATHS[*]}" )"
|
||||
_EOF_
|
||||
|
||||
docompress "/usr/lib/llvm/${LLVM_MAJOR}/share/man"
|
||||
llvm_install_manpages
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
elog "You can find additional opt-viewer utility scripts in:"
|
||||
elog " ${EROOT}/usr/lib/llvm/${LLVM_MAJOR}/share/opt-viewer"
|
||||
elog "To use these scripts, you will need Python along with the following"
|
||||
elog "packages:"
|
||||
elog " dev-python/pygments (for opt-viewer)"
|
||||
elog " dev-python/pyyaml (for all of them)"
|
||||
}
|
||||
@@ -1,549 +0,0 @@
|
||||
# Copyright 1999-2024 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
PYTHON_COMPAT=( python3_{10..13} )
|
||||
|
||||
inherit cmake flag-o-matic llvm.org multilib-minimal pax-utils python-any-r1
|
||||
inherit toolchain-funcs
|
||||
|
||||
DESCRIPTION="Low Level Virtual Machine"
|
||||
HOMEPAGE="https://llvm.org/"
|
||||
|
||||
# Additional licenses:
|
||||
# 1. OpenBSD regex: Henry Spencer's license ('rc' in Gentoo) + BSD.
|
||||
# 2. xxhash: BSD.
|
||||
# 3. MD5 code: public-domain.
|
||||
# 4. ConvertUTF.h: TODO.
|
||||
|
||||
LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA BSD public-domain rc"
|
||||
SLOT="${LLVM_MAJOR}/${LLVM_SOABI}"
|
||||
IUSE="
|
||||
+binutils-plugin +debug debuginfod doc exegesis libedit +libffi
|
||||
test xml z3 zstd
|
||||
"
|
||||
RESTRICT="!test? ( test )"
|
||||
|
||||
RDEPEND="
|
||||
sys-libs/zlib:0=[${MULTILIB_USEDEP}]
|
||||
debuginfod? (
|
||||
net-misc/curl:=
|
||||
dev-cpp/cpp-httplib:=
|
||||
)
|
||||
exegesis? ( dev-libs/libpfm:= )
|
||||
libedit? ( dev-libs/libedit:0=[${MULTILIB_USEDEP}] )
|
||||
libffi? ( >=dev-libs/libffi-3.0.13-r1:0=[${MULTILIB_USEDEP}] )
|
||||
xml? ( dev-libs/libxml2:2=[${MULTILIB_USEDEP}] )
|
||||
z3? ( >=sci-mathematics/z3-4.7.1:0=[${MULTILIB_USEDEP}] )
|
||||
zstd? ( app-arch/zstd:=[${MULTILIB_USEDEP}] )
|
||||
"
|
||||
DEPEND="
|
||||
${RDEPEND}
|
||||
binutils-plugin? ( sys-libs/binutils-libs )
|
||||
"
|
||||
BDEPEND="
|
||||
${PYTHON_DEPS}
|
||||
dev-lang/perl
|
||||
sys-devel/gnuconfig
|
||||
kernel_Darwin? (
|
||||
<sys-libs/libcxx-${LLVM_VERSION}.9999
|
||||
)
|
||||
libffi? ( virtual/pkgconfig )
|
||||
"
|
||||
# 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
|
||||
sys-devel/llvm-toolchain-symlinks:${LLVM_MAJOR}
|
||||
binutils-plugin? ( >=sys-devel/llvmgold-${LLVM_MAJOR} )
|
||||
"
|
||||
|
||||
LLVM_COMPONENTS=( llvm cmake third-party )
|
||||
LLVM_MANPAGES=1
|
||||
LLVM_PATCHSET=${PV/_/-}
|
||||
LLVM_USE_TARGETS=provide
|
||||
llvm.org_set_globals
|
||||
|
||||
[[ -n ${LLVM_MANPAGE_DIST} ]] && BDEPEND+=" doc? ( "
|
||||
BDEPEND+="
|
||||
$(python_gen_any_dep '
|
||||
dev-python/myst-parser[${PYTHON_USEDEP}]
|
||||
dev-python/sphinx[${PYTHON_USEDEP}]
|
||||
')
|
||||
"
|
||||
[[ -n ${LLVM_MANPAGE_DIST} ]] && BDEPEND+=" ) "
|
||||
|
||||
python_check_deps() {
|
||||
llvm_are_manpages_built || return 0
|
||||
|
||||
python_has_version -b "dev-python/myst-parser[${PYTHON_USEDEP}]" &&
|
||||
python_has_version -b "dev-python/sphinx[${PYTHON_USEDEP}]"
|
||||
}
|
||||
|
||||
check_uptodate() {
|
||||
local prod_targets=(
|
||||
$(sed -n -e '/set(LLVM_ALL_TARGETS/,/)/p' CMakeLists.txt \
|
||||
| tail -n +2 | head -n -1)
|
||||
)
|
||||
local all_targets=(
|
||||
lib/Target/*/
|
||||
)
|
||||
all_targets=( "${all_targets[@]#lib/Target/}" )
|
||||
all_targets=( "${all_targets[@]%/}" )
|
||||
|
||||
local exp_targets=() i
|
||||
for i in "${all_targets[@]}"; do
|
||||
has "${i}" "${prod_targets[@]}" || exp_targets+=( "${i}" )
|
||||
done
|
||||
|
||||
if [[ ${exp_targets[*]} != ${ALL_LLVM_EXPERIMENTAL_TARGETS[*]} ]]; then
|
||||
eqawarn "ALL_LLVM_EXPERIMENTAL_TARGETS is outdated!"
|
||||
eqawarn " Have: ${ALL_LLVM_EXPERIMENTAL_TARGETS[*]}"
|
||||
eqawarn "Expected: ${exp_targets[*]}"
|
||||
eqawarn
|
||||
fi
|
||||
|
||||
if [[ ${prod_targets[*]} != ${ALL_LLVM_PRODUCTION_TARGETS[*]} ]]; then
|
||||
eqawarn "ALL_LLVM_PRODUCTION_TARGETS is outdated!"
|
||||
eqawarn " Have: ${ALL_LLVM_PRODUCTION_TARGETS[*]}"
|
||||
eqawarn "Expected: ${prod_targets[*]}"
|
||||
fi
|
||||
}
|
||||
|
||||
check_distribution_components() {
|
||||
if [[ ${CMAKE_MAKEFILE_GENERATOR} == ninja ]]; then
|
||||
local all_targets=() my_targets=() l
|
||||
cd "${BUILD_DIR}" || die
|
||||
|
||||
while read -r l; do
|
||||
if [[ ${l} == install-*-stripped:* ]]; then
|
||||
l=${l#install-}
|
||||
l=${l%%-stripped*}
|
||||
|
||||
case ${l} in
|
||||
# shared libs
|
||||
LLVM|LLVMgold)
|
||||
;;
|
||||
# TableGen lib + deps
|
||||
LLVMDemangle|LLVMSupport|LLVMTableGen)
|
||||
;;
|
||||
# used by lldb
|
||||
LLVMDebuginfod)
|
||||
;;
|
||||
# testing libraries
|
||||
LLVMTestingAnnotations|LLVMTestingSupport)
|
||||
;;
|
||||
# static libs
|
||||
LLVM*)
|
||||
continue
|
||||
;;
|
||||
# meta-targets
|
||||
distribution|llvm-libraries)
|
||||
continue
|
||||
;;
|
||||
# used only w/ USE=doc
|
||||
docs-llvm-html)
|
||||
use doc || continue
|
||||
;;
|
||||
esac
|
||||
|
||||
all_targets+=( "${l}" )
|
||||
fi
|
||||
done < <(${NINJA} -t targets all)
|
||||
|
||||
while read -r l; do
|
||||
my_targets+=( "${l}" )
|
||||
done < <(get_distribution_components $"\n")
|
||||
|
||||
local add=() remove=()
|
||||
for l in "${all_targets[@]}"; do
|
||||
if ! has "${l}" "${my_targets[@]}"; then
|
||||
add+=( "${l}" )
|
||||
fi
|
||||
done
|
||||
for l in "${my_targets[@]}"; do
|
||||
if ! has "${l}" "${all_targets[@]}"; then
|
||||
remove+=( "${l}" )
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#add[@]} -gt 0 || ${#remove[@]} -gt 0 ]]; then
|
||||
eqawarn "get_distribution_components() is outdated!"
|
||||
eqawarn " Add: ${add[*]}"
|
||||
eqawarn "Remove: ${remove[*]}"
|
||||
fi
|
||||
cd - >/dev/null || die
|
||||
fi
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
# disable use of SDK on OSX, bug #568758
|
||||
sed -i -e 's/xcrun/false/' utils/lit/lit/util.py || die
|
||||
|
||||
# Update config.guess to support more systems
|
||||
cp "${BROOT}/usr/share/gnuconfig/config.guess" cmake/ || die
|
||||
|
||||
# Verify that the ebuild is up-to-date
|
||||
check_uptodate
|
||||
|
||||
llvm.org_src_prepare
|
||||
|
||||
if has_version ">=sys-libs/glibc-2.40"; then
|
||||
# https://github.com/llvm/llvm-project/issues/100791
|
||||
rm -r test/tools/llvm-exegesis/X86/latency || die
|
||||
fi
|
||||
}
|
||||
|
||||
get_distribution_components() {
|
||||
local sep=${1-;}
|
||||
|
||||
local out=(
|
||||
# shared libs
|
||||
LLVM
|
||||
LTO
|
||||
Remarks
|
||||
|
||||
# tools
|
||||
llvm-config
|
||||
|
||||
# common stuff
|
||||
cmake-exports
|
||||
llvm-headers
|
||||
|
||||
# libraries needed for clang-tblgen
|
||||
LLVMDemangle
|
||||
LLVMSupport
|
||||
LLVMTableGen
|
||||
|
||||
# testing libraries
|
||||
llvm_gtest
|
||||
llvm_gtest_main
|
||||
LLVMTestingAnnotations
|
||||
LLVMTestingSupport
|
||||
)
|
||||
|
||||
if multilib_is_native_abi; then
|
||||
out+=(
|
||||
# library used by lldb
|
||||
LLVMDebuginfod
|
||||
|
||||
# utilities
|
||||
llvm-tblgen
|
||||
FileCheck
|
||||
llvm-PerfectShuffle
|
||||
count
|
||||
not
|
||||
yaml-bench
|
||||
UnicodeNameMappingGenerator
|
||||
|
||||
# tools
|
||||
bugpoint
|
||||
dsymutil
|
||||
llc
|
||||
lli
|
||||
lli-child-target
|
||||
llvm-addr2line
|
||||
llvm-ar
|
||||
llvm-as
|
||||
llvm-bcanalyzer
|
||||
llvm-bitcode-strip
|
||||
llvm-c-test
|
||||
llvm-cat
|
||||
llvm-cfi-verify
|
||||
llvm-cgdata
|
||||
llvm-config
|
||||
llvm-cov
|
||||
llvm-cvtres
|
||||
llvm-cxxdump
|
||||
llvm-cxxfilt
|
||||
llvm-cxxmap
|
||||
llvm-debuginfo-analyzer
|
||||
llvm-debuginfod-find
|
||||
llvm-diff
|
||||
llvm-dis
|
||||
llvm-dlltool
|
||||
llvm-dwarfdump
|
||||
llvm-dwarfutil
|
||||
llvm-dwp
|
||||
llvm-exegesis
|
||||
llvm-extract
|
||||
llvm-gsymutil
|
||||
llvm-ifs
|
||||
llvm-install-name-tool
|
||||
llvm-jitlink
|
||||
llvm-jitlink-executor
|
||||
llvm-lib
|
||||
llvm-libtool-darwin
|
||||
llvm-link
|
||||
llvm-lipo
|
||||
llvm-lto
|
||||
llvm-lto2
|
||||
llvm-mc
|
||||
llvm-mca
|
||||
llvm-ml
|
||||
llvm-modextract
|
||||
llvm-mt
|
||||
llvm-nm
|
||||
llvm-objcopy
|
||||
llvm-objdump
|
||||
llvm-opt-report
|
||||
llvm-otool
|
||||
llvm-pdbutil
|
||||
llvm-profdata
|
||||
llvm-profgen
|
||||
llvm-ranlib
|
||||
llvm-rc
|
||||
llvm-readelf
|
||||
llvm-readobj
|
||||
llvm-readtapi
|
||||
llvm-reduce
|
||||
llvm-remarkutil
|
||||
llvm-rtdyld
|
||||
llvm-sim
|
||||
llvm-size
|
||||
llvm-split
|
||||
llvm-stress
|
||||
llvm-strings
|
||||
llvm-strip
|
||||
llvm-symbolizer
|
||||
llvm-tli-checker
|
||||
llvm-undname
|
||||
llvm-windres
|
||||
llvm-xray
|
||||
obj2yaml
|
||||
opt
|
||||
reduce-chunk-list
|
||||
sancov
|
||||
sanstats
|
||||
split-file
|
||||
verify-uselistorder
|
||||
yaml2obj
|
||||
|
||||
# python modules
|
||||
opt-viewer
|
||||
)
|
||||
|
||||
if llvm_are_manpages_built; then
|
||||
out+=(
|
||||
# manpages
|
||||
docs-dsymutil-man
|
||||
docs-llvm-dwarfdump-man
|
||||
docs-llvm-man
|
||||
)
|
||||
fi
|
||||
use doc && out+=(
|
||||
docs-llvm-html
|
||||
)
|
||||
|
||||
use binutils-plugin && out+=(
|
||||
LLVMgold
|
||||
)
|
||||
use debuginfod && out+=(
|
||||
llvm-debuginfod
|
||||
)
|
||||
fi
|
||||
|
||||
printf "%s${sep}" "${out[@]}"
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
if use ppc && tc-is-gcc && [[ $(gcc-major-version) -lt 14 ]]; then
|
||||
# Workaround for bug #880677
|
||||
append-flags $(test-flags-CXX -fno-ipa-sra -fno-ipa-modref -fno-ipa-icf)
|
||||
fi
|
||||
|
||||
# ODR violations (bug #917536, bug #926529). Just do it for GCC for now
|
||||
# to avoid people grumbling. GCC is, anecdotally, more likely to miscompile
|
||||
# LLVM with LTO anyway (which is not necessarily its fault).
|
||||
tc-is-gcc && filter-lto
|
||||
|
||||
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=(
|
||||
# disable appending VCS revision to the version to improve
|
||||
# direct cache hit ratio
|
||||
-DLLVM_APPEND_VC_REV=OFF
|
||||
-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}"
|
||||
-DLLVM_LIBDIR_SUFFIX=${libdir#lib}
|
||||
|
||||
-DBUILD_SHARED_LIBS=OFF
|
||||
-DLLVM_BUILD_LLVM_DYLIB=ON
|
||||
-DLLVM_LINK_LLVM_DYLIB=ON
|
||||
-DLLVM_DISTRIBUTION_COMPONENTS=$(get_distribution_components)
|
||||
|
||||
# cheap hack: LLVM combines both anyway, and the only difference
|
||||
# is that the former list is explicitly verified at cmake time
|
||||
-DLLVM_TARGETS_TO_BUILD=""
|
||||
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${LLVM_TARGETS// /;}"
|
||||
-DLLVM_INCLUDE_BENCHMARKS=OFF
|
||||
-DLLVM_INCLUDE_TESTS=ON
|
||||
-DLLVM_BUILD_TESTS=$(usex test)
|
||||
-DLLVM_INSTALL_GTEST=ON
|
||||
|
||||
-DLLVM_ENABLE_FFI=$(usex libffi)
|
||||
-DLLVM_ENABLE_LIBEDIT=$(usex libedit)
|
||||
-DLLVM_ENABLE_LIBXML2=$(usex xml)
|
||||
-DLLVM_ENABLE_ASSERTIONS=$(usex debug)
|
||||
-DLLVM_ENABLE_LIBPFM=$(usex exegesis)
|
||||
-DLLVM_ENABLE_EH=ON
|
||||
-DLLVM_ENABLE_RTTI=ON
|
||||
-DLLVM_ENABLE_Z3_SOLVER=$(usex z3)
|
||||
-DLLVM_ENABLE_ZLIB=FORCE_ON
|
||||
-DLLVM_ENABLE_ZSTD=$(usex zstd FORCE_ON OFF)
|
||||
-DLLVM_ENABLE_CURL=$(usex debuginfod)
|
||||
-DLLVM_ENABLE_HTTPLIB=$(usex debuginfod)
|
||||
|
||||
-DLLVM_HOST_TRIPLE="${CHOST}"
|
||||
|
||||
-DFFI_INCLUDE_DIR="${ffi_cflags#-I}"
|
||||
-DFFI_LIBRARY_DIR="${ffi_ldflags#-L}"
|
||||
|
||||
-DPython3_EXECUTABLE="${PYTHON}"
|
||||
|
||||
# disable OCaml bindings (now in dev-ml/llvm-ocaml)
|
||||
-DOCAMLFIND=NO
|
||||
)
|
||||
|
||||
local suffix=
|
||||
if [[ -n ${EGIT_VERSION} && ${EGIT_BRANCH} != release/* ]]; then
|
||||
# the ABI of the main branch is not stable, so let's include
|
||||
# the commit id in the SOVERSION to contain the breakage
|
||||
suffix+="git${EGIT_VERSION::8}"
|
||||
fi
|
||||
if [[ $(tc-get-cxx-stdlib) == libc++ ]]; then
|
||||
# Smart hack: alter version suffix -> SOVERSION when linking
|
||||
# against libc++. This way we won't end up mixing LLVM libc++
|
||||
# libraries with libstdc++ clang, and the other way around.
|
||||
suffix+="+libcxx"
|
||||
mycmakeargs+=(
|
||||
-DLLVM_ENABLE_LIBCXX=ON
|
||||
)
|
||||
fi
|
||||
mycmakeargs+=(
|
||||
-DLLVM_VERSION_SUFFIX="${suffix}"
|
||||
)
|
||||
|
||||
use test && mycmakeargs+=(
|
||||
-DLLVM_LIT_ARGS="$(get_lit_flags)"
|
||||
)
|
||||
|
||||
if multilib_is_native_abi; then
|
||||
local build_docs=OFF
|
||||
if llvm_are_manpages_built; then
|
||||
build_docs=ON
|
||||
mycmakeargs+=(
|
||||
-DCMAKE_INSTALL_MANDIR="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/share/man"
|
||||
-DLLVM_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/html"
|
||||
-DSPHINX_WARNINGS_AS_ERRORS=OFF
|
||||
)
|
||||
fi
|
||||
|
||||
mycmakeargs+=(
|
||||
-DLLVM_BUILD_DOCS=${build_docs}
|
||||
-DLLVM_ENABLE_OCAMLDOC=OFF
|
||||
-DLLVM_ENABLE_SPHINX=${build_docs}
|
||||
-DLLVM_ENABLE_DOXYGEN=OFF
|
||||
-DLLVM_INSTALL_UTILS=ON
|
||||
)
|
||||
use binutils-plugin && mycmakeargs+=(
|
||||
-DLLVM_BINUTILS_INCDIR="${EPREFIX}"/usr/include
|
||||
)
|
||||
fi
|
||||
|
||||
use kernel_Darwin && mycmakeargs+=(
|
||||
# Use our libtool instead of looking it up with xcrun
|
||||
-DCMAKE_LIBTOOL="${EPREFIX}/usr/bin/${CHOST}-libtool"
|
||||
)
|
||||
|
||||
# LLVM can have very high memory consumption while linking,
|
||||
# exhausting the limit on 32-bit linker executable
|
||||
use x86 && local -x LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory"
|
||||
|
||||
# LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
|
||||
use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
|
||||
cmake_src_configure
|
||||
|
||||
grep -q -E "^CMAKE_PROJECT_VERSION_MAJOR(:.*)?=${LLVM_MAJOR}$" \
|
||||
CMakeCache.txt ||
|
||||
die "Incorrect version, did you update _LLVM_MAIN_MAJOR?"
|
||||
multilib_is_native_abi && check_distribution_components
|
||||
}
|
||||
|
||||
multilib_src_compile() {
|
||||
tc-env_build cmake_build distribution
|
||||
|
||||
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_build check
|
||||
}
|
||||
|
||||
src_install() {
|
||||
local MULTILIB_CHOST_TOOLS=(
|
||||
/usr/lib/llvm/${LLVM_MAJOR}/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/${LLVM_MAJOR}/include || die
|
||||
}
|
||||
|
||||
multilib_src_install() {
|
||||
DESTDIR=${D} cmake_build install-distribution
|
||||
|
||||
# move headers to /usr/include for wrapping
|
||||
rm -rf "${ED}"/usr/include || die
|
||||
mv "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/include "${ED}"/usr/include || die
|
||||
|
||||
LLVM_LDPATHS+=( "${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/$(get_libdir)" )
|
||||
}
|
||||
|
||||
multilib_src_install_all() {
|
||||
local revord=$(( 9999 - ${LLVM_MAJOR} ))
|
||||
newenvd - "60llvm-${revord}" <<-_EOF_
|
||||
PATH="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/bin"
|
||||
# we need to duplicate it in ROOTPATH for Portage to respect...
|
||||
ROOTPATH="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/bin"
|
||||
MANPATH="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/share/man"
|
||||
LDPATH="$( IFS=:; echo "${LLVM_LDPATHS[*]}" )"
|
||||
_EOF_
|
||||
|
||||
docompress "/usr/lib/llvm/${LLVM_MAJOR}/share/man"
|
||||
llvm_install_manpages
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
elog "You can find additional opt-viewer utility scripts in:"
|
||||
elog " ${EROOT}/usr/lib/llvm/${LLVM_MAJOR}/share/opt-viewer"
|
||||
elog "To use these scripts, you will need Python along with the following"
|
||||
elog "packages:"
|
||||
elog " dev-python/pygments (for opt-viewer)"
|
||||
elog " dev-python/pyyaml (for all of them)"
|
||||
}
|
||||
@@ -1,553 +0,0 @@
|
||||
# Copyright 1999-2024 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
PYTHON_COMPAT=( python3_{10..13} )
|
||||
|
||||
inherit cmake flag-o-matic llvm.org multilib-minimal pax-utils python-any-r1
|
||||
inherit toolchain-funcs
|
||||
|
||||
DESCRIPTION="Low Level Virtual Machine"
|
||||
HOMEPAGE="https://llvm.org/"
|
||||
|
||||
# Additional licenses:
|
||||
# 1. OpenBSD regex: Henry Spencer's license ('rc' in Gentoo) + BSD.
|
||||
# 2. xxhash: BSD.
|
||||
# 3. MD5 code: public-domain.
|
||||
# 4. ConvertUTF.h: TODO.
|
||||
|
||||
LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA BSD public-domain rc"
|
||||
SLOT="${LLVM_MAJOR}/${LLVM_SOABI}"
|
||||
IUSE="
|
||||
+binutils-plugin +debug debuginfod doc exegesis libedit +libffi
|
||||
test xml z3 zstd
|
||||
"
|
||||
RESTRICT="!test? ( test )"
|
||||
|
||||
RDEPEND="
|
||||
sys-libs/zlib:0=[${MULTILIB_USEDEP}]
|
||||
debuginfod? (
|
||||
net-misc/curl:=
|
||||
dev-cpp/cpp-httplib:=
|
||||
)
|
||||
exegesis? ( dev-libs/libpfm:= )
|
||||
libedit? ( dev-libs/libedit:0=[${MULTILIB_USEDEP}] )
|
||||
libffi? ( >=dev-libs/libffi-3.0.13-r1:0=[${MULTILIB_USEDEP}] )
|
||||
xml? ( dev-libs/libxml2:2=[${MULTILIB_USEDEP}] )
|
||||
z3? ( >=sci-mathematics/z3-4.7.1:0=[${MULTILIB_USEDEP}] )
|
||||
zstd? ( app-arch/zstd:=[${MULTILIB_USEDEP}] )
|
||||
"
|
||||
DEPEND="
|
||||
${RDEPEND}
|
||||
binutils-plugin? ( sys-libs/binutils-libs )
|
||||
"
|
||||
BDEPEND="
|
||||
${PYTHON_DEPS}
|
||||
dev-lang/perl
|
||||
sys-devel/gnuconfig
|
||||
kernel_Darwin? (
|
||||
<sys-libs/libcxx-${LLVM_VERSION}.9999
|
||||
)
|
||||
libffi? ( virtual/pkgconfig )
|
||||
"
|
||||
# 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
|
||||
sys-devel/llvm-toolchain-symlinks:${LLVM_MAJOR}
|
||||
binutils-plugin? ( >=sys-devel/llvmgold-${LLVM_MAJOR} )
|
||||
"
|
||||
|
||||
LLVM_COMPONENTS=( llvm cmake third-party )
|
||||
LLVM_MANPAGES=1
|
||||
LLVM_USE_TARGETS=provide
|
||||
llvm.org_set_globals
|
||||
|
||||
[[ -n ${LLVM_MANPAGE_DIST} ]] && BDEPEND+=" doc? ( "
|
||||
BDEPEND+="
|
||||
$(python_gen_any_dep '
|
||||
dev-python/myst-parser[${PYTHON_USEDEP}]
|
||||
dev-python/sphinx[${PYTHON_USEDEP}]
|
||||
')
|
||||
"
|
||||
[[ -n ${LLVM_MANPAGE_DIST} ]] && BDEPEND+=" ) "
|
||||
|
||||
python_check_deps() {
|
||||
llvm_are_manpages_built || return 0
|
||||
|
||||
python_has_version -b "dev-python/myst-parser[${PYTHON_USEDEP}]" &&
|
||||
python_has_version -b "dev-python/sphinx[${PYTHON_USEDEP}]"
|
||||
}
|
||||
|
||||
check_uptodate() {
|
||||
local prod_targets=(
|
||||
$(sed -n -e '/set(LLVM_ALL_TARGETS/,/)/p' CMakeLists.txt \
|
||||
| tail -n +2 | head -n -1)
|
||||
)
|
||||
local all_targets=(
|
||||
lib/Target/*/
|
||||
)
|
||||
all_targets=( "${all_targets[@]#lib/Target/}" )
|
||||
all_targets=( "${all_targets[@]%/}" )
|
||||
|
||||
local exp_targets=() i
|
||||
for i in "${all_targets[@]}"; do
|
||||
has "${i}" "${prod_targets[@]}" || exp_targets+=( "${i}" )
|
||||
done
|
||||
|
||||
local outdated
|
||||
if [[ ${exp_targets[*]} != ${ALL_LLVM_EXPERIMENTAL_TARGETS[*]} ]]; then
|
||||
eerror "ALL_LLVM_EXPERIMENTAL_TARGETS are outdated!"
|
||||
eerror " Have: ${ALL_LLVM_EXPERIMENTAL_TARGETS[*]}"
|
||||
eerror "Expected: ${exp_targets[*]}"
|
||||
eerror
|
||||
outdated=1
|
||||
fi
|
||||
|
||||
if [[ ${prod_targets[*]} != ${ALL_LLVM_PRODUCTION_TARGETS[*]} ]]; then
|
||||
eerror "ALL_LLVM_PRODUCTION_TARGETS are outdated!"
|
||||
eerror " Have: ${ALL_LLVM_PRODUCTION_TARGETS[*]}"
|
||||
eerror "Expected: ${prod_targets[*]}"
|
||||
outdated=1
|
||||
fi
|
||||
|
||||
[[ ${outdated} ]] && die "Update ALL_LLVM*_TARGETS"
|
||||
}
|
||||
|
||||
check_distribution_components() {
|
||||
if [[ ${CMAKE_MAKEFILE_GENERATOR} == ninja ]]; then
|
||||
local all_targets=() my_targets=() l
|
||||
cd "${BUILD_DIR}" || die
|
||||
|
||||
while read -r l; do
|
||||
if [[ ${l} == install-*-stripped:* ]]; then
|
||||
l=${l#install-}
|
||||
l=${l%%-stripped*}
|
||||
|
||||
case ${l} in
|
||||
# shared libs
|
||||
LLVM|LLVMgold)
|
||||
;;
|
||||
# TableGen lib + deps
|
||||
LLVMDemangle|LLVMSupport|LLVMTableGen)
|
||||
;;
|
||||
# used by lldb
|
||||
LLVMDebuginfod)
|
||||
;;
|
||||
# testing libraries
|
||||
LLVMTestingAnnotations|LLVMTestingSupport)
|
||||
;;
|
||||
# static libs
|
||||
LLVM*)
|
||||
continue
|
||||
;;
|
||||
# meta-targets
|
||||
distribution|llvm-libraries)
|
||||
continue
|
||||
;;
|
||||
# used only w/ USE=doc
|
||||
docs-llvm-html)
|
||||
use doc || continue
|
||||
;;
|
||||
# used only w/ USE=debuginfd
|
||||
llvm-debuginfod)
|
||||
use debuginfod || continue
|
||||
;;
|
||||
esac
|
||||
|
||||
all_targets+=( "${l}" )
|
||||
fi
|
||||
done < <(${NINJA} -t targets all)
|
||||
|
||||
while read -r l; do
|
||||
my_targets+=( "${l}" )
|
||||
done < <(get_distribution_components $"\n")
|
||||
|
||||
local add=() remove=()
|
||||
for l in "${all_targets[@]}"; do
|
||||
if ! has "${l}" "${my_targets[@]}"; then
|
||||
add+=( "${l}" )
|
||||
fi
|
||||
done
|
||||
for l in "${my_targets[@]}"; do
|
||||
if ! has "${l}" "${all_targets[@]}"; then
|
||||
remove+=( "${l}" )
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#add[@]} -gt 0 || ${#remove[@]} -gt 0 ]]; then
|
||||
eerror "get_distribution_components() is outdated!"
|
||||
eerror " Add: ${add[*]}"
|
||||
eerror "Remove: ${remove[*]}"
|
||||
die "Update get_distribution_components()!"
|
||||
fi
|
||||
cd - >/dev/null || die
|
||||
fi
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
# disable use of SDK on OSX, bug #568758
|
||||
sed -i -e 's/xcrun/false/' utils/lit/lit/util.py || die
|
||||
|
||||
# Update config.guess to support more systems
|
||||
cp "${BROOT}/usr/share/gnuconfig/config.guess" cmake/ || die
|
||||
|
||||
# Verify that the ebuild is up-to-date
|
||||
check_uptodate
|
||||
|
||||
llvm.org_src_prepare
|
||||
}
|
||||
|
||||
get_distribution_components() {
|
||||
local sep=${1-;}
|
||||
|
||||
local out=(
|
||||
# shared libs
|
||||
LLVM
|
||||
LTO
|
||||
Remarks
|
||||
|
||||
# tools
|
||||
llvm-config
|
||||
|
||||
# common stuff
|
||||
cmake-exports
|
||||
llvm-headers
|
||||
|
||||
# libraries needed for clang-tblgen
|
||||
LLVMDemangle
|
||||
LLVMSupport
|
||||
LLVMTableGen
|
||||
|
||||
# testing libraries
|
||||
llvm_gtest
|
||||
llvm_gtest_main
|
||||
LLVMTestingAnnotations
|
||||
LLVMTestingSupport
|
||||
)
|
||||
|
||||
if multilib_is_native_abi; then
|
||||
out+=(
|
||||
# library used by lldb
|
||||
LLVMDebuginfod
|
||||
|
||||
# utilities
|
||||
llvm-tblgen
|
||||
FileCheck
|
||||
llvm-PerfectShuffle
|
||||
count
|
||||
not
|
||||
yaml-bench
|
||||
UnicodeNameMappingGenerator
|
||||
|
||||
# tools
|
||||
bugpoint
|
||||
dsymutil
|
||||
llc
|
||||
lli
|
||||
lli-child-target
|
||||
llvm-addr2line
|
||||
llvm-ar
|
||||
llvm-as
|
||||
llvm-bcanalyzer
|
||||
llvm-bitcode-strip
|
||||
llvm-c-test
|
||||
llvm-cat
|
||||
llvm-cfi-verify
|
||||
llvm-config
|
||||
llvm-cov
|
||||
llvm-ctxprof-util
|
||||
llvm-cvtres
|
||||
llvm-cxxdump
|
||||
llvm-cxxfilt
|
||||
llvm-cxxmap
|
||||
llvm-debuginfo-analyzer
|
||||
llvm-debuginfod-find
|
||||
llvm-diff
|
||||
llvm-dis
|
||||
llvm-dlltool
|
||||
llvm-dwarfdump
|
||||
llvm-dwarfutil
|
||||
llvm-dwp
|
||||
llvm-exegesis
|
||||
llvm-extract
|
||||
llvm-gsymutil
|
||||
llvm-ifs
|
||||
llvm-install-name-tool
|
||||
llvm-jitlink
|
||||
llvm-jitlink-executor
|
||||
llvm-lib
|
||||
llvm-libtool-darwin
|
||||
llvm-link
|
||||
llvm-lipo
|
||||
llvm-lto
|
||||
llvm-lto2
|
||||
llvm-mc
|
||||
llvm-mca
|
||||
llvm-ml
|
||||
llvm-modextract
|
||||
llvm-mt
|
||||
llvm-nm
|
||||
llvm-objcopy
|
||||
llvm-objdump
|
||||
llvm-opt-report
|
||||
llvm-otool
|
||||
llvm-pdbutil
|
||||
llvm-profdata
|
||||
llvm-profgen
|
||||
llvm-ranlib
|
||||
llvm-rc
|
||||
llvm-readelf
|
||||
llvm-readobj
|
||||
llvm-readtapi
|
||||
llvm-reduce
|
||||
llvm-remarkutil
|
||||
llvm-rtdyld
|
||||
llvm-sim
|
||||
llvm-size
|
||||
llvm-split
|
||||
llvm-stress
|
||||
llvm-strings
|
||||
llvm-strip
|
||||
llvm-symbolizer
|
||||
llvm-tli-checker
|
||||
llvm-undname
|
||||
llvm-windres
|
||||
llvm-xray
|
||||
obj2yaml
|
||||
opt
|
||||
reduce-chunk-list
|
||||
sancov
|
||||
sanstats
|
||||
split-file
|
||||
verify-uselistorder
|
||||
yaml2obj
|
||||
|
||||
# python modules
|
||||
opt-viewer
|
||||
)
|
||||
|
||||
if llvm_are_manpages_built; then
|
||||
out+=(
|
||||
# manpages
|
||||
docs-dsymutil-man
|
||||
docs-llvm-dwarfdump-man
|
||||
docs-llvm-man
|
||||
)
|
||||
fi
|
||||
use doc && out+=(
|
||||
docs-llvm-html
|
||||
)
|
||||
|
||||
use binutils-plugin && out+=(
|
||||
LLVMgold
|
||||
)
|
||||
use debuginfod && out+=(
|
||||
llvm-debuginfod
|
||||
)
|
||||
fi
|
||||
|
||||
printf "%s${sep}" "${out[@]}"
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
if use ppc && tc-is-gcc && [[ $(gcc-major-version) -lt 14 ]]; then
|
||||
# Workaround for bug #880677
|
||||
append-flags $(test-flags-CXX -fno-ipa-sra -fno-ipa-modref -fno-ipa-icf)
|
||||
fi
|
||||
|
||||
# ODR violations (bug #917536, bug #926529). Just do it for GCC for now
|
||||
# to avoid people grumbling. GCC is, anecdotally, more likely to miscompile
|
||||
# LLVM with LTO anyway (which is not necessarily its fault).
|
||||
tc-is-gcc && filter-lto
|
||||
|
||||
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=(
|
||||
# disable appending VCS revision to the version to improve
|
||||
# direct cache hit ratio
|
||||
-DLLVM_APPEND_VC_REV=OFF
|
||||
-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}"
|
||||
-DLLVM_LIBDIR_SUFFIX=${libdir#lib}
|
||||
|
||||
-DBUILD_SHARED_LIBS=OFF
|
||||
-DLLVM_BUILD_LLVM_DYLIB=ON
|
||||
-DLLVM_LINK_LLVM_DYLIB=ON
|
||||
-DLLVM_DISTRIBUTION_COMPONENTS=$(get_distribution_components)
|
||||
|
||||
# cheap hack: LLVM combines both anyway, and the only difference
|
||||
# is that the former list is explicitly verified at cmake time
|
||||
-DLLVM_TARGETS_TO_BUILD=""
|
||||
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${LLVM_TARGETS// /;}"
|
||||
-DLLVM_INCLUDE_BENCHMARKS=OFF
|
||||
-DLLVM_INCLUDE_TESTS=ON
|
||||
-DLLVM_BUILD_TESTS=$(usex test)
|
||||
-DLLVM_INSTALL_GTEST=ON
|
||||
|
||||
-DLLVM_ENABLE_FFI=$(usex libffi)
|
||||
-DLLVM_ENABLE_LIBEDIT=$(usex libedit)
|
||||
-DLLVM_ENABLE_LIBXML2=$(usex xml)
|
||||
-DLLVM_ENABLE_ASSERTIONS=$(usex debug)
|
||||
-DLLVM_ENABLE_LIBPFM=$(usex exegesis)
|
||||
-DLLVM_ENABLE_EH=ON
|
||||
-DLLVM_ENABLE_RTTI=ON
|
||||
-DLLVM_ENABLE_Z3_SOLVER=$(usex z3)
|
||||
-DLLVM_ENABLE_ZLIB=FORCE_ON
|
||||
-DLLVM_ENABLE_ZSTD=$(usex zstd FORCE_ON OFF)
|
||||
-DLLVM_ENABLE_CURL=$(usex debuginfod)
|
||||
-DLLVM_ENABLE_HTTPLIB=$(usex debuginfod)
|
||||
|
||||
-DLLVM_HOST_TRIPLE="${CHOST}"
|
||||
|
||||
-DFFI_INCLUDE_DIR="${ffi_cflags#-I}"
|
||||
-DFFI_LIBRARY_DIR="${ffi_ldflags#-L}"
|
||||
|
||||
-DPython3_EXECUTABLE="${PYTHON}"
|
||||
|
||||
# disable OCaml bindings (now in dev-ml/llvm-ocaml)
|
||||
-DOCAMLFIND=NO
|
||||
)
|
||||
|
||||
local suffix=
|
||||
if [[ -n ${EGIT_VERSION} && ${EGIT_BRANCH} != release/* ]]; then
|
||||
# the ABI of the main branch is not stable, so let's include
|
||||
# the commit id in the SOVERSION to contain the breakage
|
||||
suffix+="git${EGIT_VERSION::8}"
|
||||
fi
|
||||
if [[ $(tc-get-cxx-stdlib) == libc++ ]]; then
|
||||
# Smart hack: alter version suffix -> SOVERSION when linking
|
||||
# against libc++. This way we won't end up mixing LLVM libc++
|
||||
# libraries with libstdc++ clang, and the other way around.
|
||||
suffix+="+libcxx"
|
||||
mycmakeargs+=(
|
||||
-DLLVM_ENABLE_LIBCXX=ON
|
||||
)
|
||||
fi
|
||||
mycmakeargs+=(
|
||||
-DLLVM_VERSION_SUFFIX="${suffix}"
|
||||
)
|
||||
|
||||
use test && mycmakeargs+=(
|
||||
-DLLVM_LIT_ARGS="$(get_lit_flags)"
|
||||
)
|
||||
|
||||
if multilib_is_native_abi; then
|
||||
local build_docs=OFF
|
||||
if llvm_are_manpages_built; then
|
||||
build_docs=ON
|
||||
mycmakeargs+=(
|
||||
-DCMAKE_INSTALL_MANDIR="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/share/man"
|
||||
-DLLVM_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/html"
|
||||
-DSPHINX_WARNINGS_AS_ERRORS=OFF
|
||||
)
|
||||
fi
|
||||
|
||||
mycmakeargs+=(
|
||||
-DLLVM_BUILD_DOCS=${build_docs}
|
||||
-DLLVM_ENABLE_OCAMLDOC=OFF
|
||||
-DLLVM_ENABLE_SPHINX=${build_docs}
|
||||
-DLLVM_ENABLE_DOXYGEN=OFF
|
||||
-DLLVM_INSTALL_UTILS=ON
|
||||
)
|
||||
use binutils-plugin && mycmakeargs+=(
|
||||
-DLLVM_BINUTILS_INCDIR="${EPREFIX}"/usr/include
|
||||
)
|
||||
fi
|
||||
|
||||
use kernel_Darwin && mycmakeargs+=(
|
||||
# Use our libtool instead of looking it up with xcrun
|
||||
-DCMAKE_LIBTOOL="${EPREFIX}/usr/bin/${CHOST}-libtool"
|
||||
)
|
||||
|
||||
# LLVM can have very high memory consumption while linking,
|
||||
# exhausting the limit on 32-bit linker executable
|
||||
use x86 && local -x LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory"
|
||||
|
||||
# LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
|
||||
use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
|
||||
cmake_src_configure
|
||||
|
||||
grep -q -E "^CMAKE_PROJECT_VERSION_MAJOR(:.*)?=${LLVM_MAJOR}$" \
|
||||
CMakeCache.txt ||
|
||||
die "Incorrect version, did you update _LLVM_MAIN_MAJOR?"
|
||||
multilib_is_native_abi && check_distribution_components
|
||||
}
|
||||
|
||||
multilib_src_compile() {
|
||||
tc-env_build cmake_build distribution
|
||||
|
||||
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_build check
|
||||
}
|
||||
|
||||
src_install() {
|
||||
local MULTILIB_CHOST_TOOLS=(
|
||||
/usr/lib/llvm/${LLVM_MAJOR}/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/${LLVM_MAJOR}/include || die
|
||||
}
|
||||
|
||||
multilib_src_install() {
|
||||
DESTDIR=${D} cmake_build install-distribution
|
||||
|
||||
# move headers to /usr/include for wrapping
|
||||
rm -rf "${ED}"/usr/include || die
|
||||
mv "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/include "${ED}"/usr/include || die
|
||||
|
||||
LLVM_LDPATHS+=( "${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/$(get_libdir)" )
|
||||
}
|
||||
|
||||
multilib_src_install_all() {
|
||||
local revord=$(( 9999 - ${LLVM_MAJOR} ))
|
||||
newenvd - "60llvm-${revord}" <<-_EOF_
|
||||
PATH="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/bin"
|
||||
# we need to duplicate it in ROOTPATH for Portage to respect...
|
||||
ROOTPATH="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/bin"
|
||||
MANPATH="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/share/man"
|
||||
LDPATH="$( IFS=:; echo "${LLVM_LDPATHS[*]}" )"
|
||||
_EOF_
|
||||
|
||||
docompress "/usr/lib/llvm/${LLVM_MAJOR}/share/man"
|
||||
llvm_install_manpages
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
elog "You can find additional opt-viewer utility scripts in:"
|
||||
elog " ${EROOT}/usr/lib/llvm/${LLVM_MAJOR}/share/opt-viewer"
|
||||
elog "To use these scripts, you will need Python along with the following"
|
||||
elog "packages:"
|
||||
elog " dev-python/pygments (for opt-viewer)"
|
||||
elog " dev-python/pyyaml (for all of them)"
|
||||
}
|
||||
Reference in New Issue
Block a user