Skip to content

Commit 60eddf8

Browse files
committed
target-spec: move query_rustc_version to *spirv-types
1 parent c7088a6 commit 60eddf8

File tree

3 files changed

+23
-18
lines changed

3 files changed

+23
-18
lines changed

crates/rustc_codegen_spirv-types/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
pub use rspirv::spirv::Capability;
44

55
mod compile_result;
6+
mod rustc_version;
67
mod target_spec;
78
pub use compile_result::*;
9+
pub use rustc_version::*;
810
pub use target_spec::*;
911

1012
// HACK(eddyb) allows downstream crates to access the correct version directly.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
use semver::Version;
2+
use std::process::Command;
3+
4+
pub fn query_rustc_version(toolchain: Option<&str>) -> std::io::Result<Version> {
5+
let mut cmd = Command::new("rustc");
6+
if let Some(toolchain) = toolchain {
7+
cmd.arg(format!("+{toolchain}"));
8+
}
9+
cmd.arg("--version");
10+
let output = cmd.output()?;
11+
12+
let stdout = String::from_utf8(output.stdout).expect("stdout must be utf-8");
13+
let parse = |output: &str| {
14+
let output = output.strip_prefix("rustc ")?;
15+
let version = &output[..output.find(|c| !"0123456789.".contains(c))?];
16+
Version::parse(version).ok()
17+
};
18+
Ok(parse(&stdout)
19+
.unwrap_or_else(|| panic!("failed parsing `rustc --version` output `{stdout}`")))
20+
}

crates/spirv-builder/src/lib.rs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ use thiserror::Error;
9191
#[cfg(feature = "watch")]
9292
pub use self::watch::{SpirvWatcher, SpirvWatcherError};
9393
pub use rustc_codegen_spirv_types::Capability;
94+
use rustc_codegen_spirv_types::query_rustc_version;
9495
pub use rustc_codegen_spirv_types::{CompileResult, ModuleResult, TargetSpecVersion};
9596

9697
#[derive(Debug, Error)]
@@ -1126,21 +1127,3 @@ fn leaf_deps(artifact: &Path, mut handle: impl FnMut(&RawStr)) -> std::io::Resul
11261127
recurse(&deps_map, artifact.to_str().unwrap().into(), &mut handle);
11271128
Ok(())
11281129
}
1129-
1130-
pub fn query_rustc_version(toolchain: Option<&str>) -> std::io::Result<Version> {
1131-
let mut cmd = Command::new("rustc");
1132-
if let Some(toolchain) = toolchain {
1133-
cmd.arg(format!("+{toolchain}"));
1134-
}
1135-
cmd.arg("--version");
1136-
let output = cmd.output()?;
1137-
1138-
let stdout = String::from_utf8(output.stdout).expect("stdout must be utf-8");
1139-
let parse = |output: &str| {
1140-
let output = output.strip_prefix("rustc ")?;
1141-
let version = &output[..output.find(|c| !"0123456789.".contains(c))?];
1142-
Version::parse(version).ok()
1143-
};
1144-
Ok(parse(&stdout)
1145-
.unwrap_or_else(|| panic!("failed parsing `rustc --version` output `{stdout}`")))
1146-
}

0 commit comments

Comments
 (0)