Skip to content

Commit 22ab4d1

Browse files
committed
Allow setting default target via Cross.toml
N.B. `Debug` is needed for `TargetList` as linting rules demand it.
1 parent 913f457 commit 22ab4d1

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

src/config.rs

+16-2
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ impl Config {
188188
if let Some(env_value) = self.env.target() {
189189
return Ok(Some(Target::from(&env_value, target_list)));
190190
}
191-
Ok(None)
191+
self.toml.as_ref().map_or(Ok(None), |t| t.target(target_list))
192192
}
193193

194194
fn sum_of_env_toml_values<'a>(
@@ -402,6 +402,20 @@ mod tests {
402402
Ok(())
403403
}
404404

405+
#[test]
406+
pub fn no_env_but_toml_default_target_then_use_toml() -> Result<()> {
407+
let env = Environment::new(None);
408+
let config = Config::new_with(Some(toml(TOML_DEFAULT_TARGET)?), env);
409+
410+
let config_target = config.target(&target_list())?.unwrap();
411+
assert!(matches!(
412+
config_target.triple(),
413+
"aarch64-unknown-linux-gnu"
414+
));
415+
416+
Ok(())
417+
}
418+
405419
static TOML_BUILD_XARGO_FALSE: &str = r#"
406420
[build]
407421
xargo = false
@@ -421,7 +435,7 @@ mod tests {
421435

422436
static TOML_DEFAULT_TARGET: &str = r#"
423437
[build]
424-
default = "aarch64-unknown-linux-gnu"
438+
target = "aarch64-unknown-linux-gnu"
425439
"#;
426440
}
427441
}

src/main.rs

+12
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,18 @@ impl Toml {
485485
self.target_env(target, "volumes")
486486
}
487487

488+
/// Returns the default target to build,
489+
pub fn target(&self, target_list: &TargetList) -> Result<Option<Target>> {
490+
if let Some(value) = self.table.get("build").and_then(|t| t.get("target")) {
491+
let value = value
492+
.as_str()
493+
.ok_or_else(|| "build.target must be a string".to_string())?;
494+
Ok(Some(Target::from(&value, target_list)))
495+
} else {
496+
Ok(None)
497+
}
498+
}
499+
488500
fn target_env(&self, target: &Target, key: &str) -> Result<Vec<&str>> {
489501
let triple = target.triple();
490502

src/rustc.rs

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use crate::{Host, Target};
77
use crate::errors::*;
88
use crate::extensions::CommandExt;
99

10+
#[derive(Debug)]
1011
pub struct TargetList {
1112
pub triples: Vec<String>,
1213
}

0 commit comments

Comments
 (0)