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: Wed, 20 May 2020 11:22:46
Message-Id: 1589973741.c2a2dd24ff881f5a8004e88db765e0e2c147275c.mgorny@gentoo
1 commit: c2a2dd24ff881f5a8004e88db765e0e2c147275c
2 Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
3 AuthorDate: Wed May 20 09:40:33 2020 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Wed May 20 11:22:21 2020 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c2a2dd24
7
8 sys-devel/llvm: Bump to 10.0.1_rc1
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_rc1.ebuild | 463 ++++++++++++++++++++++++++++++++++
14 2 files changed, 464 insertions(+)
15
16 diff --git a/sys-devel/llvm/Manifest b/sys-devel/llvm/Manifest
17 index 1975b92af9f..89ab271e234 100644
18 --- a/sys-devel/llvm/Manifest
19 +++ b/sys-devel/llvm/Manifest
20 @@ -3,4 +3,5 @@ DIST llvm-8.0.1-manpages.tar.bz2 140915 BLAKE2B 13ac9e172728d643dac1d12ac06909b6
21 DIST llvm-8.0.1.src.tar.xz 30477608 BLAKE2B 4319c837b36111401e3b0f9659b8d875c89463bcc7816df1aefe1e3ff989860bbaa92504718f8e15416cfd9f3491c13777cd5cb661877b237b342b0e515b93f5 SHA512 82e120be5cabdfd5111aebbea68a663fe229c8861d73802d6ab09a3bf48f60de333e07e61f8fb61beaa14ac2bea24fcd74fa6f761acaf62469f536b79fcb1e16
22 DIST llvm-9.0.0-manpages.tar.bz2 158546 BLAKE2B eed6235698a0b5993affe305f7fd22cd4cf444adf931275a1685f2049a5f17cf2933907577d9ce142348a3c579769b0436aa2b5a9a953958504125a8c3e83b7d SHA512 64c8d18061eb2870b379a1df485be0b61eac07cb10b3f97347b54b2ee326faa63437ca04466776be282e120dd3f6147e14fffdd38ca370db85748fe5eb54d764
23 DIST llvmorg-10.0.0.tar.gz 120804856 BLAKE2B 6b0254f5b913398cdcf2b2ec1ff219888706d2b79d5296590934714e42ac79f6a6547941ac2b1d2c4e6313dd18b6c7068e748aa6ac033e49fccbf5d355aa8191 SHA512 baa182d62fef1851836013ae8a1a00861ea89769778d67fb97b407a9de664e6c85da2af9c5b3f75d2bf34ff6b00004e531ca7e4b3115a26c0e61c575cf2303a0
24 +DIST llvmorg-10.0.1-rc1.tar.gz 120834583 BLAKE2B 64244ebcb6f2c171c9f606e5eb0adff2794f06c9312a0ca627fb79c107c0c898ac242cf4e92523c3265fa717322601d7e3f4d178515fac95d03ee92312082b06 SHA512 f877f66046969a4055b166ad50ef876a9c8ecaf03e2cdd7c8e1a3348eb5f5180f222fa457b1f090a6660282a0d9f7a1d39cf09a04abe0dde0a6e1e10ccf15597
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_rc1.ebuild b/sys-devel/llvm/llvm-10.0.1_rc1.ebuild
28 new file mode 100644
29 index 00000000000..59ccce09861
30 --- /dev/null
31 +++ b/sys-devel/llvm/llvm-10.0.1_rc1.ebuild
32 @@ -0,0 +1,463 @@
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,7,8} )
39 +inherit cmake-utils llvm.org multilib-minimal multiprocessing \
40 + pax-utils python-any-r1 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 + doc? ( $(python_gen_any_dep '
94 + dev-python/recommonmark[${PYTHON_USEDEP}]
95 + dev-python/sphinx[${PYTHON_USEDEP}]
96 + ') )
97 + libffi? ( virtual/pkgconfig )
98 + ${PYTHON_DEPS}"
99 +# There are no file collisions between these versions but having :0
100 +# installed means llvm-config there will take precedence.
101 +RDEPEND="${RDEPEND}
102 + !sys-devel/llvm:0"
103 +PDEPEND="sys-devel/llvm-common
104 + gold? ( >=sys-devel/llvmgold-${SLOT} )"
105 +
106 +# least intrusive of all
107 +CMAKE_BUILD_TYPE=RelWithDebInfo
108 +
109 +python_check_deps() {
110 + use doc || return 0
111 +
112 + has_version -b "dev-python/recommonmark[${PYTHON_USEDEP}]" &&
113 + has_version -b "dev-python/sphinx[${PYTHON_USEDEP}]"
114 +}
115 +
116 +check_distribution_components() {
117 + if [[ ${CMAKE_MAKEFILE_GENERATOR} == ninja ]]; then
118 + local all_targets=() my_targets=() l
119 + cd "${BUILD_DIR}" || die
120 +
121 + while read -r l; do
122 + if [[ ${l} == install-*-stripped:* ]]; then
123 + l=${l#install-}
124 + l=${l%%-stripped*}
125 +
126 + case ${l} in
127 + # shared libs
128 + LLVM|LLVMgold)
129 + ;;
130 + # TableGen lib + deps
131 + LLVMDemangle|LLVMSupport|LLVMTableGen)
132 + ;;
133 + # static libs
134 + LLVM*)
135 + continue
136 + ;;
137 + # meta-targets
138 + distribution|llvm-libraries)
139 + continue
140 + ;;
141 + esac
142 +
143 + all_targets+=( "${l}" )
144 + fi
145 + done < <(ninja -t targets all)
146 +
147 + while read -r l; do
148 + my_targets+=( "${l}" )
149 + done < <(get_distribution_components $"\n")
150 +
151 + local add=() remove=()
152 + for l in "${all_targets[@]}"; do
153 + if ! has "${l}" "${my_targets[@]}"; then
154 + add+=( "${l}" )
155 + fi
156 + done
157 + for l in "${my_targets[@]}"; do
158 + if ! has "${l}" "${all_targets[@]}"; then
159 + remove+=( "${l}" )
160 + fi
161 + done
162 +
163 + if [[ ${#add[@]} -gt 0 || ${#remove[@]} -gt 0 ]]; then
164 + eqawarn "get_distribution_components() is outdated!"
165 + eqawarn " Add: ${add[*]}"
166 + eqawarn "Remove: ${remove[*]}"
167 + fi
168 + cd - >/dev/null || die
169 + fi
170 +}
171 +
172 +src_prepare() {
173 + # Fix llvm-config for shared linking and sane flags
174 + # https://bugs.gentoo.org/show_bug.cgi?id=565358
175 + eapply "${FILESDIR}"/9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch
176 +
177 + # disable use of SDK on OSX, bug #568758
178 + sed -i -e 's/xcrun/false/' utils/lit/lit/util.py || die
179 +
180 + # Update config.guess to support more systems
181 + cp "${BROOT}/usr/share/gnuconfig/config.guess" cmake/ || die
182 +
183 + # User patches + QA
184 + cmake-utils_src_prepare
185 +}
186 +
187 +# Is LLVM being linked against libc++?
188 +is_libcxx_linked() {
189 + local code='#include <ciso646>
190 +#if defined(_LIBCPP_VERSION)
191 + HAVE_LIBCXX
192 +#endif
193 +'
194 + local out=$($(tc-getCXX) ${CXXFLAGS} ${CPPFLAGS} -x c++ -E -P - <<<"${code}") || return 1
195 +
196 + [[ ${out} == *HAVE_LIBCXX* ]]
197 +}
198 +
199 +get_distribution_components() {
200 + local sep=${1-;}
201 +
202 + local out=(
203 + # shared libs
204 + LLVM
205 + LTO
206 + Remarks
207 +
208 + # tools
209 + llvm-config
210 +
211 + # common stuff
212 + cmake-exports
213 + llvm-headers
214 +
215 + # libraries needed for clang-tblgen
216 + LLVMDemangle
217 + LLVMSupport
218 + LLVMTableGen
219 + )
220 +
221 + if multilib_is_native_abi; then
222 + out+=(
223 + # utilities
224 + llvm-tblgen
225 + FileCheck
226 + llvm-PerfectShuffle
227 + count
228 + not
229 + yaml-bench
230 +
231 + # tools
232 + bugpoint
233 + dsymutil
234 + llc
235 + lli
236 + lli-child-target
237 + llvm-addr2line
238 + llvm-ar
239 + llvm-as
240 + llvm-bcanalyzer
241 + llvm-c-test
242 + llvm-cat
243 + llvm-cfi-verify
244 + llvm-config
245 + llvm-cov
246 + llvm-cvtres
247 + llvm-cxxdump
248 + llvm-cxxfilt
249 + llvm-cxxmap
250 + llvm-diff
251 + llvm-dis
252 + llvm-dlltool
253 + llvm-dwarfdump
254 + llvm-dwp
255 + llvm-elfabi
256 + llvm-exegesis
257 + llvm-extract
258 + llvm-ifs
259 + llvm-install-name-tool
260 + llvm-jitlink
261 + llvm-lib
262 + llvm-link
263 + llvm-lipo
264 + llvm-lto
265 + llvm-lto2
266 + llvm-mc
267 + llvm-mca
268 + llvm-modextract
269 + llvm-mt
270 + llvm-nm
271 + llvm-objcopy
272 + llvm-objdump
273 + llvm-opt-report
274 + llvm-pdbutil
275 + llvm-profdata
276 + llvm-ranlib
277 + llvm-rc
278 + llvm-readelf
279 + llvm-readobj
280 + llvm-reduce
281 + llvm-rtdyld
282 + llvm-size
283 + llvm-split
284 + llvm-stress
285 + llvm-strings
286 + llvm-strip
287 + llvm-symbolizer
288 + llvm-undname
289 + llvm-xray
290 + obj2yaml
291 + opt
292 + sancov
293 + sanstats
294 + verify-uselistorder
295 + yaml2obj
296 +
297 + # python modules
298 + opt-viewer
299 + )
300 +
301 + use doc && out+=(
302 + docs-dsymutil-man
303 + docs-llvm-dwarfdump-man
304 + docs-llvm-man
305 + docs-llvm-html
306 + )
307 +
308 + use gold && out+=(
309 + LLVMgold
310 + )
311 + fi
312 +
313 + printf "%s${sep}" "${out[@]}"
314 +}
315 +
316 +multilib_src_configure() {
317 + local ffi_cflags ffi_ldflags
318 + if use libffi; then
319 + ffi_cflags=$($(tc-getPKG_CONFIG) --cflags-only-I libffi)
320 + ffi_ldflags=$($(tc-getPKG_CONFIG) --libs-only-L libffi)
321 + fi
322 +
323 + local libdir=$(get_libdir)
324 + local mycmakeargs=(
325 + # disable appending VCS revision to the version to improve
326 + # direct cache hit ratio
327 + -DLLVM_APPEND_VC_REV=OFF
328 + -DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${SLOT}"
329 + -DLLVM_LIBDIR_SUFFIX=${libdir#lib}
330 +
331 + -DBUILD_SHARED_LIBS=OFF
332 + -DLLVM_BUILD_LLVM_DYLIB=ON
333 + -DLLVM_LINK_LLVM_DYLIB=ON
334 + -DLLVM_DISTRIBUTION_COMPONENTS=$(get_distribution_components)
335 +
336 + # cheap hack: LLVM combines both anyway, and the only difference
337 + # is that the former list is explicitly verified at cmake time
338 + -DLLVM_TARGETS_TO_BUILD=""
339 + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${LLVM_TARGETS// /;}"
340 + -DLLVM_BUILD_TESTS=$(usex test)
341 +
342 + -DLLVM_ENABLE_FFI=$(usex libffi)
343 + -DLLVM_ENABLE_LIBEDIT=$(usex libedit)
344 + -DLLVM_ENABLE_TERMINFO=$(usex ncurses)
345 + -DLLVM_ENABLE_LIBXML2=$(usex xml)
346 + -DLLVM_ENABLE_ASSERTIONS=$(usex debug)
347 + -DLLVM_ENABLE_LIBPFM=$(usex exegesis)
348 + -DLLVM_ENABLE_EH=ON
349 + -DLLVM_ENABLE_RTTI=ON
350 + -DLLVM_ENABLE_Z3_SOLVER=$(usex z3)
351 +
352 + -DLLVM_HOST_TRIPLE="${CHOST}"
353 +
354 + -DFFI_INCLUDE_DIR="${ffi_cflags#-I}"
355 + -DFFI_LIBRARY_DIR="${ffi_ldflags#-L}"
356 + # used only for llvm-objdump tool
357 + -DHAVE_LIBXAR=$(multilib_native_usex xar 1 0)
358 +
359 + # disable OCaml bindings (now in dev-ml/llvm-ocaml)
360 + -DOCAMLFIND=NO
361 + )
362 +
363 + if is_libcxx_linked; then
364 + # Smart hack: alter version suffix -> SOVERSION when linking
365 + # against libc++. This way we won't end up mixing LLVM libc++
366 + # libraries with libstdc++ clang, and the other way around.
367 + mycmakeargs+=(
368 + -DLLVM_VERSION_SUFFIX="libcxx"
369 + )
370 + fi
371 +
372 +# Note: go bindings have no CMake rules at the moment
373 +# but let's kill the check in case they are introduced
374 +# if ! multilib_is_native_abi || ! use go; then
375 + mycmakeargs+=(
376 + -DGO_EXECUTABLE=GO_EXECUTABLE-NOTFOUND
377 + )
378 +# fi
379 +
380 + use test && mycmakeargs+=(
381 + -DLLVM_LIT_ARGS="-vv;-j;${LIT_JOBS:-$(makeopts_jobs "${MAKEOPTS}" "$(get_nproc)")}"
382 + )
383 +
384 + if multilib_is_native_abi; then
385 + mycmakeargs+=(
386 + -DLLVM_BUILD_DOCS=$(usex doc)
387 + -DLLVM_ENABLE_OCAMLDOC=OFF
388 + -DLLVM_ENABLE_SPHINX=$(usex doc)
389 + -DLLVM_ENABLE_DOXYGEN=OFF
390 + -DLLVM_INSTALL_UTILS=ON
391 + )
392 + use doc && mycmakeargs+=(
393 + -DCMAKE_INSTALL_MANDIR="${EPREFIX}/usr/lib/llvm/${SLOT}/share/man"
394 + -DLLVM_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/html"
395 + -DSPHINX_WARNINGS_AS_ERRORS=OFF
396 + )
397 + use gold && mycmakeargs+=(
398 + -DLLVM_BINUTILS_INCDIR="${EPREFIX}"/usr/include
399 + )
400 + fi
401 +
402 + if tc-is-cross-compiler; then
403 + local tblgen="${EPREFIX}/usr/lib/llvm/${SLOT}/bin/llvm-tblgen"
404 + [[ -x "${tblgen}" ]] \
405 + || die "${tblgen} not found or usable"
406 + mycmakeargs+=(
407 + -DCMAKE_CROSSCOMPILING=ON
408 + -DLLVM_TABLEGEN="${tblgen}"
409 + )
410 + fi
411 +
412 + # workaround BMI bug in gcc-7 (fixed in 7.4)
413 + # https://bugs.gentoo.org/649880
414 + # apply only to x86, https://bugs.gentoo.org/650506
415 + if tc-is-gcc && [[ ${MULTILIB_ABI_FLAG} == abi_x86* ]] &&
416 + [[ $(gcc-major-version) -eq 7 && $(gcc-minor-version) -lt 4 ]]
417 + then
418 + local CFLAGS="${CFLAGS} -mno-bmi"
419 + local CXXFLAGS="${CXXFLAGS} -mno-bmi"
420 + fi
421 +
422 + # LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
423 + use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
424 + cmake-utils_src_configure
425 +
426 + multilib_is_native_abi && check_distribution_components
427 +}
428 +
429 +multilib_src_compile() {
430 + cmake-utils_src_compile
431 +
432 + pax-mark m "${BUILD_DIR}"/bin/llvm-rtdyld
433 + pax-mark m "${BUILD_DIR}"/bin/lli
434 + pax-mark m "${BUILD_DIR}"/bin/lli-child-target
435 +
436 + if use test; then
437 + pax-mark m "${BUILD_DIR}"/unittests/ExecutionEngine/Orc/OrcJITTests
438 + pax-mark m "${BUILD_DIR}"/unittests/ExecutionEngine/MCJIT/MCJITTests
439 + pax-mark m "${BUILD_DIR}"/unittests/Support/SupportTests
440 + fi
441 +}
442 +
443 +multilib_src_test() {
444 + # respect TMPDIR!
445 + local -x LIT_PRESERVES_TMP=1
446 + cmake-utils_src_make check
447 +}
448 +
449 +src_install() {
450 + local MULTILIB_CHOST_TOOLS=(
451 + /usr/lib/llvm/${SLOT}/bin/llvm-config
452 + )
453 +
454 + local MULTILIB_WRAPPED_HEADERS=(
455 + /usr/include/llvm/Config/llvm-config.h
456 + )
457 +
458 + local LLVM_LDPATHS=()
459 + multilib-minimal_src_install
460 +
461 + # move wrapped headers back
462 + mv "${ED}"/usr/include "${ED}"/usr/lib/llvm/${SLOT}/include || die
463 +}
464 +
465 +multilib_src_install() {
466 + DESTDIR=${D} cmake-utils_src_make install-distribution
467 +
468 + # move headers to /usr/include for wrapping
469 + rm -rf "${ED}"/usr/include || die
470 + mv "${ED}"/usr/lib/llvm/${SLOT}/include "${ED}"/usr/include || die
471 +
472 + LLVM_LDPATHS+=( "${EPREFIX}/usr/lib/llvm/${SLOT}/$(get_libdir)" )
473 +}
474 +
475 +multilib_src_install_all() {
476 + local revord=$(( 9999 - ${SLOT} ))
477 + newenvd - "60llvm-${revord}" <<-_EOF_
478 + PATH="${EPREFIX}/usr/lib/llvm/${SLOT}/bin"
479 + # we need to duplicate it in ROOTPATH for Portage to respect...
480 + ROOTPATH="${EPREFIX}/usr/lib/llvm/${SLOT}/bin"
481 + MANPATH="${EPREFIX}/usr/lib/llvm/${SLOT}/share/man"
482 + LDPATH="$( IFS=:; echo "${LLVM_LDPATHS[*]}" )"
483 + _EOF_
484 +
485 + docompress "/usr/lib/llvm/${SLOT}/share/man"
486 +}
487 +
488 +pkg_postinst() {
489 + elog "You can find additional opt-viewer utility scripts in:"
490 + elog " ${EROOT}/usr/lib/llvm/${SLOT}/share/opt-viewer"
491 + elog "To use these scripts, you will need Python along with the following"
492 + elog "packages:"
493 + elog " dev-python/pygments (for opt-viewer)"
494 + elog " dev-python/pyyaml (for all of them)"
495 +}