| 3 |
3 |
|
| 4 |
4 |
EAPI=8
|
| 5 |
5 |
|
| 6 |
|
PYTHON_COMPAT=( python3_12 )
|
|
6 |
PYTHON_COMPAT=( python3_{12..14} )
|
| 7 |
7 |
|
| 8 |
|
inherit cmake flag-o-matic llvm llvm.org multilib multilib-minimal
|
|
8 |
inherit cmake llvm.org multilib multilib-minimal
|
| 9 |
9 |
inherit prefix python-single-r1 toolchain-funcs
|
| 10 |
10 |
|
| 11 |
11 |
DESCRIPTION="C language family frontend for LLVM"
|
| ... | ... | |
| 16 |
16 |
|
| 17 |
17 |
LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA MIT"
|
| 18 |
18 |
SLOT="${LLVM_MAJOR}/${LLVM_SOABI}"
|
| 19 |
|
KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv ~sparc x86 ~arm64-macos ~x64-macos"
|
|
19 |
KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86 ~arm64-macos ~x64-macos"
|
| 20 |
20 |
IUSE="debug doc +extra ieee-long-double +pie +static-analyzer test xml"
|
| 21 |
21 |
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
|
| 22 |
22 |
RESTRICT="!test? ( test )"
|
| ... | ... | |
| 31 |
31 |
${PYTHON_DEPS}
|
| 32 |
32 |
${DEPEND}
|
| 33 |
33 |
>=llvm-core/clang-common-${PV}
|
|
34 |
!<llvm-core/llvm-22.1.0-r2:22
|
| 34 |
35 |
"
|
| 35 |
36 |
BDEPEND="
|
| 36 |
37 |
${PYTHON_DEPS}
|
| 37 |
|
doc? ( $(python_gen_cond_dep '
|
| 38 |
|
dev-python/recommonmark[${PYTHON_USEDEP}]
|
| 39 |
|
dev-python/sphinx[${PYTHON_USEDEP}]
|
| 40 |
|
') )
|
|
38 |
test? ( ~llvm-core/lld-${PV} )
|
| 41 |
39 |
xml? ( virtual/pkgconfig )
|
| 42 |
40 |
"
|
| 43 |
41 |
PDEPEND="
|
| 44 |
|
~llvm-runtimes/clang-runtime-${PV}
|
|
42 |
llvm-runtimes/clang-runtime:${LLVM_MAJOR}
|
| 45 |
43 |
llvm-core/clang-toolchain-symlinks:${LLVM_MAJOR}
|
| 46 |
44 |
"
|
| 47 |
45 |
|
| 48 |
46 |
LLVM_COMPONENTS=(
|
| 49 |
47 |
clang clang-tools-extra cmake
|
| 50 |
|
llvm/lib/Transforms/Hello
|
| 51 |
48 |
)
|
| 52 |
49 |
LLVM_MANPAGES=1
|
| 53 |
50 |
LLVM_TEST_COMPONENTS=(
|
| 54 |
|
llvm/lib/Testing
|
| 55 |
51 |
llvm/utils
|
| 56 |
|
third-party
|
| 57 |
52 |
)
|
| 58 |
|
LLVM_PATCHSET=${PV}-r6
|
| 59 |
|
LLVM_USE_TARGETS=llvm
|
|
53 |
LLVM_USE_TARGETS=llvm+eq
|
| 60 |
54 |
llvm.org_set_globals
|
| 61 |
55 |
|
|
56 |
[[ -n ${LLVM_MANPAGE_DIST} ]] && BDEPEND+=" doc? ( "
|
|
57 |
BDEPEND+="
|
|
58 |
$(python_gen_cond_dep '
|
|
59 |
dev-python/myst-parser[${PYTHON_USEDEP}]
|
|
60 |
dev-python/sphinx[${PYTHON_USEDEP}]
|
|
61 |
')
|
|
62 |
"
|
|
63 |
[[ -n ${LLVM_MANPAGE_DIST} ]] && BDEPEND+=" ) "
|
|
64 |
|
| 62 |
65 |
# Multilib notes:
|
| 63 |
66 |
# 1. ABI_* flags control ABIs libclang* is built for only.
|
| 64 |
67 |
# 2. clang is always capable of compiling code for all ABIs for enabled
|
| ... | ... | |
| 70 |
73 |
# Therefore: use llvm-core/clang[${MULTILIB_USEDEP}] only if you need
|
| 71 |
74 |
# multilib clang* libraries (not runtime, not wrappers).
|
| 72 |
75 |
|
| 73 |
|
pkg_setup() {
|
| 74 |
|
LLVM_MAX_SLOT=${LLVM_MAJOR} llvm_pkg_setup
|
| 75 |
|
python-single-r1_pkg_setup
|
| 76 |
|
}
|
| 77 |
|
|
| 78 |
76 |
src_prepare() {
|
| 79 |
77 |
# create extra parent dir for relative CLANG_RESOURCE_DIR access
|
| 80 |
78 |
mkdir -p x/y || die
|
| ... | ... | |
| 118 |
116 |
docs-clang-html|docs-clang-tools-html)
|
| 119 |
117 |
use doc || continue
|
| 120 |
118 |
;;
|
|
119 |
# built only with tests
|
|
120 |
c-index-test)
|
|
121 |
continue
|
|
122 |
;;
|
| 121 |
123 |
esac
|
| 122 |
124 |
|
| 123 |
125 |
all_targets+=( "${l}" )
|
| ... | ... | |
| 141 |
143 |
done
|
| 142 |
144 |
|
| 143 |
145 |
if [[ ${#add[@]} -gt 0 || ${#remove[@]} -gt 0 ]]; then
|
| 144 |
|
eqawarn "get_distribution_components() is outdated!"
|
| 145 |
|
eqawarn " Add: ${add[*]}"
|
| 146 |
|
eqawarn "Remove: ${remove[*]}"
|
|
146 |
eerror "get_distribution_components() is outdated!"
|
|
147 |
eerror " Add: ${add[*]}"
|
|
148 |
eerror "Remove: ${remove[*]}"
|
|
149 |
die "Update get_distribution_components()!"
|
| 147 |
150 |
fi
|
| 148 |
151 |
cd - >/dev/null || die
|
| 149 |
152 |
fi
|
| ... | ... | |
| 173 |
176 |
ppc-htm-resource-headers
|
| 174 |
177 |
ppc-resource-headers
|
| 175 |
178 |
riscv-resource-headers
|
|
179 |
spirv-resource-headers
|
| 176 |
180 |
systemz-resource-headers
|
| 177 |
181 |
utility-resource-headers
|
| 178 |
182 |
ve-resource-headers
|
| ... | ... | |
| 192 |
196 |
libclang-python-bindings
|
| 193 |
197 |
|
| 194 |
198 |
# tools
|
| 195 |
|
amdgpu-arch
|
| 196 |
|
c-index-test
|
| 197 |
199 |
clang
|
| 198 |
200 |
clang-format
|
|
201 |
clang-installapi
|
| 199 |
202 |
clang-linker-wrapper
|
|
203 |
clang-nvlink-wrapper
|
| 200 |
204 |
clang-offload-bundler
|
| 201 |
|
clang-offload-packager
|
| 202 |
205 |
clang-refactor
|
| 203 |
206 |
clang-repl
|
| 204 |
|
clang-rename
|
| 205 |
207 |
clang-scan-deps
|
|
208 |
clang-sycl-linker
|
| 206 |
209 |
diagtool
|
| 207 |
210 |
hmaptool
|
| 208 |
|
nvptx-arch
|
|
211 |
offload-arch
|
| 209 |
212 |
|
| 210 |
213 |
# needed for cross-compiling Clang
|
| 211 |
214 |
clang-tblgen
|
| ... | ... | |
| 220 |
223 |
clang-include-cleaner
|
| 221 |
224 |
clang-include-fixer
|
| 222 |
225 |
clang-move
|
| 223 |
|
clang-pseudo
|
| 224 |
226 |
clang-query
|
| 225 |
227 |
clang-reorder-fields
|
| 226 |
228 |
clang-tidy
|
| ... | ... | |
| 230 |
232 |
modularize
|
| 231 |
233 |
pp-trace
|
| 232 |
234 |
)
|
|
235 |
|
|
236 |
use kernel_Darwin && out+=( ClangdXPCLib )
|
| 233 |
237 |
fi
|
| 234 |
238 |
|
| 235 |
239 |
if llvm_are_manpages_built; then
|
| ... | ... | |
| 255 |
259 |
}
|
| 256 |
260 |
|
| 257 |
261 |
multilib_src_configure() {
|
| 258 |
|
tc-is-gcc && filter-lto # GCC miscompiles LLVM, bug #873670
|
| 259 |
|
|
| 260 |
262 |
local mycmakeargs=(
|
| 261 |
263 |
-DDEFAULT_SYSROOT=$(usex prefix-guest "" "${EPREFIX}")
|
| 262 |
264 |
-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}"
|
| 263 |
265 |
-DCMAKE_INSTALL_MANDIR="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/share/man"
|
|
266 |
-DLLVM_ROOT="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}"
|
| 264 |
267 |
-DCLANG_CONFIG_FILE_SYSTEM_DIR="${EPREFIX}/etc/clang/${LLVM_MAJOR}"
|
|
268 |
-DCLANG_CONFIG_FILE_USER_DIR="~/.config/clang"
|
| 265 |
269 |
# relative to bindir
|
| 266 |
270 |
-DCLANG_RESOURCE_DIR="../../../../lib/clang/${LLVM_MAJOR}"
|
| 267 |
271 |
|
| ... | ... | |
| 276 |
280 |
-DLLVM_ENABLE_EH=ON
|
| 277 |
281 |
-DLLVM_ENABLE_RTTI=ON
|
| 278 |
282 |
|
| 279 |
|
-DCMAKE_DISABLE_FIND_PACKAGE_LibXml2=$(usex !xml)
|
| 280 |
283 |
# libgomp support fails to find headers without explicit -I
|
| 281 |
284 |
# furthermore, it provides only syntax checking
|
| 282 |
285 |
-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp
|
| 283 |
286 |
|
| 284 |
|
# disable using CUDA to autodetect GPU, just build for all
|
| 285 |
|
-DCMAKE_DISABLE_FIND_PACKAGE_CUDA=ON
|
| 286 |
|
# disable linking to HSA to avoid automagic dep,
|
| 287 |
|
# load it dynamically instead
|
| 288 |
|
-DCMAKE_DISABLE_FIND_PACKAGE_hsa-runtime64=ON
|
| 289 |
|
|
| 290 |
287 |
-DCLANG_DEFAULT_PIE_ON_LINUX=$(usex pie)
|
| 291 |
288 |
|
| 292 |
|
-DCLANG_ENABLE_ARCMT=$(usex static-analyzer)
|
|
289 |
-DCLANG_ENABLE_LIBXML2=$(usex xml)
|
|
290 |
-DCLANG_ENABLE_OBJC_REWRITER=ON
|
| 293 |
291 |
-DCLANG_ENABLE_STATIC_ANALYZER=$(usex static-analyzer)
|
|
292 |
# TODO: CLANG_ENABLE_HLSL?
|
| 294 |
293 |
|
| 295 |
294 |
-DPython3_EXECUTABLE="${PYTHON}"
|
| 296 |
295 |
)
|
| ... | ... | |
| 337 |
336 |
)
|
| 338 |
337 |
fi
|
| 339 |
338 |
|
| 340 |
|
if [[ -n ${EPREFIX} ]]; then
|
| 341 |
|
mycmakeargs+=(
|
| 342 |
|
-DGCC_INSTALL_PREFIX="${EPREFIX}/usr"
|
| 343 |
|
)
|
| 344 |
|
fi
|
| 345 |
|
|
| 346 |
339 |
if tc-is-cross-compiler; then
|
| 347 |
340 |
has_version -b llvm-core/clang:${LLVM_MAJOR} ||
|
| 348 |
341 |
die "llvm-core/clang:${LLVM_MAJOR} is required on the build host."
|
| ... | ... | |
| 366 |
359 |
|
| 367 |
360 |
multilib_src_compile() {
|
| 368 |
361 |
cmake_build distribution
|
| 369 |
|
|
| 370 |
|
# provide a symlink for tests
|
| 371 |
|
if [[ ! -L ${WORKDIR}/lib/clang ]]; then
|
| 372 |
|
mkdir -p "${WORKDIR}"/lib || die
|
| 373 |
|
ln -s "${BUILD_DIR}/$(get_libdir)/clang" "${WORKDIR}"/lib/clang || die
|
| 374 |
|
fi
|
| 375 |
362 |
}
|
| 376 |
363 |
|
| 377 |
364 |
multilib_src_test() {
|
| ... | ... | |
| 440 |
427 |
# (also drop the version suffix from runtime headers)
|
| 441 |
428 |
rm -rf "${ED}"/usr/include || die
|
| 442 |
429 |
mv "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/include "${ED}"/usr/include || die
|
| 443 |
|
mv "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/$(get_libdir)/clang "${ED}"/usr/include/clangrt || die
|
|
430 |
mv "${ED}"/usr/lib/clang "${ED}"/usr/include/clangrt || die
|
| 444 |
431 |
if multilib_native_use extra; then
|
| 445 |
432 |
# don't wrap clang-tidy headers, the list is too long
|
| 446 |
433 |
# (they're fine for non-native ABI but enabling the targets is problematic)
|