# Copyright 1999-2019 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=6 : ${CMAKE_MAKEFILE_GENERATOR:=ninja} # (needed due to CMAKE_BUILD_TYPE != Gentoo) CMAKE_MIN_VERSION=3.7.0-r1 PYTHON_COMPAT=( python{2_7,3_4,3_5,3_6} ) inherit cmake-multilib llvm multiprocessing python-any-r1 MY_P=libunwind-${PV/_/}.src LIBCXX_P=libcxx-${PV/_/}.src LIBCXXABI_P=libcxxabi-${PV/_/}.src DESCRIPTION="C++ runtime stack unwinder from LLVM" HOMEPAGE="https://github.com/llvm-mirror/libunwind" SRC_URI="https://prereleases.llvm.org/${PV/_//}/${MY_P}.tar.xz test? ( https://prereleases.llvm.org/${PV/_//}/${LIBCXX_P}.tar.xz https://prereleases.llvm.org/${PV/_//}/${LIBCXXABI_P}.tar.xz )" LICENSE="|| ( UoI-NCSA MIT )" SLOT="0" KEYWORDS="~amd64 ~arm ~arm64 ~x86 ~amd64-fbsd" IUSE="debug +static-libs test" RESTRICT="!test? ( test )" RDEPEND="!sys-libs/libunwind" # llvm-6 for new lit options DEPEND=" >=sys-devel/llvm-6 test? ( >=sys-devel/clang-3.9.0 $(python_gen_any_dep 'dev-python/lit[${PYTHON_USEDEP}]') )" S=${WORKDIR}/${MY_P} # least intrusive of all CMAKE_BUILD_TYPE=RelWithDebInfo python_check_deps() { has_version "dev-python/lit[${PYTHON_USEDEP}]" } pkg_setup() { use test && python-any-r1_pkg_setup } src_unpack() { default if use test; then mv "${LIBCXX_P}" libcxx || die mv "${LIBCXXABI_P}" libcxxabi || die fi } multilib_src_configure() { local libdir=$(get_libdir) local mycmakeargs=( -DLLVM_LIBDIR_SUFFIX=${libdir#lib} -DLIBUNWIND_ENABLE_ASSERTIONS=$(usex debug) -DLIBUNWIND_ENABLE_STATIC=$(usex static-libs) -DLLVM_INCLUDE_TESTS=$(usex test) # support non-native unwinding; given it's small enough, # enable it unconditionally -DLIBUNWIND_ENABLE_CROSS_UNWINDING=ON ) if use test; then local clang_path=$(type -P "${CHOST:+${CHOST}-}clang" 2>/dev/null) local jobs=${LIT_JOBS:-$(makeopts_jobs "${MAKEOPTS}" "$(get_nproc)")} [[ -n ${clang_path} ]] || die "Unable to find ${CHOST}-clang for tests" mycmakeargs+=( -DLLVM_EXTERNAL_LIT="${EPREFIX}/usr/bin/lit" -DLLVM_LIT_ARGS="-vv;-j;${jobs};--param=cxx_under_test=${clang_path}" -DLIBUNWIND_LIBCXX_PATH="${WORKDIR}"/libcxx ) fi cmake-utils_src_configure } build_libcxxabi() { local -x LDFLAGS="${LDFLAGS} -L${BUILD_DIR}/$(get_libdir)" local CMAKE_USE_DIR=${WORKDIR}/libcxxabi local BUILD_DIR=${BUILD_DIR}/libcxxabi local mycmakeargs=( -DLIBCXXABI_LIBDIR_SUFFIX= -DLIBCXXABI_ENABLE_SHARED=ON -DLIBCXXABI_ENABLE_STATIC=OFF -DLIBCXXABI_USE_LLVM_UNWINDER=ON -DLIBCXXABI_INCLUDE_TESTS=OFF -DLIBCXXABI_LIBCXX_INCLUDES="${WORKDIR}"/libcxx/include -DLIBCXXABI_LIBUNWIND_INCLUDES="${S}"/include ) cmake-utils_src_configure cmake-utils_src_compile } build_libcxx() { local -x LDFLAGS="${LDFLAGS} -L${BUILD_DIR}/libcxxabi/lib -L${BUILD_DIR}/$(get_libdir)" local CMAKE_USE_DIR=${WORKDIR}/libcxx local BUILD_DIR=${BUILD_DIR}/libcxx local mycmakeargs=( -DLIBCXX_LIBDIR_SUFFIX= -DLIBCXX_ENABLE_SHARED=ON -DLIBCXX_ENABLE_STATIC=OFF -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF -DLIBCXXABI_USE_LLVM_UNWINDER=ON -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_CXX_ABI_INCLUDE_PATHS="${WORKDIR}"/libcxxabi/include -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF -DLIBCXX_HAS_MUSL_LIBC=$(usex elibc_musl) -DLIBCXX_HAS_GCC_S_LIB=OFF -DLIBCXX_INCLUDE_TESTS=OFF ) cmake-utils_src_configure cmake-utils_src_compile } multilib_src_test() { # build local copies of libc++ & libc++abi for testing to avoid # circular deps build_libcxxabi build_libcxx mv "${BUILD_DIR}"/libcxx*/lib/libc++* "${BUILD_DIR}/$(get_libdir)/" || die cmake-utils_src_make check-unwind } multilib_src_install() { cmake-utils_src_install # install headers like sys-libs/libunwind doheader "${S}"/include/*.h }