libshit

Just some random shit
git clone https://git.neptards.moe/neptards/libshit.git
Log | Files | Refs | Submodules | README | LICENSE

llvm-8.0.1.ebuild (8464B)


      1 # Copyright 1999-2020 Gentoo Authors
      2 # Distributed under the terms of the GNU General Public License v2
      3 
      4 EAPI=6
      5 
      6 : ${CMAKE_MAKEFILE_GENERATOR:=ninja}
      7 # (needed due to CMAKE_BUILD_TYPE != Gentoo)
      8 CMAKE_MIN_VERSION=3.7.0-r1
      9 PYTHON_COMPAT=( python2_7 )
     10 
     11 inherit cmake-utils eapi7-ver flag-o-matic multilib-minimal \
     12 	multiprocessing pax-utils python-any-r1 toolchain-funcs
     13 
     14 MY_P=${P}.src
     15 DESCRIPTION="Low Level Virtual Machine"
     16 HOMEPAGE="https://llvm.org/"
     17 SRC_URI="https://github.com/llvm/llvm-project/releases/download/llvmorg-${PV}/${MY_P}.tar.xz
     18 	!doc? ( https://dev.gentoo.org/~mgorny/dist/llvm/${P}-manpages.tar.bz2 )"
     19 
     20 # Keep in sync with CMakeLists.txt
     21 ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM BPF Hexagon Lanai Mips MSP430
     22 	NVPTX PowerPC Sparc SystemZ WebAssembly X86 XCore )
     23 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
     24 
     25 # Additional licenses:
     26 # 1. OpenBSD regex: Henry Spencer's license ('rc' in Gentoo) + BSD.
     27 # 2. ARM backend: LLVM Software Grant by ARM.
     28 # 3. MD5 code: public-domain.
     29 # 4. Tests (not installed):
     30 #  a. gtest: BSD.
     31 #  b. YAML tests: MIT.
     32 
     33 LICENSE="UoI-NCSA rc BSD public-domain
     34 	llvm_targets_ARM? ( LLVM-Grant )"
     35 SLOT="$(ver_cut 1)"
     36 KEYWORDS="amd64 arm arm64 ppc64 x86 ~amd64-linux ~ppc-macos ~x64-macos ~x86-macos"
     37 IUSE="debug doc exegesis gold libedit +libffi ncurses test xar xml
     38 	kernel_Darwin ${ALL_LLVM_TARGETS[*]}"
     39 RESTRICT="!test? ( test )"
     40 
     41 RDEPEND="
     42 	sys-libs/zlib:0=[${MULTILIB_USEDEP}]
     43 	exegesis? ( dev-libs/libpfm:= )
     44 	gold? (
     45 		|| (
     46 			>=sys-devel/binutils-2.31.1-r4:*[plugins]
     47 			<sys-devel/binutils-2.31.1-r4:*[cxx]
     48 		)
     49 	)
     50 	libedit? ( dev-libs/libedit:0=[${MULTILIB_USEDEP}] )
     51 	libffi? ( >=dev-libs/libffi-3.0.13-r1:0=[${MULTILIB_USEDEP}] )
     52 	ncurses? ( >=sys-libs/ncurses-5.9-r3:0=[${MULTILIB_USEDEP}] )
     53 	xar? ( app-arch/xar )
     54 	xml? ( dev-libs/libxml2:2=[${MULTILIB_USEDEP}] )"
     55 DEPEND="${RDEPEND}
     56 	dev-lang/perl
     57 	kernel_Darwin? (
     58 		<sys-libs/libcxx-$(ver_cut 1-3).9999
     59 		>=sys-devel/binutils-apple-5.1
     60 	)
     61 	doc? ( $(python_gen_any_dep '
     62 		dev-python/recommonmark[${PYTHON_USEDEP}]
     63 		dev-python/sphinx[${PYTHON_USEDEP}]
     64 	') )
     65 	!doc? ( ${PYTHON_DEPS} )
     66 	gold? ( sys-libs/binutils-libs )
     67 	libffi? ( virtual/pkgconfig )
     68 	${PYTHON_DEPS}"
     69 # There are no file collisions between these versions but having :0
     70 # installed means llvm-config there will take precedence.
     71 RDEPEND="${RDEPEND}
     72 	!sys-devel/llvm:0"
     73 PDEPEND="sys-devel/llvm-common
     74 	gold? ( >=sys-devel/llvmgold-${SLOT} )"
     75 
     76 REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )"
     77 
     78 S=${WORKDIR}/${MY_P}
     79 
     80 # least intrusive of all
     81 CMAKE_BUILD_TYPE=RelWithDebInfo
     82 
     83 python_check_deps() {
     84 	use doc || return 0
     85 
     86 	has_version "dev-python/recommonmark[${PYTHON_USEDEP}]" &&
     87 	has_version "dev-python/sphinx[${PYTHON_USEDEP}]"
     88 }
     89 
     90 src_prepare() {
     91 	# Fix llvm-config for shared linking and sane flags
     92 	# https://bugs.gentoo.org/show_bug.cgi?id=565358
     93 	eapply "${FILESDIR}"/9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch
     94 
     95 	eapply "${FILESDIR}/llvm-8.0-u3.patch"
     96 
     97 	# disable use of SDK on OSX, bug #568758
     98 	sed -i -e 's/xcrun/false/' utils/lit/lit/util.py || die
     99 
    100 	# User patches + QA
    101 	cmake-utils_src_prepare
    102 }
    103 
    104 # Is LLVM being linked against libc++?
    105 is_libcxx_linked() {
    106 	local code='#include <ciso646>
    107 #if defined(_LIBCPP_VERSION)
    108 	HAVE_LIBCXX
    109 #endif
    110 '
    111 	local out=$($(tc-getCXX) ${CXXFLAGS} ${CPPFLAGS} -x c++ -E -P - <<<"${code}") || return 1
    112 
    113 	[[ ${out} == *HAVE_LIBCXX* ]]
    114 }
    115 
    116 multilib_src_configure() {
    117 	local ffi_cflags ffi_ldflags
    118 	if use libffi; then
    119 		ffi_cflags=$($(tc-getPKG_CONFIG) --cflags-only-I libffi)
    120 		ffi_ldflags=$($(tc-getPKG_CONFIG) --libs-only-L libffi)
    121 	fi
    122 
    123 	local libdir=$(get_libdir)
    124 	local mycmakeargs=(
    125 		# disable appending VCS revision to the version to improve
    126 		# direct cache hit ratio
    127 		-DLLVM_APPEND_VC_REV=OFF
    128 		-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${SLOT}"
    129 		-DLLVM_LIBDIR_SUFFIX=${libdir#lib}
    130 
    131 		-DBUILD_SHARED_LIBS=ON
    132 		-DLLVM_TARGETS_TO_BUILD="${LLVM_TARGETS// /;}"
    133 		-DLLVM_BUILD_TESTS=$(usex test)
    134 
    135 		-DLLVM_ENABLE_FFI=$(usex libffi)
    136 		-DLLVM_ENABLE_LIBEDIT=$(usex libedit)
    137 		-DLLVM_ENABLE_TERMINFO=$(usex ncurses)
    138 		-DLLVM_ENABLE_LIBXML2=$(usex xml)
    139 		-DLLVM_ENABLE_ASSERTIONS=$(usex debug)
    140 		-DLLVM_ENABLE_LIBPFM=$(usex exegesis)
    141 		-DLLVM_ENABLE_EH=ON
    142 		-DLLVM_ENABLE_RTTI=ON
    143 
    144 		-DWITH_POLLY=OFF # TODO
    145 
    146 		-DLLVM_HOST_TRIPLE="${CHOST}"
    147 
    148 		-DFFI_INCLUDE_DIR="${ffi_cflags#-I}"
    149 		-DFFI_LIBRARY_DIR="${ffi_ldflags#-L}"
    150 		# used only for llvm-objdump tool
    151 		-DHAVE_LIBXAR=$(multilib_native_usex xar 1 0)
    152 
    153 		# disable OCaml bindings (now in dev-ml/llvm-ocaml)
    154 		-DOCAMLFIND=NO
    155 	)
    156 
    157 	if is_libcxx_linked; then
    158 		# Smart hack: alter version suffix -> SOVERSION when linking
    159 		# against libc++. This way we won't end up mixing LLVM libc++
    160 		# libraries with libstdc++ clang, and the other way around.
    161 		mycmakeargs+=(
    162 			-DLLVM_VERSION_SUFFIX="libcxx"
    163 		)
    164 	fi
    165 
    166 #	Note: go bindings have no CMake rules at the moment
    167 #	but let's kill the check in case they are introduced
    168 #	if ! multilib_is_native_abi || ! use go; then
    169 		mycmakeargs+=(
    170 			-DGO_EXECUTABLE=GO_EXECUTABLE-NOTFOUND
    171 		)
    172 #	fi
    173 
    174 	use test && mycmakeargs+=(
    175 		-DLLVM_LIT_ARGS="-vv;-j;${LIT_JOBS:-$(makeopts_jobs "${MAKEOPTS}" "$(get_nproc)")}"
    176 	)
    177 
    178 	if multilib_is_native_abi; then
    179 		mycmakeargs+=(
    180 			-DLLVM_BUILD_DOCS=$(usex doc)
    181 			-DLLVM_ENABLE_OCAMLDOC=OFF
    182 			-DLLVM_ENABLE_SPHINX=$(usex doc)
    183 			-DLLVM_ENABLE_DOXYGEN=OFF
    184 			-DLLVM_INSTALL_UTILS=ON
    185 		)
    186 		use doc && mycmakeargs+=(
    187 			-DCMAKE_INSTALL_MANDIR="${EPREFIX}/usr/lib/llvm/${SLOT}/share/man"
    188 			-DLLVM_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/html"
    189 			-DSPHINX_WARNINGS_AS_ERRORS=OFF
    190 		)
    191 		use gold && mycmakeargs+=(
    192 			-DLLVM_BINUTILS_INCDIR="${EPREFIX}"/usr/include
    193 		)
    194 	fi
    195 
    196 	if tc-is-cross-compiler; then
    197 		local tblgen="${EPREFIX}/usr/lib/llvm/${SLOT}/bin/llvm-tblgen"
    198 		[[ -x "${tblgen}" ]] \
    199 			|| die "${tblgen} not found or usable"
    200 		mycmakeargs+=(
    201 			-DCMAKE_CROSSCOMPILING=ON
    202 			-DLLVM_TABLEGEN="${tblgen}"
    203 		)
    204 	fi
    205 
    206 	# workaround BMI bug in gcc-7 (fixed in 7.4)
    207 	# https://bugs.gentoo.org/649880
    208 	# apply only to x86, https://bugs.gentoo.org/650506
    209 	if tc-is-gcc && [[ ${MULTILIB_ABI_FLAG} == abi_x86* ]] &&
    210 			[[ $(gcc-major-version) -eq 7 && $(gcc-minor-version) -lt 4 ]]
    211 	then
    212 		local CFLAGS="${CFLAGS} -mno-bmi"
    213 		local CXXFLAGS="${CXXFLAGS} -mno-bmi"
    214 	fi
    215 
    216 	# LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
    217 	use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
    218 	cmake-utils_src_configure
    219 }
    220 
    221 multilib_src_compile() {
    222 	cmake-utils_src_compile
    223 
    224 	pax-mark m "${BUILD_DIR}"/bin/llvm-rtdyld
    225 	pax-mark m "${BUILD_DIR}"/bin/lli
    226 	pax-mark m "${BUILD_DIR}"/bin/lli-child-target
    227 
    228 	if use test; then
    229 		pax-mark m "${BUILD_DIR}"/unittests/ExecutionEngine/Orc/OrcJITTests
    230 		pax-mark m "${BUILD_DIR}"/unittests/ExecutionEngine/MCJIT/MCJITTests
    231 		pax-mark m "${BUILD_DIR}"/unittests/Support/SupportTests
    232 	fi
    233 }
    234 
    235 multilib_src_test() {
    236 	# respect TMPDIR!
    237 	local -x LIT_PRESERVES_TMP=1
    238 	cmake-utils_src_make check
    239 }
    240 
    241 src_install() {
    242 	local MULTILIB_CHOST_TOOLS=(
    243 		/usr/lib/llvm/${SLOT}/bin/llvm-config
    244 	)
    245 
    246 	local MULTILIB_WRAPPED_HEADERS=(
    247 		/usr/include/llvm/Config/llvm-config.h
    248 	)
    249 
    250 	local LLVM_LDPATHS=()
    251 	multilib-minimal_src_install
    252 
    253 	# move wrapped headers back
    254 	mv "${ED%/}"/usr/include "${ED%/}"/usr/lib/llvm/${SLOT}/include || die
    255 }
    256 
    257 multilib_src_install() {
    258 	cmake-utils_src_install
    259 
    260 	# move headers to /usr/include for wrapping
    261 	rm -rf "${ED%/}"/usr/include || die
    262 	mv "${ED%/}"/usr/lib/llvm/${SLOT}/include "${ED%/}"/usr/include || die
    263 
    264 	LLVM_LDPATHS+=( "${EPREFIX}/usr/lib/llvm/${SLOT}/$(get_libdir)" )
    265 }
    266 
    267 multilib_src_install_all() {
    268 	local revord=$(( 9999 - ${SLOT} ))
    269 	newenvd - "60llvm-${revord}" <<-_EOF_
    270 		PATH="${EPREFIX}/usr/lib/llvm/${SLOT}/bin"
    271 		# we need to duplicate it in ROOTPATH for Portage to respect...
    272 		ROOTPATH="${EPREFIX}/usr/lib/llvm/${SLOT}/bin"
    273 		MANPATH="${EPREFIX}/usr/lib/llvm/${SLOT}/share/man"
    274 		LDPATH="$( IFS=:; echo "${LLVM_LDPATHS[*]}" )"
    275 	_EOF_
    276 
    277 	# install pre-generated manpages
    278 	if ! use doc; then
    279 		# (doman does not support custom paths)
    280 		insinto "/usr/lib/llvm/${SLOT}/share/man/man1"
    281 		doins "${WORKDIR}/${P}-manpages/llvm"/*.1
    282 	fi
    283 
    284 	docompress "/usr/lib/llvm/${SLOT}/share/man"
    285 }
    286 
    287 pkg_postinst() {
    288 	elog "You can find additional opt-viewer utility scripts in:"
    289 	elog "  ${EROOT%/}/usr/lib/llvm/${SLOT}/share/opt-viewer"
    290 	elog "To use these scripts, you will need Python 2.7 along with the following"
    291 	elog "packages:"
    292 	elog "  dev-python/pygments (for opt-viewer)"
    293 	elog "  dev-python/pyyaml (for all of them)"
    294 }