* [gentoo-dev] [PATCH] eclass: add rust-toolchain.eclass
@ 2018-10-15 19:41 99% Dirkjan Ochtman
0 siblings, 0 replies; 1+ results
From: Dirkjan Ochtman @ 2018-10-15 19:41 UTC (permalink / raw
To: gentoo-dev; +Cc: Dirkjan Ochtman
Signed-off-by: Dirkjan Ochtman <djc@gentoo.org>
---
eclass/rust-toolchain.eclass | 120 +++++++++++++++++++++++++++++++++++
1 file changed, 120 insertions(+)
create mode 100644 eclass/rust-toolchain.eclass
diff --git a/eclass/rust-toolchain.eclass b/eclass/rust-toolchain.eclass
new file mode 100644
index 00000000000..d09db264fc3
--- /dev/null
+++ b/eclass/rust-toolchain.eclass
@@ -0,0 +1,120 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+# @ECLASS: rust-toolchain.eclass
+# @MAINTAINER:
+# Rust Project <rust@gentoo.org>
+# @SUPPORTED_EAPIS: 6
+# @BLURB: helps map gentoo arches to rust ABIs
+# @DESCRIPTION:
+# This eclass contains a src_unpack default phase function, and
+# helper functions, to aid in proper rust-ABI handling for various
+# gentoo arches.
+
+case ${EAPI} in
+ 6) : ;;
+ 7) : ;;
+ *) die "EAPI=${EAPI:-0} is not supported" ;;
+esac
+
+inherit multilib-build
+
+# @ECLASS-VARIABLE: RUST_TOOLCHAIN_BASEURL
+# @DESCRIPTION:
+# This variable specifies the base URL used by the
+# rust_arch_uri and rust_all_arch_uris functions when
+# generating the URI output list.
+: ${RUST_TOOLCHAIN_BASEURL:=https://static.rust-lang.org/dist/}
+
+# @FUNCTION: rust_abi
+# @USAGE: [CHOST-value]
+# @DESCRIPTION:
+# Outputs the Rust ABI name from a CHOST value, uses CHOST in the
+# environment if none is specified.
+
+rust_abi() {
+ local CTARGET=${1:-${CHOST}}
+ case ${CTARGET%%*-} in
+ aarch64*) echo aarch64-unknown-linux-gnu;;
+ mips64*) echo mips64-unknown-linux-gnuabi64;;
+ powerpc64le*) echo powerpc64le-unknown-linux-gnu;;
+ powerpc64*) echo powerpc64-unknown-linux-gnu;;
+ x86_64*) echo x86_64-unknown-linux-gnu;;
+ armv6j*s*) echo arm-unknown-linux-gnueabi;;
+ armv6j*h*) echo arm-unknown-linux-gnueabihf;;
+ armv7a*h*) echo armv7-unknown-linux-gnueabihf;;
+ i?86*) echo i686-unknown-linux-gnu;;
+ mipsel*) echo mipsel-unknown-linux-gnu;;
+ mips*) echo mips-unknown-linux-gnu;;
+ powerpc*) echo powerpc-unknown-linux-gnu;;
+ s390x*) echo s390x-unknown-linux-gnu;;
+ *) echo ${CTARGET};;
+ esac
+}
+
+# @FUNCTION: rust_all_abis
+# @DESCRIPTION:
+# Outputs a list of all the enabled Rust ABIs
+rust_all_abis() {
+ if use multilib; then
+ local abi
+ local ALL_ABIS=()
+ for abi in $(multilib_get_enabled_abis); do
+ ALL_ABIS+=( $(rust_abi $(get_abi_CHOST ${abi})) )
+ done
+ local abi_list
+ IFS=, eval 'abi_list=${ALL_ABIS[*]}'
+ echo ${abi_list}
+ else
+ rust_abi
+ fi
+}
+
+# @FUNCTION: rust_arch_uri
+# @USAGE: <rust-ABI> <base-uri> [alt-distfile-basename]
+# @DESCRIPTION:
+# Output the URI for use in SRC_URI, combining $RUST_TOOLCHAIN_BASEURL
+# and the URI suffix provided in ARG2 with the rust ABI in ARG1, and
+# optionally renaming to the distfile basename specified in ARG3.
+#
+# @EXAMPLE:
+# SRC_URI="amd64? (
+# $(rust_arch_uri x86_64-unknown-linux-gnu rustc-${STAGE0_VERSION})
+# )"
+#
+rust_arch_uri() {
+ if [ -n "$3" ]; then
+ echo "${RUST_TOOLCHAIN_BASEURL}${2}-${1}.tar.gz -> ${3}-${1}.tar.gz"
+ else
+ echo "${RUST_TOOLCHAIN_BASEURL}${2}-${1}.tar.gz"
+ fi
+}
+
+# @FUNCTION: rust_all_arch_uris
+# @USAGE <base-uri> [alt-distfile-basename]
+# @DESCRIPTION:
+# Outputs the URIs for SRC_URI to help fetch dependencies, using a base URI
+# provided as an argument. Optionally allows for distfile renaming via a specified
+# basename.
+#
+# @EXAMPLE:
+# SRC_URI="$(rust_all_arch_uris rustc-${STAGE0_VERSION})"
+#
+rust_all_arch_uris()
+{
+ local uris=""
+ uris+="amd64? ( $(rust_arch_uri x86_64-unknown-linux-gnu "$@") ) "
+ uris+="arm? ( $(rust_arch_uri arm-unknown-linux-gnueabi "$@")
+ $(rust_arch_uri arm-unknown-linux-gnueabihf "$@")
+ $(rust_arch_uri armv7-unknown-linux-gnueabihf "$@") ) "
+ uris+="arm64? ( $(rust_arch_uri aarch64-unknown-linux-gnu "$@") ) "
+ uris+="mips? ( $(rust_arch_uri mips-unknown-linux-gnu "$@")
+ $(rust_arch_uri mipsel-unknown-linux-gnu "$@")
+ $(rust_arch_uri mips64-unknown-linux-gnuabi64 "$@") ) "
+ uris+="ppc? ( $(rust_arch_uri powerpc-unknown-linux-gnu "$@") ) "
+ uris+="ppc64? ( $(rust_arch_uri powerpc64-unknown-linux-gnu "$@")
+ $(rust_arch_uri powerpc64le-unknown-linux-gnu "$@") ) "
+ uris+="s390? ( $(rust_arch_uri s390x-unknown-linux-gnu "$@") ) "
+ uris+="x86? ( $(rust_arch_uri i686-unknown-linux-gnu "$@") ) "
+ echo "${uris}"
+}
--
2.18.1
^ permalink raw reply related [relevance 99%]
Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2018-10-15 19:41 99% [gentoo-dev] [PATCH] eclass: add rust-toolchain.eclass Dirkjan Ochtman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox