From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 2F28E138334 for ; Mon, 15 Oct 2018 19:41:56 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 42919E0874; Mon, 15 Oct 2018 19:41:52 +0000 (UTC) Received: from enrai.xavamedia.nl (enrai.xavamedia.nl [217.115.195.245]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id BD14DE083E for ; Mon, 15 Oct 2018 19:41:50 +0000 (UTC) Received: by enrai.xavamedia.nl (Postfix, from userid 1000) id CAB9C900042; Mon, 15 Oct 2018 21:41:48 +0200 (CEST) From: Dirkjan Ochtman To: gentoo-dev@lists.gentoo.org Cc: Dirkjan Ochtman Subject: [gentoo-dev] [PATCH] eclass: add rust-toolchain.eclass Date: Mon, 15 Oct 2018 21:41:35 +0200 Message-Id: <20181015194135.24123-1-djc@gentoo.org> X-Mailer: git-send-email 2.18.1 Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Archives-Salt: e2541b61-184e-44a3-8c6d-26394778bb1e X-Archives-Hash: 2cfeeed29233f3529d2d0be1c9e6a445 Signed-off-by: Dirkjan Ochtman --- 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 +# @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: [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 [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