diff options
Diffstat (limited to 'sys-libs/llvm-libunwind/llvm-libunwind-6.0.0.ebuild')
-rw-r--r-- | sys-libs/llvm-libunwind/llvm-libunwind-6.0.0.ebuild | 74 |
1 files changed, 61 insertions, 13 deletions
diff --git a/sys-libs/llvm-libunwind/llvm-libunwind-6.0.0.ebuild b/sys-libs/llvm-libunwind/llvm-libunwind-6.0.0.ebuild index b895e49449da..a276429001f4 100644 --- a/sys-libs/llvm-libunwind/llvm-libunwind-6.0.0.ebuild +++ b/sys-libs/llvm-libunwind/llvm-libunwind-6.0.0.ebuild @@ -11,27 +11,26 @@ 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://releases.llvm.org/${PV/_//}/${MY_P}.tar.xz - test? ( https://releases.llvm.org/${PV/_//}/${LIBCXX_P}.tar.xz )" + test? ( + https://releases.llvm.org/${PV/_//}/${LIBCXX_P}.tar.xz + https://releases.llvm.org/${PV/_//}/${LIBCXXABI_P}.tar.xz )" LICENSE="|| ( UoI-NCSA MIT )" SLOT="0" -KEYWORDS="~amd64 ~x86 ~amd64-fbsd" +KEYWORDS="~amd64 ~arm64 ~x86 ~amd64-fbsd" IUSE="debug +static-libs test" RESTRICT="!test? ( test )" RDEPEND="!sys-libs/libunwind" # llvm-6 for new lit options -# tests need libcxx with implicit -lunwind and libcxxabi -# (but libcxx does not need to be built against it) DEPEND=" >=sys-devel/llvm-6 - test? ( - sys-libs/libcxx[libunwind,${MULTILIB_USEDEP}] - sys-libs/libcxxabi + test? ( >=sys-devel/clang-3.9.0 $(python_gen_any_dep 'dev-python/lit[${PYTHON_USEDEP}]') )" S=${WORKDIR}/${MY_P} @@ -48,14 +47,11 @@ pkg_setup() { } src_unpack() { - einfo "Unpacking ${MY_P}.tar.xz ..." - tar -xf "${DISTDIR}/${MY_P}.tar.xz" || die + default if use test; then - einfo "Unpacking parts of ${LIBCXX_P}.tar.xz ..." - tar -xf "${DISTDIR}/${LIBCXX_P}.tar.xz" \ - "${LIBCXX_P}"/{include,utils/libcxx} || die mv "${LIBCXX_P}" libcxx || die + mv "${LIBCXXABI_P}" libcxxabi || die fi } @@ -73,9 +69,14 @@ multilib_src_configure() { -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;${LIT_JOBS:-$(makeopts_jobs "${MAKEOPTS}" "$(get_nproc)")}" + -DLLVM_LIT_ARGS="-vv;-j;${jobs};--param=cxx_under_test=${clang_path}" -DLIBUNWIND_LIBCXX_PATH="${WORKDIR}"/libcxx ) fi @@ -83,7 +84,54 @@ multilib_src_configure() { 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 } |