libshit

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

clang-8.0.1.ebuild (10205B)


      1 # Copyright 1999-2019 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_ALLOW_PY27=1
     10 PYTHON_COMPAT=( python2_7 )
     11 
     12 inherit cmake-utils eapi7-ver flag-o-matic llvm \
     13 	multilib-minimal multiprocessing pax-utils prefix python-single-r1 \
     14 	toolchain-funcs
     15 
     16 MY_P=cfe-${PV/_/}.src
     17 EXTRA_P=clang-tools-extra-${PV/_/}.src
     18 LLVM_P=llvm-${PV/_/}.src
     19 
     20 DESCRIPTION="C language family frontend for LLVM"
     21 HOMEPAGE="https://llvm.org/"
     22 SRC_URI="https://github.com/llvm/llvm-project/releases/download/llvmorg-${PV}/${MY_P}.tar.xz
     23 	https://github.com/llvm/llvm-project/releases/download/llvmorg-${PV}/${EXTRA_P}.tar.xz
     24 	test? ( https://github.com/llvm/llvm-project/releases/download/llvmorg-${PV}/${LLVM_P}.tar.xz )
     25 	!doc? ( https://dev.gentoo.org/~mgorny/dist/llvm/llvm-${PV}-manpages.tar.bz2 )"
     26 
     27 # Keep in sync with sys-devel/llvm
     28 ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM BPF Hexagon Lanai Mips MSP430
     29 	NVPTX PowerPC Sparc SystemZ WebAssembly X86 XCore )
     30 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
     31 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/?}
     32 
     33 LICENSE="UoI-NCSA"
     34 SLOT="$(ver_cut 1)"
     35 KEYWORDS="amd64 arm arm64 ppc64 x86 ~amd64-linux ~ppc-macos ~x64-macos ~x86-macos"
     36 IUSE="debug default-compiler-rt default-libcxx doc +static-analyzer
     37 	test xml z3 kernel_FreeBSD ${ALL_LLVM_TARGETS[*]}"
     38 RESTRICT="!test? ( test )"
     39 
     40 RDEPEND="
     41 	~sys-devel/llvm-${PV}:${SLOT}=[debug=,${LLVM_TARGET_USEDEPS// /,},${MULTILIB_USEDEP}]
     42 	static-analyzer? (
     43 		dev-lang/perl:*
     44 		z3? ( >=sci-mathematics/z3-4.7.1:0=[${MULTILIB_USEDEP}] )
     45 	)
     46 	xml? ( dev-libs/libxml2:2=[${MULTILIB_USEDEP}] )
     47 	dev-lang/python:2.7
     48 "
     49 DEPEND="${RDEPEND}
     50 	doc? ( dev-python/sphinx )
     51 	xml? ( virtual/pkgconfig )
     52 	dev-lang/python:2.7
     53 "
     54 RDEPEND="${RDEPEND}
     55 	!<sys-devel/llvm-4.0.0_rc:0
     56 	!sys-devel/clang:0"
     57 PDEPEND="
     58 	sys-devel/clang-common
     59 	~sys-devel/clang-runtime-${PV}
     60 	default-compiler-rt? ( =sys-libs/compiler-rt-${PV%_*}* )
     61 	default-libcxx? ( >=sys-libs/libcxx-${PV} )"
     62 
     63 REQUIRED_USE="${PYTHON_REQUIRED_USE}
     64 	|| ( ${ALL_LLVM_TARGETS[*]} )"
     65 
     66 # We need extra level of indirection for CLANG_RESOURCE_DIR
     67 S=${WORKDIR}/x/y/${MY_P}
     68 
     69 # least intrusive of all
     70 CMAKE_BUILD_TYPE=RelWithDebInfo
     71 
     72 PATCHES=(
     73 	# add Prefix include paths for Darwin
     74 	"${FILESDIR}"/8.0.1/darwin_prefix-include-paths.patch
     75 	"${FILESDIR}/clang-8.0-u3.patch"
     76 )
     77 
     78 # Multilib notes:
     79 # 1. ABI_* flags control ABIs libclang* is built for only.
     80 # 2. clang is always capable of compiling code for all ABIs for enabled
     81 #    target. However, you will need appropriate crt* files (installed
     82 #    e.g. by sys-devel/gcc and sys-libs/glibc).
     83 # 3. ${CHOST}-clang wrappers are always installed for all ABIs included
     84 #    in the current profile (i.e. alike supported by sys-devel/gcc).
     85 #
     86 # Therefore: use sys-devel/clang[${MULTILIB_USEDEP}] only if you need
     87 # multilib clang* libraries (not runtime, not wrappers).
     88 
     89 pkg_setup() {
     90 	LLVM_MAX_SLOT=${SLOT} llvm_pkg_setup
     91 	python-single-r1_pkg_setup
     92 }
     93 
     94 src_unpack() {
     95 	# create extra parent dir for CLANG_RESOURCE_DIR
     96 	mkdir -p x/y || die
     97 	cd x/y || die
     98 
     99 	einfo "Unpacking ${MY_P}.tar.xz ..."
    100 	tar -xf "${DISTDIR}/${MY_P}.tar.xz" || die
    101 	einfo "Unpacking ${EXTRA_P}.tar.xz ..."
    102 	tar -xf "${DISTDIR}/${EXTRA_P}.tar.xz" || die
    103 
    104 	mv "${EXTRA_P}" "${S}"/tools/extra || die
    105 	if use test; then
    106 		einfo "Unpacking parts of ${LLVM_P}.tar.xz ..."
    107 		tar -xf "${DISTDIR}/${LLVM_P}.tar.xz" \
    108 			"${LLVM_P}"/lib/Testing/Support \
    109 			"${LLVM_P}"/utils/{lit,llvm-lit,unittest} || die
    110 		mv "${LLVM_P}" "${WORKDIR}"/llvm || die
    111 	fi
    112 
    113 	if ! use doc; then
    114 		einfo "Unpacking llvm-${PV}-manpages.tar.bz2 ..."
    115 		tar -xf "${DISTDIR}/llvm-${PV}-manpages.tar.bz2" || die
    116 	fi
    117 }
    118 
    119 src_prepare() {
    120 	cmake-utils_src_prepare
    121 	eprefixify lib/Frontend/InitHeaderSearch.cpp
    122 }
    123 
    124 multilib_src_configure() {
    125 	local llvm_version=$(llvm-config --version) || die
    126 	local clang_version=$(ver_cut 1-3 "${llvm_version}")
    127 
    128 	local mycmakeargs=(
    129 		# ensure that the correct llvm-config is used
    130 		-DLLVM_CONFIG="$(type -P "${CHOST}-llvm-config")"
    131 		-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${SLOT}"
    132 		-DCMAKE_INSTALL_MANDIR="${EPREFIX}/usr/lib/llvm/${SLOT}/share/man"
    133 		# relative to bindir
    134 		-DCLANG_RESOURCE_DIR="../../../../lib/clang/${clang_version}"
    135 
    136 		-DBUILD_SHARED_LIBS=ON
    137 		-DLLVM_TARGETS_TO_BUILD="${LLVM_TARGETS// /;}"
    138 		-DLLVM_BUILD_TESTS=$(usex test)
    139 
    140 		# these are not propagated reliably, so redefine them
    141 		-DLLVM_ENABLE_EH=ON
    142 		-DLLVM_ENABLE_RTTI=ON
    143 
    144 		-DCMAKE_DISABLE_FIND_PACKAGE_LibXml2=$(usex !xml)
    145 		# libgomp support fails to find headers without explicit -I
    146 		# furthermore, it provides only syntax checking
    147 		-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp
    148 
    149 		# override default stdlib and rtlib
    150 		-DCLANG_DEFAULT_CXX_STDLIB=$(usex default-libcxx libc++ "")
    151 		-DCLANG_DEFAULT_RTLIB=$(usex default-compiler-rt compiler-rt "")
    152 
    153 		-DCLANG_ENABLE_ARCMT=$(usex static-analyzer)
    154 		-DCLANG_ENABLE_STATIC_ANALYZER=$(usex static-analyzer)
    155 		# z3 is not multilib-friendly
    156 		-DCLANG_ANALYZER_ENABLE_Z3_SOLVER=$(usex z3)
    157 	)
    158 	use test && mycmakeargs+=(
    159 		-DLLVM_MAIN_SRC_DIR="${WORKDIR}/llvm"
    160 		-DLLVM_LIT_ARGS="-vv;-j;${LIT_JOBS:-$(makeopts_jobs "${MAKEOPTS}" "$(get_nproc)")}"
    161 	)
    162 
    163 	if multilib_is_native_abi; then
    164 		mycmakeargs+=(
    165 			# normally copied from LLVM_INCLUDE_DOCS but the latter
    166 			# is lacking value in stand-alone builds
    167 			-DCLANG_INCLUDE_DOCS=$(usex doc)
    168 			-DCLANG_TOOLS_EXTRA_INCLUDE_DOCS=$(usex doc)
    169 		)
    170 		use doc && mycmakeargs+=(
    171 			-DLLVM_BUILD_DOCS=ON
    172 			-DLLVM_ENABLE_SPHINX=ON
    173 			-DCLANG_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/html"
    174 			-DCLANG-TOOLS_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/tools-extra"
    175 			-DSPHINX_WARNINGS_AS_ERRORS=OFF
    176 		)
    177 		use z3 && mycmakeargs+=(
    178 			-DZ3_INCLUDE_DIR="${EPREFIX}/usr/include/z3"
    179 		)
    180 	else
    181 		mycmakeargs+=(
    182 			-DLLVM_TOOL_CLANG_TOOLS_EXTRA_BUILD=OFF
    183 		)
    184 	fi
    185 
    186 	if [[ -n ${EPREFIX} ]]; then
    187 		mycmakeargs+=(
    188 			-DGCC_INSTALL_PREFIX="${EPREFIX}/usr"
    189 		)
    190 	fi
    191 
    192 	if tc-is-cross-compiler; then
    193 		[[ -x "/usr/bin/clang-tblgen" ]] \
    194 			|| die "/usr/bin/clang-tblgen not found or usable"
    195 		mycmakeargs+=(
    196 			-DCMAKE_CROSSCOMPILING=ON
    197 			-DCLANG_TABLEGEN=/usr/bin/clang-tblgen
    198 		)
    199 	fi
    200 
    201 	# LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
    202 	use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
    203 	cmake-utils_src_configure
    204 }
    205 
    206 multilib_src_compile() {
    207 	cmake-utils_src_compile
    208 
    209 	# provide a symlink for tests
    210 	if [[ ! -L ${WORKDIR}/lib/clang ]]; then
    211 		mkdir -p "${WORKDIR}"/lib || die
    212 		ln -s "${BUILD_DIR}/$(get_libdir)/clang" "${WORKDIR}"/lib/clang || die
    213 	fi
    214 }
    215 
    216 multilib_src_test() {
    217 	# respect TMPDIR!
    218 	local -x LIT_PRESERVES_TMP=1
    219 	cmake-utils_src_make check-clang
    220 	multilib_is_native_abi && cmake-utils_src_make check-clang-tools
    221 }
    222 
    223 src_install() {
    224 	MULTILIB_WRAPPED_HEADERS=(
    225 		/usr/include/clang/Config/config.h
    226 	)
    227 
    228 	multilib-minimal_src_install
    229 
    230 	# Move runtime headers to /usr/lib/clang, where they belong
    231 	mv "${ED%/}"/usr/include/clangrt "${ED%/}"/usr/lib/clang || die
    232 	# move (remaining) wrapped headers back
    233 	mv "${ED%/}"/usr/include "${ED%/}"/usr/lib/llvm/${SLOT}/include || die
    234 
    235 	# Apply CHOST and version suffix to clang tools
    236 	# note: we use two version components here (vs 3 in runtime path)
    237 	local llvm_version=$(llvm-config --version) || die
    238 	local clang_version=$(ver_cut 1 "${llvm_version}")
    239 	local clang_full_version=$(ver_cut 1-3 "${llvm_version}")
    240 	local clang_tools=( clang clang++ clang-cl clang-cpp )
    241 	local abi i
    242 
    243 	# cmake gives us:
    244 	# - clang-X
    245 	# - clang -> clang-X
    246 	# - clang++, clang-cl, clang-cpp -> clang
    247 	# we want to have:
    248 	# - clang-X
    249 	# - clang++-X, clang-cl-X, clang-cpp-X -> clang-X
    250 	# - clang, clang++, clang-cl, clang-cpp -> clang*-X
    251 	# also in CHOST variant
    252 	for i in "${clang_tools[@]:1}"; do
    253 		rm "${ED%/}/usr/lib/llvm/${SLOT}/bin/${i}" || die
    254 		dosym "clang-${clang_version}" "/usr/lib/llvm/${SLOT}/bin/${i}-${clang_version}"
    255 		dosym "${i}-${clang_version}" "/usr/lib/llvm/${SLOT}/bin/${i}"
    256 	done
    257 
    258 	# now create target symlinks for all supported ABIs
    259 	for abi in $(get_all_abis); do
    260 		local abi_chost=$(get_abi_CHOST "${abi}")
    261 		for i in "${clang_tools[@]}"; do
    262 			dosym "${i}-${clang_version}" \
    263 				"/usr/lib/llvm/${SLOT}/bin/${abi_chost}-${i}-${clang_version}"
    264 			dosym "${abi_chost}-${i}-${clang_version}" \
    265 				"/usr/lib/llvm/${SLOT}/bin/${abi_chost}-${i}"
    266 		done
    267 	done
    268 
    269 	# Remove unnecessary headers on FreeBSD, bug #417171
    270 	if use kernel_FreeBSD; then
    271 		rm "${ED}"usr/lib/clang/${clang_full_version}/include/{std,float,iso,limits,tgmath,varargs}*.h || die
    272 	fi
    273 }
    274 
    275 multilib_src_install() {
    276 	cmake-utils_src_install
    277 
    278 	# move headers to /usr/include for wrapping & ABI mismatch checks
    279 	# (also drop the version suffix from runtime headers)
    280 	rm -rf "${ED%/}"/usr/include || die
    281 	mv "${ED%/}"/usr/lib/llvm/${SLOT}/include "${ED%/}"/usr/include || die
    282 	mv "${ED%/}"/usr/lib/llvm/${SLOT}/$(get_libdir)/clang "${ED%/}"/usr/include/clangrt || die
    283 }
    284 
    285 multilib_src_install_all() {
    286 	python_fix_shebang "${ED}"
    287 	if use static-analyzer; then
    288 		python_optimize "${ED}"usr/lib/llvm/${SLOT}/share/scan-view
    289 	fi
    290 
    291 	# install pre-generated manpages
    292 	if ! use doc; then
    293 		insinto "/usr/lib/llvm/${SLOT}/share/man/man1"
    294 		doins "${WORKDIR}/x/y/llvm-${PV}-manpages/clang"/*.1
    295 	fi
    296 
    297 	docompress "/usr/lib/llvm/${SLOT}/share/man"
    298 	# match 'html' non-compression
    299 	use doc && docompress -x "/usr/share/doc/${PF}/tools-extra"
    300 	# +x for some reason; TODO: investigate
    301 	use static-analyzer && fperms a-x "/usr/lib/llvm/${SLOT}/share/man/man1/scan-build.1"
    302 }
    303 
    304 pkg_postinst() {
    305 	if [[ ${ROOT} == / && -f ${EPREFIX}/usr/share/eselect/modules/compiler-shadow.eselect ]] ; then
    306 		eselect compiler-shadow update all
    307 	fi
    308 
    309 	elog "You can find additional utility scripts in:"
    310 	elog "  ${EROOT}/usr/lib/llvm/${SLOT}/share/clang"
    311 	elog "To use these scripts, you will need Python 2.7. Some of them are vim"
    312 	elog "integration scripts (with instructions inside). The run-clang-tidy.py"
    313 	elog "scripts requires the following additional package:"
    314 	elog "  dev-python/pyyaml"
    315 }
    316 
    317 pkg_postrm() {
    318 	if [[ ${ROOT} == / && -f ${EPREFIX}/usr/share/eselect/modules/compiler-shadow.eselect ]] ; then
    319 		eselect compiler-shadow clean all
    320 	fi
    321 }