summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/rust/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/rust/package.py')
-rw-r--r--var/spack/repos/builtin/packages/rust/package.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/var/spack/repos/builtin/packages/rust/package.py b/var/spack/repos/builtin/packages/rust/package.py
index 990095c90f..abfd4e8e0b 100644
--- a/var/spack/repos/builtin/packages/rust/package.py
+++ b/var/spack/repos/builtin/packages/rust/package.py
@@ -55,6 +55,12 @@ class Rust(Package):
default=True,
description='Install Rust source files'
)
+ variant(
+ 'extra_targets',
+ default=(),
+ multi=True,
+ description='Triples for extra targets to enable. For supported targets, see: https://doc.rust-lang.org/nightly/rustc/platform-support.html'
+ )
depends_on('python@2.7:', type='build')
depends_on('python@2.7:2.8', when='@:1.43', type='build')
@@ -496,6 +502,14 @@ class Rust(Package):
ar = which('ar', required=True)
+ extra_targets = list(self.spec.variants['extra_targets'].value)
+ targets = [self.get_rust_target()] + extra_targets
+ target_spec = 'target=[' + \
+ ','.join('"{0}"'.format(target) for target in targets) + ']'
+ target_specs = '\n'.join(
+ '[target.{0}]\nar = "{1}"\n'.format(target, ar.path)
+ for target in targets)
+
# build.tools was introduced in Rust 1.25
tools_spec = \
'tools={0}'.format(tools) if self.check_newer('1.25') else ''
@@ -529,6 +543,7 @@ docs = false
vendor = true
extended = true
verbose = 2
+{target_spec}
{tools_spec}
{rustfmt_spec}
@@ -537,8 +552,7 @@ channel = "stable"
rpath = true
{deny_warnings_spec}
-[target.{target}]
-ar = "{ar}"
+{target_specs}
[install]
prefix = "{prefix}"
@@ -547,9 +561,9 @@ sysconfdir = "etc"
cargo=join_path(boot_bin, 'cargo'),
rustc=join_path(boot_bin, 'rustc'),
prefix=prefix,
- target=target,
deny_warnings_spec=deny_warnings_spec,
- ar=ar.path,
+ target_spec=target_spec,
+ target_specs=target_specs,
tools_spec=tools_spec,
rustfmt_spec=rustfmt_spec
)