libcxxabi-8.0.1.ebuild (3226B)
1 # Copyright 1999-2019 Gentoo Authors 2 # Distributed under the terms of the GNU General Public License v2 3 4 EAPI=7 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-multilib llvm multiprocessing python-any-r1 12 13 MY_P=${P/_/}.src 14 LIBCXX_P=libcxx-${PV/_/}.src 15 16 DESCRIPTION="Low level support for a standard C++ library" 17 HOMEPAGE="https://libcxxabi.llvm.org/" 18 SRC_URI="https://github.com/llvm/llvm-project/releases/download/llvmorg-${PV}/${MY_P}.tar.xz 19 https://github.com/llvm/llvm-project/releases/download/llvmorg-${PV}/${LIBCXX_P}.tar.xz" 20 21 LICENSE="|| ( UoI-NCSA MIT )" 22 SLOT="0" 23 KEYWORDS="amd64 arm arm64 x86" 24 IUSE="+libunwind +static-libs test elibc_musl" 25 RESTRICT="!test? ( test )" 26 27 RDEPEND=" 28 libunwind? ( 29 || ( 30 >=sys-libs/libunwind-1.0.1-r1[static-libs?,${MULTILIB_USEDEP}] 31 >=sys-libs/llvm-libunwind-3.9.0-r1[static-libs?,${MULTILIB_USEDEP}] 32 ) 33 )" 34 # llvm-6 for new lit options 35 DEPEND="${RDEPEND} 36 >=sys-devel/llvm-6 37 test? ( >=sys-devel/clang-3.9.0 38 $(python_gen_any_dep 'dev-python/lit[${PYTHON_USEDEP}]') )" 39 40 S=${WORKDIR}/${MY_P} 41 42 # least intrusive of all 43 CMAKE_BUILD_TYPE=RelWithDebInfo 44 45 python_check_deps() { 46 has_version "dev-python/lit[${PYTHON_USEDEP}]" 47 } 48 49 pkg_setup() { 50 llvm_pkg_setup 51 use test && python-any-r1_pkg_setup 52 } 53 54 src_unpack() { 55 default 56 mv "${LIBCXX_P}" libcxx || die 57 } 58 59 multilib_src_configure() { 60 local libdir=$(get_libdir) 61 local mycmakeargs=( 62 -DLIBCXXABI_LIBDIR_SUFFIX=${libdir#lib} 63 -DLIBCXXABI_ENABLE_SHARED=ON 64 -DLIBCXXABI_ENABLE_STATIC=$(usex static-libs) 65 -DLIBCXXABI_USE_LLVM_UNWINDER=$(usex libunwind) 66 -DLIBCXXABI_INCLUDE_TESTS=$(usex test) 67 68 -DLIBCXXABI_LIBCXX_INCLUDES="${WORKDIR}"/libcxx/include 69 # upstream is omitting standard search path for this 70 # probably because gcc & clang are bundling their own unwind.h 71 -DLIBCXXABI_LIBUNWIND_INCLUDES="${EPREFIX}"/usr/include 72 ) 73 if use test; then 74 local clang_path=$(type -P "${CHOST:+${CHOST}-}clang" 2>/dev/null) 75 local jobs=${LIT_JOBS:-$(makeopts_jobs "${MAKEOPTS}" "$(get_nproc)")} 76 77 [[ -n ${clang_path} ]] || die "Unable to find ${CHOST}-clang for tests" 78 79 mycmakeargs+=( 80 -DLLVM_EXTERNAL_LIT="${EPREFIX}/usr/bin/lit" 81 -DLLVM_LIT_ARGS="-vv;-j;${jobs};--param=cxx_under_test=${clang_path}" 82 ) 83 fi 84 cmake-utils_src_configure 85 } 86 87 build_libcxx() { 88 local -x LDFLAGS="${LDFLAGS} -L${BUILD_DIR}/$(get_libdir)" 89 local CMAKE_USE_DIR=${WORKDIR}/libcxx 90 local BUILD_DIR=${BUILD_DIR}/libcxx 91 local mycmakeargs=( 92 -DLIBCXX_LIBDIR_SUFFIX= 93 -DLIBCXX_ENABLE_SHARED=ON 94 -DLIBCXX_ENABLE_STATIC=OFF 95 -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF 96 -DLIBCXX_CXX_ABI=libcxxabi 97 -DLIBCXX_CXX_ABI_INCLUDE_PATHS="${S}"/include 98 -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF 99 -DLIBCXX_HAS_MUSL_LIBC=$(usex elibc_musl) 100 -DLIBCXX_HAS_GCC_S_LIB=OFF 101 -DLIBCXX_INCLUDE_TESTS=OFF 102 ) 103 104 cmake-utils_src_configure 105 cmake-utils_src_compile 106 } 107 108 multilib_src_test() { 109 # build a local copy of libc++ for testing to avoid circular dep 110 build_libcxx 111 mv "${BUILD_DIR}"/libcxx/lib/libc++* "${BUILD_DIR}/$(get_libdir)/" || die 112 113 cmake-utils_src_make check-libcxxabi 114 } 115 116 multilib_src_install_all() { 117 insinto /usr/include/libcxxabi 118 doins -r include/. 119 }