Gentoo Archives: gentoo-dev

From: Dirkjan Ochtman <djc@g.o>
To: gentoo-dev@l.g.o
Cc: Dirkjan Ochtman <djc@g.o>
Subject: [gentoo-dev] [PATCH] eclass: add rust-toolchain.eclass
Date: Mon, 15 Oct 2018 19:41:56
Message-Id: 20181015194135.24123-1-djc@gentoo.org
1 Signed-off-by: Dirkjan Ochtman <djc@g.o>
2 ---
3 eclass/rust-toolchain.eclass | 120 +++++++++++++++++++++++++++++++++++
4 1 file changed, 120 insertions(+)
5 create mode 100644 eclass/rust-toolchain.eclass
6
7 diff --git a/eclass/rust-toolchain.eclass b/eclass/rust-toolchain.eclass
8 new file mode 100644
9 index 00000000000..d09db264fc3
10 --- /dev/null
11 +++ b/eclass/rust-toolchain.eclass
12 @@ -0,0 +1,120 @@
13 +# Copyright 1999-2018 Gentoo Foundation
14 +# Distributed under the terms of the GNU General Public License v2
15 +
16 +# @ECLASS: rust-toolchain.eclass
17 +# @MAINTAINER:
18 +# Rust Project <rust@g.o>
19 +# @SUPPORTED_EAPIS: 6
20 +# @BLURB: helps map gentoo arches to rust ABIs
21 +# @DESCRIPTION:
22 +# This eclass contains a src_unpack default phase function, and
23 +# helper functions, to aid in proper rust-ABI handling for various
24 +# gentoo arches.
25 +
26 +case ${EAPI} in
27 + 6) : ;;
28 + 7) : ;;
29 + *) die "EAPI=${EAPI:-0} is not supported" ;;
30 +esac
31 +
32 +inherit multilib-build
33 +
34 +# @ECLASS-VARIABLE: RUST_TOOLCHAIN_BASEURL
35 +# @DESCRIPTION:
36 +# This variable specifies the base URL used by the
37 +# rust_arch_uri and rust_all_arch_uris functions when
38 +# generating the URI output list.
39 +: ${RUST_TOOLCHAIN_BASEURL:=https://static.rust-lang.org/dist/}
40 +
41 +# @FUNCTION: rust_abi
42 +# @USAGE: [CHOST-value]
43 +# @DESCRIPTION:
44 +# Outputs the Rust ABI name from a CHOST value, uses CHOST in the
45 +# environment if none is specified.
46 +
47 +rust_abi() {
48 + local CTARGET=${1:-${CHOST}}
49 + case ${CTARGET%%*-} in
50 + aarch64*) echo aarch64-unknown-linux-gnu;;
51 + mips64*) echo mips64-unknown-linux-gnuabi64;;
52 + powerpc64le*) echo powerpc64le-unknown-linux-gnu;;
53 + powerpc64*) echo powerpc64-unknown-linux-gnu;;
54 + x86_64*) echo x86_64-unknown-linux-gnu;;
55 + armv6j*s*) echo arm-unknown-linux-gnueabi;;
56 + armv6j*h*) echo arm-unknown-linux-gnueabihf;;
57 + armv7a*h*) echo armv7-unknown-linux-gnueabihf;;
58 + i?86*) echo i686-unknown-linux-gnu;;
59 + mipsel*) echo mipsel-unknown-linux-gnu;;
60 + mips*) echo mips-unknown-linux-gnu;;
61 + powerpc*) echo powerpc-unknown-linux-gnu;;
62 + s390x*) echo s390x-unknown-linux-gnu;;
63 + *) echo ${CTARGET};;
64 + esac
65 +}
66 +
67 +# @FUNCTION: rust_all_abis
68 +# @DESCRIPTION:
69 +# Outputs a list of all the enabled Rust ABIs
70 +rust_all_abis() {
71 + if use multilib; then
72 + local abi
73 + local ALL_ABIS=()
74 + for abi in $(multilib_get_enabled_abis); do
75 + ALL_ABIS+=( $(rust_abi $(get_abi_CHOST ${abi})) )
76 + done
77 + local abi_list
78 + IFS=, eval 'abi_list=${ALL_ABIS[*]}'
79 + echo ${abi_list}
80 + else
81 + rust_abi
82 + fi
83 +}
84 +
85 +# @FUNCTION: rust_arch_uri
86 +# @USAGE: <rust-ABI> <base-uri> [alt-distfile-basename]
87 +# @DESCRIPTION:
88 +# Output the URI for use in SRC_URI, combining $RUST_TOOLCHAIN_BASEURL
89 +# and the URI suffix provided in ARG2 with the rust ABI in ARG1, and
90 +# optionally renaming to the distfile basename specified in ARG3.
91 +#
92 +# @EXAMPLE:
93 +# SRC_URI="amd64? (
94 +# $(rust_arch_uri x86_64-unknown-linux-gnu rustc-${STAGE0_VERSION})
95 +# )"
96 +#
97 +rust_arch_uri() {
98 + if [ -n "$3" ]; then
99 + echo "${RUST_TOOLCHAIN_BASEURL}${2}-${1}.tar.gz -> ${3}-${1}.tar.gz"
100 + else
101 + echo "${RUST_TOOLCHAIN_BASEURL}${2}-${1}.tar.gz"
102 + fi
103 +}
104 +
105 +# @FUNCTION: rust_all_arch_uris
106 +# @USAGE <base-uri> [alt-distfile-basename]
107 +# @DESCRIPTION:
108 +# Outputs the URIs for SRC_URI to help fetch dependencies, using a base URI
109 +# provided as an argument. Optionally allows for distfile renaming via a specified
110 +# basename.
111 +#
112 +# @EXAMPLE:
113 +# SRC_URI="$(rust_all_arch_uris rustc-${STAGE0_VERSION})"
114 +#
115 +rust_all_arch_uris()
116 +{
117 + local uris=""
118 + uris+="amd64? ( $(rust_arch_uri x86_64-unknown-linux-gnu "$@") ) "
119 + uris+="arm? ( $(rust_arch_uri arm-unknown-linux-gnueabi "$@")
120 + $(rust_arch_uri arm-unknown-linux-gnueabihf "$@")
121 + $(rust_arch_uri armv7-unknown-linux-gnueabihf "$@") ) "
122 + uris+="arm64? ( $(rust_arch_uri aarch64-unknown-linux-gnu "$@") ) "
123 + uris+="mips? ( $(rust_arch_uri mips-unknown-linux-gnu "$@")
124 + $(rust_arch_uri mipsel-unknown-linux-gnu "$@")
125 + $(rust_arch_uri mips64-unknown-linux-gnuabi64 "$@") ) "
126 + uris+="ppc? ( $(rust_arch_uri powerpc-unknown-linux-gnu "$@") ) "
127 + uris+="ppc64? ( $(rust_arch_uri powerpc64-unknown-linux-gnu "$@")
128 + $(rust_arch_uri powerpc64le-unknown-linux-gnu "$@") ) "
129 + uris+="s390? ( $(rust_arch_uri s390x-unknown-linux-gnu "$@") ) "
130 + uris+="x86? ( $(rust_arch_uri i686-unknown-linux-gnu "$@") ) "
131 + echo "${uris}"
132 +}
133 --
134 2.18.1

Replies

Subject Author
Re: [gentoo-dev] [PATCH] eclass: add rust-toolchain.eclass "Michał Górny" <mgorny@g.o>