Gentoo Archives: gentoo-commits

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