mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-08-31 09:08:08 -07:00
llvm-core/llvm: Remove old
Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
@@ -19,10 +19,5 @@ DIST llvm-project-21.1.8.src.tar.xz 158958576 BLAKE2B 0d3d4ee920f8e5db50e9815261
|
||||
DIST llvm-project-21.1.8.src.tar.xz.sig 119 BLAKE2B cffc1825f5778a3e3c128ec3e856ff6ee50687319d621cdf42e895abf67e05cc51cb7493308e2b506ab60dbdbaca7aa75eb9f78d91d42c81f9682a36f4042e9d SHA512 10f58eff58ed6e701d0f123b15e68c82ab8cbdf99b1c86c0d83e3b8553e90ea51055e30327e8e442ded57c8f503e2a2de9ee075e9c28b5ba815a0f8922f8671c
|
||||
DIST llvm-project-22.1.8.src.tar.xz 167061596 BLAKE2B 092204f62e0f0364a041c737eb2c25fd073cb5689663d6ccd5a9e4e1743d6d80822360d59b64bff7b4d7872a68a79e899bf2f75f384e55c7d313a79243576f03 SHA512 2615b20ba08534f83ab8ecc7b5ba43b5f1dfcf9cdb2534a32fcdbf0ccdd9a008b46276e45ef26ed9377f65b5e4ae89ea798f3863fd034484b5715140f3a7b35c
|
||||
DIST llvm-project-22.1.8.src.tar.xz.sig 119 BLAKE2B 2ce93472036e68782252991e4a8bdbeeec8706a56022220083a38a42ef18714a7894c41aaa04dc0d03f18601d8bfc1a5a030ed0ef0f0d64a662eae9843a4b362 SHA512 99a457b5b1fb409a5fe72b59ebd4ddae5cade3e5f2493e33b44d4f4b4625f7a1743f80106efb1134668842b15ea3400ce2c29263bec8ff986e05040910125e15
|
||||
DIST llvm-project-23.1.0-rc2.src.tar.xz 179079292 BLAKE2B 59b4ae719ca496b29e37c1150d2953062d00d696e847d16710b6719c63246cccfb50c6f6bf33e7723e2e3757c8b1cae51a3c6a6787b6d45c808c78902ac01c97 SHA512 9ca8d0aa34f2910abc06edb832831c1a66209e7e78cffabcc52113fe0d6d96af57f4f67788ae23026c0f3b91dc8f6224cb46dfa0f1bcc41a1f60cbad5ec1623d
|
||||
DIST llvm-project-23.1.0-rc2.src.tar.xz.sig 466 BLAKE2B c7acaa7f8833286cd0037c4c31ba8a1bb20f4a09b62979c7df9f69993728406b1a42db62d2ab2a34c526c0bdae1bc027074a623142420d2fc264c3f83e3c0f7b SHA512 7e2db57ed17efe3bf36c476049973b760af60c8a9302992a17e050e7a61db7b92df0b6c06f26989c61ce2e4682e7604bfdd0f063e322a726923e857890cedc8c
|
||||
DIST llvm-project-23.1.0-rc3.src.tar.xz 179126732 BLAKE2B f0843aacbf9ebd57929dbba0436773775dc121223ae3a81d1c30bd5a3ccba136359b9e483d2be58546dc6bf468743711d5057f8b1486e5ba4d59a96136426c3c SHA512 0c9bdf4c75784269bd4560d94126e667d1d145da2f6db4d94f437b2388880f3dcb52f85c0580d78e2597b141511a4b7ddadfc31f83b690d5cd383e84330ce247
|
||||
DIST llvm-project-23.1.0-rc3.src.tar.xz.sig 466 BLAKE2B c7bd61c1cab2bdb4c8026aa095f7543e7c2f50520531f3ca6bd8c0cb78b2a7770d39723cec6effe9366c260d01b0db2bfd072281790b63b7d0d8b48339f51c42 SHA512 751f602d29235d4ce58a0d38c23f360977cb9e978e04399b3032053e7168903a721d307f001864b73fef8f567023eebe8f4fdbf4124667789d0afaff57b01d7d
|
||||
DIST llvm-project-23.1.0.src.tar.xz 179140728 BLAKE2B 9253189469c70b1e7e326851635934fab85bf64139f1dcd44721ab261c097c9980276d48eac705b999cde0a024a362191c719646956504364534585dbf57d643 SHA512 f87a6084a4b4ddbf155949bb0a9d95592e665683d03db59c65002520634db57bb0b9e90011cbdf1dfc72bf2c649cebc5c546a1de4811c3bfc0b89620b1669061
|
||||
DIST llvm-project-23.1.0.src.tar.xz.sig 119 BLAKE2B 6bd4f681aa0926b3a8e896993fcb238749a5b29dd26f6637e5543699334c0818223d9c798da35515f27fd197cc7de370cc70de3e1bb6721e6c7cac3050879fc7 SHA512 3b1ffaf6fbc6ed08c1d0523b565fb63cbde1a76344bb3ed1a53722482927c03e2652859ef44de962ce90bdb7c5711db63f8d98559bc86cb58294a1cfc62e4b4f
|
||||
DIST llvm-project-bb9934d4dfef9033ded36d26827dbb6d3ac1dd92.tar.gz 277566365 BLAKE2B 401320655d19b3d430d15a48e2daf1f00567ef87fd2d1f86c3d505a1b2f5920db6cbfa620bf1b0561cd318d6046830d5b19fe0e7b58647863372c6c96526526c SHA512 354b901ca80227abe6b0514eeba437f237ea2658dd1927bb6e1d3b0b298bdb0dfdb7855c0f359eea4977dd344f6d0f6d1ce486ea0100d4a5615a9139ef198fca
|
||||
|
||||
@@ -1,572 +0,0 @@
|
||||
# Copyright 1999-2026 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
PYTHON_COMPAT=( python3_{12..14} )
|
||||
|
||||
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="
|
||||
virtual/zlib:=[${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? (
|
||||
<llvm-runtimes/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}
|
||||
!llvm-core/llvm:0
|
||||
"
|
||||
PDEPEND="
|
||||
llvm-core/llvm-common
|
||||
llvm-core/llvm-toolchain-symlinks:${LLVM_MAJOR}
|
||||
binutils-plugin? ( >=llvm-core/llvmgold-${LLVM_MAJOR} )
|
||||
"
|
||||
|
||||
LLVM_COMPONENTS=( llvm cmake libc mlir/utils/pygments third-party utils/docs )
|
||||
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|LLVMSupportLSP|LLVMTableGen)
|
||||
;;
|
||||
# for mlir-tblgen
|
||||
LLVMCodeGenTypes)
|
||||
;;
|
||||
# used by lldb
|
||||
LLVMDebuginfod|LLVMHTTP)
|
||||
;;
|
||||
# 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
|
||||
;;
|
||||
# used only w/ USE=xml
|
||||
llvm-mt)
|
||||
use xml || 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
|
||||
|
||||
# Disable lit tests (we run them in dev-python/lit).
|
||||
> utils/lit/CMakeLists.txt || 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
|
||||
# mlir-tblgen
|
||||
LLVMCodeGenTypes
|
||||
LLVMSupportLSP
|
||||
|
||||
# testing libraries
|
||||
llvm_gtest
|
||||
llvm_gtest_main
|
||||
LLVMTestingAnnotations
|
||||
LLVMTestingSupport
|
||||
)
|
||||
|
||||
if multilib_is_native_abi; then
|
||||
out+=(
|
||||
# library used by lldb
|
||||
LLVMDebuginfod
|
||||
LLVMHTTP
|
||||
|
||||
# utilities
|
||||
llvm-tblgen
|
||||
llvm-test-mustache-spec
|
||||
FileCheck
|
||||
llvm-PerfectShuffle
|
||||
count
|
||||
not
|
||||
yaml-bench
|
||||
UnicodeNameMappingGenerator
|
||||
|
||||
# tools
|
||||
clang-offload-packager
|
||||
dsymutil
|
||||
llc
|
||||
lli
|
||||
lli-child-target
|
||||
llubi
|
||||
llvm-addr2line
|
||||
llvm-ar
|
||||
llvm-as
|
||||
llvm-bcanalyzer
|
||||
llvm-bitcode-strip
|
||||
llvm-c-test
|
||||
llvm-cas
|
||||
llvm-cat
|
||||
llvm-cfi-verify
|
||||
llvm-cgdata
|
||||
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-extract-bundle-entry
|
||||
llvm-gpu-loader
|
||||
llvm-gsymutil
|
||||
llvm-ifs
|
||||
llvm-install-name-tool
|
||||
llvm-ir2vec
|
||||
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-ml64
|
||||
llvm-modextract
|
||||
llvm-nm
|
||||
llvm-objcopy
|
||||
llvm-objdump
|
||||
llvm-offload-binary
|
||||
llvm-offload-wrapper
|
||||
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
|
||||
)
|
||||
use xml && out+=(
|
||||
llvm-mt
|
||||
)
|
||||
fi
|
||||
|
||||
printf "%s${sep}" "${out[@]}"
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
# 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_UNREACHABLE_OPTIMIZE=OFF
|
||||
|
||||
-DLLVM_HOST_TRIPLE="${CHOST}"
|
||||
|
||||
-DPython3_EXECUTABLE="${PYTHON}"
|
||||
|
||||
# disable OCaml bindings (now in dev-ml/llvm)
|
||||
-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,572 +0,0 @@
|
||||
# Copyright 1999-2026 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
PYTHON_COMPAT=( python3_{12..14} )
|
||||
|
||||
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="
|
||||
virtual/zlib:=[${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? (
|
||||
<llvm-runtimes/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}
|
||||
!llvm-core/llvm:0
|
||||
"
|
||||
PDEPEND="
|
||||
llvm-core/llvm-common
|
||||
llvm-core/llvm-toolchain-symlinks:${LLVM_MAJOR}
|
||||
binutils-plugin? ( >=llvm-core/llvmgold-${LLVM_MAJOR} )
|
||||
"
|
||||
|
||||
LLVM_COMPONENTS=( llvm cmake libc mlir/utils/pygments third-party utils/docs )
|
||||
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|LLVMSupportLSP|LLVMTableGen)
|
||||
;;
|
||||
# for mlir-tblgen
|
||||
LLVMCodeGenTypes)
|
||||
;;
|
||||
# used by lldb
|
||||
LLVMDebuginfod|LLVMHTTP)
|
||||
;;
|
||||
# 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
|
||||
;;
|
||||
# used only w/ USE=xml
|
||||
llvm-mt)
|
||||
use xml || 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
|
||||
|
||||
# Disable lit tests (we run them in dev-python/lit).
|
||||
> utils/lit/CMakeLists.txt || 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
|
||||
# mlir-tblgen
|
||||
LLVMCodeGenTypes
|
||||
LLVMSupportLSP
|
||||
|
||||
# testing libraries
|
||||
llvm_gtest
|
||||
llvm_gtest_main
|
||||
LLVMTestingAnnotations
|
||||
LLVMTestingSupport
|
||||
)
|
||||
|
||||
if multilib_is_native_abi; then
|
||||
out+=(
|
||||
# library used by lldb
|
||||
LLVMDebuginfod
|
||||
LLVMHTTP
|
||||
|
||||
# utilities
|
||||
llvm-tblgen
|
||||
llvm-test-mustache-spec
|
||||
FileCheck
|
||||
llvm-PerfectShuffle
|
||||
count
|
||||
not
|
||||
yaml-bench
|
||||
UnicodeNameMappingGenerator
|
||||
|
||||
# tools
|
||||
clang-offload-packager
|
||||
dsymutil
|
||||
llc
|
||||
lli
|
||||
lli-child-target
|
||||
llubi
|
||||
llvm-addr2line
|
||||
llvm-ar
|
||||
llvm-as
|
||||
llvm-bcanalyzer
|
||||
llvm-bitcode-strip
|
||||
llvm-c-test
|
||||
llvm-cas
|
||||
llvm-cat
|
||||
llvm-cfi-verify
|
||||
llvm-cgdata
|
||||
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-extract-bundle-entry
|
||||
llvm-gpu-loader
|
||||
llvm-gsymutil
|
||||
llvm-ifs
|
||||
llvm-install-name-tool
|
||||
llvm-ir2vec
|
||||
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-ml64
|
||||
llvm-modextract
|
||||
llvm-nm
|
||||
llvm-objcopy
|
||||
llvm-objdump
|
||||
llvm-offload-binary
|
||||
llvm-offload-wrapper
|
||||
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
|
||||
)
|
||||
use xml && out+=(
|
||||
llvm-mt
|
||||
)
|
||||
fi
|
||||
|
||||
printf "%s${sep}" "${out[@]}"
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
# 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_UNREACHABLE_OPTIMIZE=OFF
|
||||
|
||||
-DLLVM_HOST_TRIPLE="${CHOST}"
|
||||
|
||||
-DPython3_EXECUTABLE="${PYTHON}"
|
||||
|
||||
# disable OCaml bindings (now in dev-ml/llvm)
|
||||
-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,572 +0,0 @@
|
||||
# Copyright 1999-2026 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
PYTHON_COMPAT=( python3_{12..14} )
|
||||
|
||||
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="
|
||||
virtual/zlib:=[${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? (
|
||||
<llvm-runtimes/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}
|
||||
!llvm-core/llvm:0
|
||||
"
|
||||
PDEPEND="
|
||||
llvm-core/llvm-common
|
||||
llvm-core/llvm-toolchain-symlinks:${LLVM_MAJOR}
|
||||
binutils-plugin? ( >=llvm-core/llvmgold-${LLVM_MAJOR} )
|
||||
"
|
||||
|
||||
LLVM_COMPONENTS=( llvm cmake libc mlir/utils/pygments third-party utils/docs )
|
||||
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|LLVMSupportLSP|LLVMTableGen)
|
||||
;;
|
||||
# for mlir-tblgen
|
||||
LLVMCodeGenTypes)
|
||||
;;
|
||||
# used by lldb
|
||||
LLVMDebuginfod|LLVMHTTP)
|
||||
;;
|
||||
# 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
|
||||
;;
|
||||
# used only w/ USE=xml
|
||||
llvm-mt)
|
||||
use xml || 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
|
||||
|
||||
# Disable lit tests (we run them in dev-python/lit).
|
||||
> utils/lit/CMakeLists.txt || 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
|
||||
# mlir-tblgen
|
||||
LLVMCodeGenTypes
|
||||
LLVMSupportLSP
|
||||
|
||||
# testing libraries
|
||||
llvm_gtest
|
||||
llvm_gtest_main
|
||||
LLVMTestingAnnotations
|
||||
LLVMTestingSupport
|
||||
)
|
||||
|
||||
if multilib_is_native_abi; then
|
||||
out+=(
|
||||
# library used by lldb
|
||||
LLVMDebuginfod
|
||||
LLVMHTTP
|
||||
|
||||
# utilities
|
||||
llvm-tblgen
|
||||
llvm-test-mustache-spec
|
||||
FileCheck
|
||||
llvm-PerfectShuffle
|
||||
count
|
||||
not
|
||||
yaml-bench
|
||||
UnicodeNameMappingGenerator
|
||||
|
||||
# tools
|
||||
clang-offload-packager
|
||||
dsymutil
|
||||
llc
|
||||
lli
|
||||
lli-child-target
|
||||
llubi
|
||||
llvm-addr2line
|
||||
llvm-ar
|
||||
llvm-as
|
||||
llvm-bcanalyzer
|
||||
llvm-bitcode-strip
|
||||
llvm-c-test
|
||||
llvm-cas
|
||||
llvm-cat
|
||||
llvm-cfi-verify
|
||||
llvm-cgdata
|
||||
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-extract-bundle-entry
|
||||
llvm-gpu-loader
|
||||
llvm-gsymutil
|
||||
llvm-ifs
|
||||
llvm-install-name-tool
|
||||
llvm-ir2vec
|
||||
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-ml64
|
||||
llvm-modextract
|
||||
llvm-nm
|
||||
llvm-objcopy
|
||||
llvm-objdump
|
||||
llvm-offload-binary
|
||||
llvm-offload-wrapper
|
||||
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
|
||||
)
|
||||
use xml && out+=(
|
||||
llvm-mt
|
||||
)
|
||||
fi
|
||||
|
||||
printf "%s${sep}" "${out[@]}"
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
# 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_UNREACHABLE_OPTIMIZE=OFF
|
||||
|
||||
-DLLVM_HOST_TRIPLE="${CHOST}"
|
||||
|
||||
-DPython3_EXECUTABLE="${PYTHON}"
|
||||
|
||||
# disable OCaml bindings (now in dev-ml/llvm)
|
||||
-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