blob: f6fba7352bdeab25a93a7cfc59e2b73ea004c612 [file] [log] [blame]
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI=7
# This is the list of target triples as they appear in the cros_sdk. If this
# list gets changed, ensure that each of these values has a corresponding
# compiler/rustc_target/src/spec file created below and a line referring to it
# in 0001-add-cros-targets.patch.
# shellcheck disable=SC2034 # Used by cros-rustc.eclass
RUSTC_TARGET_TRIPLES=(
x86_64-cros-linux-gnu
armv7a-cros-linux-gnueabihf
aarch64-cros-linux-gnu
)
# In this context BARE means the OS part of the triple is none and gcc is used
# for C/C++ and linking.
# shellcheck disable=SC2034 # Used by cros-rustc.eclass
RUSTC_BARE_TARGET_TRIPLES=(
thumbv6m-none-eabi # Cortex-M0, M0+, M1
thumbv7m-none-eabi # Cortex-M3
thumbv7em-none-eabihf # Cortex-M4F, M7F, FPU, hardfloat
# These UEFI targets are used by and supported for ChromeOS flex;
# contact chromeos-flex-eng@google.com with any questions. Please
# add chromeos-toolchain@google.com if you would like to use any of
# these triples for your project.
i686-unknown-uefi
x86_64-unknown-uefi
)
# shellcheck disable=SC2034
PYTHON_COMPAT=( python3_{6..9} )
inherit cros-rustc
# Use PVR to require simultaneous uprevs of both rust-host and rust, since
# they're logically talking about the same sources.
BDEPEND="=dev-lang/rust-host-${PVR} sys-devel/llvm"
RDEPEND="=dev-lang/rust-host-${PVR}"
KEYWORDS="*"
# NOTE: since CROS_RUSTC_BUILD_DIR is a local cache, the cases below can't
# always presume that it exists.
src_unpack() {
if [[ -n "${CROS_RUSTC_BUILD_RAW_SOURCES}" ]]; then
if ! cros-rustc_has_existing_checkout; then
eerror "No existing checkout detected; build rust-host first."
die
fi
# Unpacking consists only of ensuring symlink validity in this
# case.
cros-rustc_src_unpack
elif cros-rustc_has_existing_checkout; then
einfo "Skipping unpack; checkout already exists"
cros-rustc_setup_portage_dirs
else
ewarn "No existing cros-rustc checkout found. Did you" \
"remember to emerge dev-lang/rust-host?"
cros-rustc_src_unpack
fi
}
src_prepare() {
if cros-rustc_has_existing_checkout; then
einfo "Skipping src_prepare; checkout already exists"
# `src_prepare` requires this to be called before exiting. The
# actual use of user patches with this ebuild is not supported.
eapply_user
else
cros-rustc_src_prepare
fi
}
src_compile() {
local keep_stages=()
if cros-rustc_has_existing_stage1_build; then
einfo "Stage1 build exists; instructing x.py to use it"
keep_stages=("--keep-stage=0" "--keep-stage=1")
fi
cros-rustc_src_compile "${keep_stages[@]}" library
}
src_install() {
# shellcheck disable=SC2154 # Defined in cros-rustc.eclass
local obj="${CROS_RUSTC_BUILD_DIR}/${CHOST}/stage2"
for triple in "${RUSTC_TARGET_TRIPLES[@]}" "${RUSTC_BARE_TARGET_TRIPLES[@]}"; do
insinto "/usr/$(get_libdir)/rustlib/${triple}"
doins -r "${obj}/lib64/rustlib/${triple}/"*
done
}