llvm-core/llvm: Add 24.0.0_pre20260916 snapshot

Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
Michał Górny
2026-09-16 20:57:20 +02:00
parent 3025c1f09e
commit 44f6092f91
2 changed files with 576 additions and 0 deletions

View File

@@ -6,6 +6,7 @@ DIST llvm-21.1.0-manpages.tar.xz 303556 BLAKE2B 93e844bb13826e0154a24bfcdc108c9e
DIST llvm-22.1.0-r2-manpages.tar.xz 320124 BLAKE2B 7a54177781e84d5e0f788a3ebc00f9417b943e14d8c462a859c5267f87bb8c9ed5132000d069b6cbab089411d025852af3b35fd7ace0a1f0f606bee210f9e8e5 SHA512 cdf986c1927436e49ef0b5a02b5fc08473bad4aeef11164119824ef02afb8c5513a19e1d0bed2211ba259ef2d331f833daf9543d030e56d02407ef3efdb74196
DIST llvm-gentoo-patchset-17.0.6-r5.tar.xz 7256 BLAKE2B d0f3f7df4ee38fbcd236225e9b64e313a1d4bae8d8eff0473fe50e20e79e0e161af418eb4a56e29e5b188cb17cd12c43bc42716d390286f6ab42d45b86b7a040 SHA512 70ca00b79e927931edfe905688f82b744443675c8b6ad7b5a962636629ea73d778dbf7a43c4947f05773eb04cdc0c1a64fe9d0e41d46ef04237b95bfc076740f
DIST llvm-gentoo-patchset-18.1.8-r8.tar.xz 27220 BLAKE2B 2bf71ea769ebe61c863a52a891743d705f313d41416d02614deb9f5e8bffec3a22b3c681d3cee4b4a4da224943d1015f061562d379f7d3934f4e9196ef6feeb4 SHA512 08264c6a5ae30666d6e18c74cb9cd706317157d5cb9b31f35c6807b9396f733dc80ba957c711bf20e2a4388f2ef8ba620e82598fa779922accb50dad7db23eb3
DIST llvm-project-02bd47db9d3c4313fe1b5054ed8a1a081f1b7f78.tar.gz 317069647 BLAKE2B 02c38822ff7b312014da03ec45146cc9b24d040c2b11631023b77dd1ad3ab1ebc9d8fd1dccf35ed682a78a39726d97c04e132b6a25a6a9aa8455d7b73ff0d169 SHA512 3cd7d8088958c5bcdc20f8288452060dfade7e2f4d3350e7073678c87b97a9a74907dc89b44cf5ad272600704c5002f4b76d7988283ddfce234bc8a5b40212db
DIST llvm-project-0bf3638ddfe6e8bb3b79ebe8c2a918384a5df612.tar.gz 278258416 BLAKE2B 85007e0dfc4d5908c2fb0863923ef86e6a6c0d4302da6cbefd97097d6c19066234ca76a06af1c404aab7c3fe85ba6d9ac08aca5343b5f24fc3727dde1de2245e SHA512 91c6bab8974b95725cb70d2e3bef5abc5358e6836fe00c6348d4a886914b424fb49e9b0a85cf67af7b3a8f0c863d33d22fe74fffc63da813d7d63e3e0e32cf85
DIST llvm-project-17.0.6.src.tar.xz 127838860 BLAKE2B d6ede1a9fda8756995c3e0654111941649e15794179641806f18919f1dc68c41ca0cabd5693b5096d05dccc3a391cd20d34af1137bf8af92ed3117a1ce84d1b2 SHA512 6d85bf749e0d77553cc215cbfa61cec4ac4f4f652847f56f946b6a892a99a5ea40b6ab8b39a9708a035001f007986941ccf17e4635260a8b0c1fa59e78d41e30
DIST llvm-project-17.0.6.src.tar.xz.sig 438 BLAKE2B 186e75b6a0fbfe1e85408589c149e1800fcc47d685b74e4260018e05cd08bc793d1d1197c9c50e177eea941a3d0c65cb0c583ce6dae449099b920adf8a508ef7 SHA512 f78c55053a6450625f3e95f52c305110b4468a9854fec75831b65b8d6ceee3c9206ab9e63c4b5fda8be9bd344f72cfbdaae0520ed240abd505e08ebeaa25d340

View File

@@ -0,0 +1,575 @@
# 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-calc-occupancy
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-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
# https://github.com/llvm/llvm-project/issues/219693
append-flags -fno-strict-aliasing
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)"
}