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, 04 Mar 2020 16:25:07
Message-Id: 1583339082.c490fa68282145a3a9356869faa2932e22635a5b.mgorny@gentoo
1 commit: c490fa68282145a3a9356869faa2932e22635a5b
2 Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
3 AuthorDate: Wed Mar 4 13:56:38 2020 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Wed Mar 4 16:24:42 2020 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c490fa68
7
8 sys-devel/llvm: Bump to 10.0.0rc3
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.0_rc3.ebuild | 463 ++++++++++++++++++++++++++++++++++
14 2 files changed, 464 insertions(+)
15
16 diff --git a/sys-devel/llvm/Manifest b/sys-devel/llvm/Manifest
17 index e4ce5d50150..6bbd3e7cf7e 100644
18 --- a/sys-devel/llvm/Manifest
19 +++ b/sys-devel/llvm/Manifest
20 @@ -5,4 +5,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-rc1.tar.gz 120755822 BLAKE2B a729d37d96ba498cb865c6f708734dccb796b2caabb69167b9aa3b0e12c788f2a5980a048b99d5603da3d26af909fb31f406b4f4743cabae56c45f829a7bf695 SHA512 27137fc700971147c00ded6787eaae9f0bcf98c938fe227a5a559b38d983736f3d086f4ff6772d802c5f48a7d97a97c293261e4af88fcb5a720693b9cb5a4f02
23 DIST llvmorg-10.0.0-rc2.tar.gz 120795019 BLAKE2B 6e701eddbd2313e777c7b37dff8455a08d3c599d01055b60afc0319373d4709deb429aac6bf9e80c4d2e2ab8ade03bf5b398b6ccd8882e4bde608d10cdbf2284 SHA512 ee571c9258a2d9fc411964f56b0b92b2e7134349ed21dbe7963eb61ef65da506e0c4f7c69259a3b6cecec23f55d24636608287ee4457ee667031e141f8f09aae
24 +DIST llvmorg-10.0.0-rc3.tar.gz 120814170 BLAKE2B 432fe0c1e74d3020a269a256e6e456cbfa0b7166dd3f86df6caf3a55e1931c022285fe8afdc4d8998c729c5471acf5308abb336782ddec2ef9b0f58d1ccb5a3c SHA512 aad1df86063612d20c48ea7046940330fe2ac572a146be22ff71d9e65fa3438184cb39a2533fc6afd1e74df26909a9f0d24ebcd7d62e74728cfd81e447f2ffbf
25 DIST llvmorg-9.0.1.tar.gz 113193320 BLAKE2B b86e405f2b8e00436045fd409fe19cdde75c797b1192c62a22b5ec75e6b4dc8e874a0f33008dc31562445e4cbe53a992b6f48c684255a6a1ef261e595b8b161f SHA512 fa88beeaae94b6d0cd9b5ba38658d0ffed8004035d7d8a4f95c3d31a709b88b581ae9bd7761333c8e5375c44b8f6be01768b5a3be901163159d7e6c43b71da59
26
27 diff --git a/sys-devel/llvm/llvm-10.0.0_rc3.ebuild b/sys-devel/llvm/llvm-10.0.0_rc3.ebuild
28 new file mode 100644
29 index 00000000000..6c36096f80a
30 --- /dev/null
31 +++ b/sys-devel/llvm/llvm-10.0.0_rc3.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? ( >=virtual/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 +}