Gentoo Archives: gentoo-commits

From: "Michał Górny" <mgorny@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: sys-devel/llvm/
Date: Mon, 29 Jun 2020 18:37:46
Message-Id: 1593455844.b01acc75883bd7b2ccb8a5da71dccf3ec11d95be.mgorny@gentoo
1 commit: b01acc75883bd7b2ccb8a5da71dccf3ec11d95be
2 Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
3 AuthorDate: Mon Jun 29 15:20:45 2020 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Mon Jun 29 18:37:24 2020 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b01acc75
7
8 sys-devel/llvm: Bump to 10.0.1-rc2
9
10 Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
11
12 sys-devel/llvm/Manifest | 1 +
13 sys-devel/llvm/llvm-10.0.1_rc2.ebuild | 477 ++++++++++++++++++++++++++++++++++
14 2 files changed, 478 insertions(+)
15
16 diff --git a/sys-devel/llvm/Manifest b/sys-devel/llvm/Manifest
17 index 89ab271e234..9370f9240c7 100644
18 --- a/sys-devel/llvm/Manifest
19 +++ b/sys-devel/llvm/Manifest
20 @@ -4,4 +4,5 @@ DIST llvm-8.0.1.src.tar.xz 30477608 BLAKE2B 4319c837b36111401e3b0f9659b8d875c894
21 DIST llvm-9.0.0-manpages.tar.bz2 158546 BLAKE2B eed6235698a0b5993affe305f7fd22cd4cf444adf931275a1685f2049a5f17cf2933907577d9ce142348a3c579769b0436aa2b5a9a953958504125a8c3e83b7d SHA512 64c8d18061eb2870b379a1df485be0b61eac07cb10b3f97347b54b2ee326faa63437ca04466776be282e120dd3f6147e14fffdd38ca370db85748fe5eb54d764
22 DIST llvmorg-10.0.0.tar.gz 120804856 BLAKE2B 6b0254f5b913398cdcf2b2ec1ff219888706d2b79d5296590934714e42ac79f6a6547941ac2b1d2c4e6313dd18b6c7068e748aa6ac033e49fccbf5d355aa8191 SHA512 baa182d62fef1851836013ae8a1a00861ea89769778d67fb97b407a9de664e6c85da2af9c5b3f75d2bf34ff6b00004e531ca7e4b3115a26c0e61c575cf2303a0
23 DIST llvmorg-10.0.1-rc1.tar.gz 120834583 BLAKE2B 64244ebcb6f2c171c9f606e5eb0adff2794f06c9312a0ca627fb79c107c0c898ac242cf4e92523c3265fa717322601d7e3f4d178515fac95d03ee92312082b06 SHA512 f877f66046969a4055b166ad50ef876a9c8ecaf03e2cdd7c8e1a3348eb5f5180f222fa457b1f090a6660282a0d9f7a1d39cf09a04abe0dde0a6e1e10ccf15597
24 +DIST llvmorg-10.0.1-rc2.tar.gz 120883192 BLAKE2B d48f4ccb33691cd4997576a6d20b298455687515164f7d8dfa11ec32e197b58132c6bd549c1214c3b36982ef85e1018d4101e7afecee8d2ab67ad15d68c681bf SHA512 8e363d379a73e38ef570fb03d8243a21f37a48ef579a0f08118af4dac48060c0dc24e2bd8175f04241fa424e49b6c85723d2d3552bbe30dd165fe5fb43493325
25 DIST llvmorg-9.0.1.tar.gz 113193320 BLAKE2B b86e405f2b8e00436045fd409fe19cdde75c797b1192c62a22b5ec75e6b4dc8e874a0f33008dc31562445e4cbe53a992b6f48c684255a6a1ef261e595b8b161f SHA512 fa88beeaae94b6d0cd9b5ba38658d0ffed8004035d7d8a4f95c3d31a709b88b581ae9bd7761333c8e5375c44b8f6be01768b5a3be901163159d7e6c43b71da59
26
27 diff --git a/sys-devel/llvm/llvm-10.0.1_rc2.ebuild b/sys-devel/llvm/llvm-10.0.1_rc2.ebuild
28 new file mode 100644
29 index 00000000000..bc805c1b4d3
30 --- /dev/null
31 +++ b/sys-devel/llvm/llvm-10.0.1_rc2.ebuild
32 @@ -0,0 +1,477 @@
33 +# Copyright 1999-2020 Gentoo Authors
34 +# Distributed under the terms of the GNU General Public License v2
35 +
36 +EAPI=7
37 +
38 +PYTHON_COMPAT=( python3_{6..9} )
39 +inherit cmake llvm.org multilib-minimal pax-utils python-any-r1 \
40 + toolchain-funcs
41 +
42 +DESCRIPTION="Low Level Virtual Machine"
43 +HOMEPAGE="https://llvm.org/"
44 +LLVM_COMPONENTS=( llvm )
45 +llvm.org_set_globals
46 +
47 +# Those are in lib/Targets, without explicit CMakeLists.txt mention
48 +ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC AVR )
49 +# Keep in sync with CMakeLists.txt
50 +ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM BPF Hexagon Lanai Mips MSP430
51 + NVPTX PowerPC RISCV Sparc SystemZ WebAssembly X86 XCore
52 + "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}" )
53 +ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
54 +
55 +# Additional licenses:
56 +# 1. OpenBSD regex: Henry Spencer's license ('rc' in Gentoo) + BSD.
57 +# 2. xxhash: BSD.
58 +# 3. MD5 code: public-domain.
59 +# 4. ConvertUTF.h: TODO.
60 +
61 +LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA BSD public-domain rc"
62 +SLOT="$(ver_cut 1)"
63 +KEYWORDS=""
64 +IUSE="debug doc exegesis gold libedit +libffi ncurses test xar xml z3
65 + kernel_Darwin ${ALL_LLVM_TARGETS[*]}"
66 +REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )"
67 +RESTRICT="!test? ( test )"
68 +
69 +RDEPEND="
70 + sys-libs/zlib:0=[${MULTILIB_USEDEP}]
71 + exegesis? ( dev-libs/libpfm:= )
72 + gold? (
73 + || (
74 + >=sys-devel/binutils-2.31.1-r4:*[plugins]
75 + <sys-devel/binutils-2.31.1-r4:*[cxx]
76 + )
77 + )
78 + libedit? ( dev-libs/libedit:0=[${MULTILIB_USEDEP}] )
79 + libffi? ( >=dev-libs/libffi-3.0.13-r1:0=[${MULTILIB_USEDEP}] )
80 + ncurses? ( >=sys-libs/ncurses-5.9-r3:0=[${MULTILIB_USEDEP}] )
81 + xar? ( app-arch/xar )
82 + xml? ( dev-libs/libxml2:2=[${MULTILIB_USEDEP}] )
83 + z3? ( >=sci-mathematics/z3-4.7.1:0=[${MULTILIB_USEDEP}] )"
84 +DEPEND="${RDEPEND}
85 + gold? ( sys-libs/binutils-libs )"
86 +BDEPEND="
87 + dev-lang/perl
88 + sys-devel/gnuconfig
89 + kernel_Darwin? (
90 + <sys-libs/libcxx-$(ver_cut 1-3).9999
91 + >=sys-devel/binutils-apple-5.1
92 + )
93 + libffi? ( virtual/pkgconfig )
94 + $(python_gen_any_dep '
95 + dev-python/sphinx[${PYTHON_USEDEP}]
96 + doc? ( dev-python/recommonmark[${PYTHON_USEDEP}] )
97 + ')"
98 +# There are no file collisions between these versions but having :0
99 +# installed means llvm-config there will take precedence.
100 +RDEPEND="${RDEPEND}
101 + !sys-devel/llvm:0"
102 +PDEPEND="sys-devel/llvm-common
103 + gold? ( >=sys-devel/llvmgold-${SLOT} )"
104 +
105 +PATCHES=(
106 + # Fix linking to dylib and .a libs simultaneously
107 + "${FILESDIR}"/10.0.1/0001-llvm-Avoid-linking-llvm-cfi-verify-to-duplicate-libs.patch
108 + "${FILESDIR}"/10.0.1/0002-llvm-Disable-linking-llvm-exegesis-to-dylib.patch
109 +)
110 +
111 +python_check_deps() {
112 + if use doc; then
113 + has_version -b "dev-python/recommonmark[${PYTHON_USEDEP}]" ||
114 + return 1
115 + fi
116 + has_version -b "dev-python/sphinx[${PYTHON_USEDEP}]"
117 +}
118 +
119 +check_distribution_components() {
120 + if [[ ${CMAKE_MAKEFILE_GENERATOR} == ninja ]]; then
121 + local all_targets=() my_targets=() l
122 + cd "${BUILD_DIR}" || die
123 +
124 + while read -r l; do
125 + if [[ ${l} == install-*-stripped:* ]]; then
126 + l=${l#install-}
127 + l=${l%%-stripped*}
128 +
129 + case ${l} in
130 + # shared libs
131 + LLVM|LLVMgold)
132 + ;;
133 + # TableGen lib + deps
134 + LLVMDemangle|LLVMSupport|LLVMTableGen)
135 + ;;
136 + # static libs
137 + LLVM*)
138 + continue
139 + ;;
140 + # meta-targets
141 + distribution|llvm-libraries)
142 + continue
143 + ;;
144 + # used only w/ USE=doc
145 + docs-llvm-html)
146 + continue
147 + ;;
148 + esac
149 +
150 + all_targets+=( "${l}" )
151 + fi
152 + done < <(ninja -t targets all)
153 +
154 + while read -r l; do
155 + my_targets+=( "${l}" )
156 + done < <(get_distribution_components $"\n")
157 +
158 + local add=() remove=()
159 + for l in "${all_targets[@]}"; do
160 + if ! has "${l}" "${my_targets[@]}"; then
161 + add+=( "${l}" )
162 + fi
163 + done
164 + for l in "${my_targets[@]}"; do
165 + if ! has "${l}" "${all_targets[@]}"; then
166 + remove+=( "${l}" )
167 + fi
168 + done
169 +
170 + if [[ ${#add[@]} -gt 0 || ${#remove[@]} -gt 0 ]]; then
171 + eqawarn "get_distribution_components() is outdated!"
172 + eqawarn " Add: ${add[*]}"
173 + eqawarn "Remove: ${remove[*]}"
174 + fi
175 + cd - >/dev/null || die
176 + fi
177 +}
178 +
179 +src_prepare() {
180 + # Fix llvm-config for shared linking and sane flags
181 + # https://bugs.gentoo.org/show_bug.cgi?id=565358
182 + eapply "${FILESDIR}"/9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch
183 +
184 + # disable use of SDK on OSX, bug #568758
185 + sed -i -e 's/xcrun/false/' utils/lit/lit/util.py || die
186 +
187 + # Update config.guess to support more systems
188 + cp "${BROOT}/usr/share/gnuconfig/config.guess" cmake/ || die
189 +
190 + # manpages don't use markdown
191 + if ! use doc; then
192 + sed -i -e '/source_parsers/d' docs/conf.py || die
193 + fi
194 +
195 + llvm.org_src_prepare
196 +}
197 +
198 +# Is LLVM being linked against libc++?
199 +is_libcxx_linked() {
200 + local code='#include <ciso646>
201 +#if defined(_LIBCPP_VERSION)
202 + HAVE_LIBCXX
203 +#endif
204 +'
205 + local out=$($(tc-getCXX) ${CXXFLAGS} ${CPPFLAGS} -x c++ -E -P - <<<"${code}") || return 1
206 +
207 + [[ ${out} == *HAVE_LIBCXX* ]]
208 +}
209 +
210 +get_distribution_components() {
211 + local sep=${1-;}
212 +
213 + local out=(
214 + # shared libs
215 + LLVM
216 + LTO
217 + Remarks
218 +
219 + # tools
220 + llvm-config
221 +
222 + # common stuff
223 + cmake-exports
224 + llvm-headers
225 +
226 + # libraries needed for clang-tblgen
227 + LLVMDemangle
228 + LLVMSupport
229 + LLVMTableGen
230 + )
231 +
232 + if multilib_is_native_abi; then
233 + out+=(
234 + # utilities
235 + llvm-tblgen
236 + FileCheck
237 + llvm-PerfectShuffle
238 + count
239 + not
240 + yaml-bench
241 +
242 + # tools
243 + bugpoint
244 + dsymutil
245 + llc
246 + lli
247 + lli-child-target
248 + llvm-addr2line
249 + llvm-ar
250 + llvm-as
251 + llvm-bcanalyzer
252 + llvm-c-test
253 + llvm-cat
254 + llvm-cfi-verify
255 + llvm-config
256 + llvm-cov
257 + llvm-cvtres
258 + llvm-cxxdump
259 + llvm-cxxfilt
260 + llvm-cxxmap
261 + llvm-diff
262 + llvm-dis
263 + llvm-dlltool
264 + llvm-dwarfdump
265 + llvm-dwp
266 + llvm-elfabi
267 + llvm-exegesis
268 + llvm-extract
269 + llvm-ifs
270 + llvm-install-name-tool
271 + llvm-jitlink
272 + llvm-lib
273 + llvm-link
274 + llvm-lipo
275 + llvm-lto
276 + llvm-lto2
277 + llvm-mc
278 + llvm-mca
279 + llvm-modextract
280 + llvm-mt
281 + llvm-nm
282 + llvm-objcopy
283 + llvm-objdump
284 + llvm-opt-report
285 + llvm-pdbutil
286 + llvm-profdata
287 + llvm-ranlib
288 + llvm-rc
289 + llvm-readelf
290 + llvm-readobj
291 + llvm-reduce
292 + llvm-rtdyld
293 + llvm-size
294 + llvm-split
295 + llvm-stress
296 + llvm-strings
297 + llvm-strip
298 + llvm-symbolizer
299 + llvm-undname
300 + llvm-xray
301 + obj2yaml
302 + opt
303 + sancov
304 + sanstats
305 + verify-uselistorder
306 + yaml2obj
307 +
308 + # python modules
309 + opt-viewer
310 +
311 + # manpages
312 + docs-dsymutil-man
313 + docs-llvm-dwarfdump-man
314 + docs-llvm-man
315 + )
316 + use doc && out+=(
317 + docs-llvm-html
318 + )
319 +
320 + use gold && out+=(
321 + LLVMgold
322 + )
323 + fi
324 +
325 + printf "%s${sep}" "${out[@]}"
326 +}
327 +
328 +multilib_src_configure() {
329 + local ffi_cflags ffi_ldflags
330 + if use libffi; then
331 + ffi_cflags=$($(tc-getPKG_CONFIG) --cflags-only-I libffi)
332 + ffi_ldflags=$($(tc-getPKG_CONFIG) --libs-only-L libffi)
333 + fi
334 +
335 + local libdir=$(get_libdir)
336 + local mycmakeargs=(
337 + # disable appending VCS revision to the version to improve
338 + # direct cache hit ratio
339 + -DLLVM_APPEND_VC_REV=OFF
340 + -DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${SLOT}"
341 + -DLLVM_LIBDIR_SUFFIX=${libdir#lib}
342 +
343 + -DBUILD_SHARED_LIBS=OFF
344 + -DLLVM_BUILD_LLVM_DYLIB=ON
345 + -DLLVM_LINK_LLVM_DYLIB=ON
346 + -DLLVM_DISTRIBUTION_COMPONENTS=$(get_distribution_components)
347 +
348 + # cheap hack: LLVM combines both anyway, and the only difference
349 + # is that the former list is explicitly verified at cmake time
350 + -DLLVM_TARGETS_TO_BUILD=""
351 + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${LLVM_TARGETS// /;}"
352 + -DLLVM_BUILD_TESTS=$(usex test)
353 +
354 + -DLLVM_ENABLE_FFI=$(usex libffi)
355 + -DLLVM_ENABLE_LIBEDIT=$(usex libedit)
356 + -DLLVM_ENABLE_TERMINFO=$(usex ncurses)
357 + -DLLVM_ENABLE_LIBXML2=$(usex xml)
358 + -DLLVM_ENABLE_ASSERTIONS=$(usex debug)
359 + -DLLVM_ENABLE_LIBPFM=$(usex exegesis)
360 + -DLLVM_ENABLE_EH=ON
361 + -DLLVM_ENABLE_RTTI=ON
362 + -DLLVM_ENABLE_Z3_SOLVER=$(usex z3)
363 +
364 + -DLLVM_HOST_TRIPLE="${CHOST}"
365 +
366 + -DFFI_INCLUDE_DIR="${ffi_cflags#-I}"
367 + -DFFI_LIBRARY_DIR="${ffi_ldflags#-L}"
368 + # used only for llvm-objdump tool
369 + -DHAVE_LIBXAR=$(multilib_native_usex xar 1 0)
370 +
371 + # disable OCaml bindings (now in dev-ml/llvm-ocaml)
372 + -DOCAMLFIND=NO
373 + )
374 +
375 + if is_libcxx_linked; then
376 + # Smart hack: alter version suffix -> SOVERSION when linking
377 + # against libc++. This way we won't end up mixing LLVM libc++
378 + # libraries with libstdc++ clang, and the other way around.
379 + mycmakeargs+=(
380 + -DLLVM_VERSION_SUFFIX="libcxx"
381 + )
382 + fi
383 +
384 +# Note: go bindings have no CMake rules at the moment
385 +# but let's kill the check in case they are introduced
386 +# if ! multilib_is_native_abi || ! use go; then
387 + mycmakeargs+=(
388 + -DGO_EXECUTABLE=GO_EXECUTABLE-NOTFOUND
389 + )
390 +# fi
391 +
392 + use test && mycmakeargs+=(
393 + -DLLVM_LIT_ARGS="$(get_lit_flags)"
394 + )
395 +
396 + if multilib_is_native_abi; then
397 + mycmakeargs+=(
398 + -DLLVM_BUILD_DOCS=ON
399 + -DLLVM_ENABLE_OCAMLDOC=OFF
400 + -DLLVM_ENABLE_SPHINX=ON
401 + -DLLVM_ENABLE_DOXYGEN=OFF
402 + -DLLVM_INSTALL_UTILS=ON
403 + -DCMAKE_INSTALL_MANDIR="${EPREFIX}/usr/lib/llvm/${SLOT}/share/man"
404 + -DLLVM_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/html"
405 + -DSPHINX_WARNINGS_AS_ERRORS=OFF
406 + )
407 + use gold && mycmakeargs+=(
408 + -DLLVM_BINUTILS_INCDIR="${EPREFIX}"/usr/include
409 + )
410 + fi
411 +
412 + if tc-is-cross-compiler; then
413 + local tblgen="${EPREFIX}/usr/lib/llvm/${SLOT}/bin/llvm-tblgen"
414 + [[ -x "${tblgen}" ]] \
415 + || die "${tblgen} not found or usable"
416 + mycmakeargs+=(
417 + -DCMAKE_CROSSCOMPILING=ON
418 + -DLLVM_TABLEGEN="${tblgen}"
419 + )
420 + fi
421 +
422 + # workaround BMI bug in gcc-7 (fixed in 7.4)
423 + # https://bugs.gentoo.org/649880
424 + # apply only to x86, https://bugs.gentoo.org/650506
425 + if tc-is-gcc && [[ ${MULTILIB_ABI_FLAG} == abi_x86* ]] &&
426 + [[ $(gcc-major-version) -eq 7 && $(gcc-minor-version) -lt 4 ]]
427 + then
428 + local CFLAGS="${CFLAGS} -mno-bmi"
429 + local CXXFLAGS="${CXXFLAGS} -mno-bmi"
430 + fi
431 +
432 + # LLVM can have very high memory consumption while linking,
433 + # exhausting the limit on 32-bit linker executable
434 + use x86 && local -x LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory"
435 +
436 + # LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
437 + use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
438 + cmake_src_configure
439 +
440 + multilib_is_native_abi && check_distribution_components
441 +}
442 +
443 +multilib_src_compile() {
444 + cmake_src_compile
445 +
446 + pax-mark m "${BUILD_DIR}"/bin/llvm-rtdyld
447 + pax-mark m "${BUILD_DIR}"/bin/lli
448 + pax-mark m "${BUILD_DIR}"/bin/lli-child-target
449 +
450 + if use test; then
451 + pax-mark m "${BUILD_DIR}"/unittests/ExecutionEngine/Orc/OrcJITTests
452 + pax-mark m "${BUILD_DIR}"/unittests/ExecutionEngine/MCJIT/MCJITTests
453 + pax-mark m "${BUILD_DIR}"/unittests/Support/SupportTests
454 + fi
455 +}
456 +
457 +multilib_src_test() {
458 + # respect TMPDIR!
459 + local -x LIT_PRESERVES_TMP=1
460 + cmake_build check
461 +}
462 +
463 +src_install() {
464 + local MULTILIB_CHOST_TOOLS=(
465 + /usr/lib/llvm/${SLOT}/bin/llvm-config
466 + )
467 +
468 + local MULTILIB_WRAPPED_HEADERS=(
469 + /usr/include/llvm/Config/llvm-config.h
470 + )
471 +
472 + local LLVM_LDPATHS=()
473 + multilib-minimal_src_install
474 +
475 + # move wrapped headers back
476 + mv "${ED}"/usr/include "${ED}"/usr/lib/llvm/${SLOT}/include || die
477 +}
478 +
479 +multilib_src_install() {
480 + DESTDIR=${D} cmake_build install-distribution
481 +
482 + # move headers to /usr/include for wrapping
483 + rm -rf "${ED}"/usr/include || die
484 + mv "${ED}"/usr/lib/llvm/${SLOT}/include "${ED}"/usr/include || die
485 +
486 + LLVM_LDPATHS+=( "${EPREFIX}/usr/lib/llvm/${SLOT}/$(get_libdir)" )
487 +}
488 +
489 +multilib_src_install_all() {
490 + local revord=$(( 9999 - ${SLOT} ))
491 + newenvd - "60llvm-${revord}" <<-_EOF_
492 + PATH="${EPREFIX}/usr/lib/llvm/${SLOT}/bin"
493 + # we need to duplicate it in ROOTPATH for Portage to respect...
494 + ROOTPATH="${EPREFIX}/usr/lib/llvm/${SLOT}/bin"
495 + MANPATH="${EPREFIX}/usr/lib/llvm/${SLOT}/share/man"
496 + LDPATH="$( IFS=:; echo "${LLVM_LDPATHS[*]}" )"
497 + _EOF_
498 +
499 + docompress "/usr/lib/llvm/${SLOT}/share/man"
500 +}
501 +
502 +pkg_postinst() {
503 + elog "You can find additional opt-viewer utility scripts in:"
504 + elog " ${EROOT}/usr/lib/llvm/${SLOT}/share/opt-viewer"
505 + elog "To use these scripts, you will need Python along with the following"
506 + elog "packages:"
507 + elog " dev-python/pygments (for opt-viewer)"
508 + elog " dev-python/pyyaml (for all of them)"
509 +}