blob: 5961d70add761685b23053bb8c842413c0a1cbad [file] [log] [blame]
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
EAPI=5
inherit eutils toolchain-funcs cros-constants cmake-utils git-2
EGIT_REPO_URI=${CROS_GIT_HOST_URL}/chromiumos/third_party/compiler-rt.git
DESCRIPTION="Compiler runtime library for clang"
HOMEPAGE="http://compiler-rt.llvm.org/"
LICENSE="UoI-NCSA"
SLOT="0"
KEYWORDS="*"
IUSE="llvm-next"
DEPEND="sys-devel/llvm"
if [[ ${CATEGORY} == cross-* ]] ; then
DEPEND+="
${CATEGORY}/binutils
${CATEGORY}/gcc
"
fi
export CBUILD=${CBUILD:-${CHOST}}
export CTARGET=${CTARGET:-${CHOST}}
if [[ ${CTARGET} == ${CHOST} ]] ; then
if [[ ${CATEGORY} == cross-* ]] ; then
export CTARGET=${CATEGORY#cross-}
fi
fi
src_unpack() {
if use llvm-next; then
EGIT_COMMIT="671ef704cfa72856adc7c9a3686a21cb3c1c00ab" #r307448
else
EGIT_COMMIT="059c103b581e37d2be47cb403769bff20808bca2" #r300080
fi
git-2_src_unpack
}
src_prepare() {
# Cherry-picks
CHERRIES=""
if use llvm-next ; then
CHERRIES=""
else
CHERRIES+=" 385d9f6d5abb6b2d4ea27e59ac1e7b0e20d54f7c " # r300531
CHERRIES+=" 46a48e5918ab64e40ed8b929fdb8d2ff4117cfa1 " # r301243
CHERRIES+=" 96eed06b6e57a3c8e2593e73d6f33bdd407f43b9 " # r303112
CHERRIES+=" 99e2e66daf8d334858cec4f6e8e7a39d6a535a55 " # r303188
CHERRIES+=" c74078b0a058c70de3504cb2533352ee48e71836 " # r303190
CHERRIES+=" e60a00c0dfb05bad4912315912b70fa35050a058 " # r303195
fi
for cherry in ${CHERRIES}; do
epatch "${FILESDIR}/cherry/${cherry}.patch"
done
# Apply patches
if use llvm-next; then
# leak-whitelist patch does not cleanly apply to llvm-next.
epatch "${FILESDIR}"/llvm-next-leak-whitelist.patch
else
epatch "${FILESDIR}"/llvm-4.0-leak-whitelist.patch
fi
epatch "${FILESDIR}"/clang-4.0-asan-default-path.patch
}
src_configure() {
export CC="${CTARGET}-gcc ${LDFLAGS}"
export CXX="${CTARGET}-g++ ${LDFLAGS}"
export STRIP="$(tc-getSTRIP ${CTARGET})"
export OBJCOPY="$(tc-getOBJCOPY ${CTARGET})"
append-flags -fomit-frame-pointer
if [[ ${CATEGORY} == cross-armv7a* ]] ; then
# Use vfpv3 to be able to target non-neon targets
append-flags -mfpu=vfpv3
fi
BUILD_DIR=${WORKDIR}/${P}_build
local libdir=$(get_libdir)
local llvm_version=$(llvm-config --version)
# Strip git and svn from llvm_version string
local clang_version=${llvm_version%svn*}
clang_version=${clang_version%git*}
local mycmakeargs=(
"${mycmakeargs[@]}"
-DCOMPILER_RT_TEST_TARGET_TRIPLE="${CTARGET}"
-DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/${libdir}/clang/${clang_version}"
-DCOMPILER_RT_OUTPUT_DIR="${BUILD_DIR}/${libdir}/clang/${clang_version}"
)
cmake-utils_src_configure
}
src_install() {
cmake-utils_src_install
# includes and docs are installed for all sanitizers and xray
# These files conflict with files provided in llvm ebuild
rm -rf "${ED}"usr/share || die
rm -rf "${ED}"usr/$(get_libdir)/clang/*/include || die
rm -f "${ED}"usr/$(get_libdir)/clang/*/asan_blacklist.txt || die
rm -f "${ED}"usr/$(get_libdir)/clang/*/msan_blacklist.txt || die
rm -f "${ED}"usr/$(get_libdir)/clang/*/dfsan_abilist.txt || die
rm -f "${ED}"usr/$(get_libdir)/clang/*/dfsan_blacklist.txt || die
}