Skip to content

Commit 36b3bb7

Browse files
committed
Add support for targets within MSRV
1 parent 1d2bafc commit 36b3bb7

File tree

5 files changed

+93
-9
lines changed

5 files changed

+93
-9
lines changed

.github/workflows/regenerate-target-info.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ jobs:
1919
git checkout -b regenerate-target-info-${{ github.run_id }}
2020
2121
- name: Install rust
22+
# Install both MSRV and current nightly
2223
run: |
23-
rustup toolchain install stable nightly --no-self-update --profile minimal
24+
rustup toolchain install 1.63 stable nightly --no-self-update --profile minimal
2425
2526
- name: Create lockfile
2627
run: cargo update
27-
28+
2829
- uses: Swatinem/rust-cache@v2
2930
with:
3031
cache-all-crates: 'true'

dev-tools/gen-target-info/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ mod target_specs;
22
pub use target_specs::*;
33

44
mod read;
5-
pub use read::get_target_specs_from_json;
5+
pub use read::*;
66

77
mod write;
88
pub use write::*;

dev-tools/gen-target-info/src/main.rs

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
use std::fs::File;
21
use std::io::Write as _;
2+
use std::{fs::File, io::BufRead};
33

4-
use gen_target_info::{get_target_specs_from_json, RustcTargetSpecs};
4+
use gen_target_info::{
5+
get_target_spec_from_msrv, get_target_specs_from_json, get_targets_msrv, RustcTargetSpecs,
6+
};
57

68
const PRELUDE: &str = r#"//! This file is generated code. Please edit the generator
79
//! in dev-tools/gen-target-info if you need to make changes.
@@ -44,7 +46,17 @@ fn generate_target_mapping(f: &mut File, target_specs: &RustcTargetSpecs) -> std
4446
}
4547

4648
fn main() {
47-
let target_specs = get_target_specs_from_json();
49+
// Primarily use information from nightly.
50+
let mut target_specs = get_target_specs_from_json();
51+
// Next, read from MSRV to support old, removed targets.
52+
for target_triple in get_targets_msrv().lines() {
53+
let target_triple = target_triple.unwrap();
54+
let target_triple = target_triple.trim();
55+
target_specs
56+
.0
57+
.entry(target_triple.to_string())
58+
.or_insert_with(|| get_target_spec_from_msrv(target_triple));
59+
}
4860

4961
// Open file to write to
5062
let manifest_dir = env!("CARGO_MANIFEST_DIR");

dev-tools/gen-target-info/src/read.rs

+42-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,44 @@
11
use std::process;
22

3-
use crate::RustcTargetSpecs;
3+
use crate::{RustcTargetSpecs, TargetSpec};
4+
5+
pub fn get_targets_msrv() -> Vec<u8> {
6+
let mut cmd = process::Command::new("rustc");
7+
cmd.args(["+1.63", "--print", "target-list"]);
8+
cmd.stdout(process::Stdio::piped());
9+
cmd.stderr(process::Stdio::inherit());
10+
11+
let process::Output { status, stdout, .. } = cmd.output().unwrap();
12+
13+
if !status.success() {
14+
panic!("{:?} failed with non-zero exit status: {}", cmd, status)
15+
}
16+
17+
stdout
18+
}
19+
20+
pub fn get_target_spec_from_msrv(target: &str) -> TargetSpec {
21+
let mut cmd = process::Command::new("rustc");
22+
cmd.args([
23+
"+1.63",
24+
"-Zunstable-options",
25+
"--print",
26+
"target-spec-json",
27+
"--target",
28+
target,
29+
]);
30+
cmd.env("RUSTC_BOOTSTRAP", "1");
31+
cmd.stdout(process::Stdio::piped());
32+
cmd.stderr(process::Stdio::inherit());
33+
34+
let process::Output { status, stdout, .. } = cmd.output().unwrap();
35+
36+
if !status.success() {
37+
panic!("{:?} failed with non-zero exit status: {}", cmd, status)
38+
}
39+
40+
serde_json::from_slice(&stdout).unwrap()
41+
}
442

543
pub fn get_target_specs_from_json() -> RustcTargetSpecs {
644
let mut cmd = process::Command::new("rustc");
@@ -9,8 +47,9 @@ pub fn get_target_specs_from_json() -> RustcTargetSpecs {
947
"-Zunstable-options",
1048
"--print",
1149
"all-target-specs-json",
12-
])
13-
.stdout(process::Stdio::piped());
50+
]);
51+
cmd.stdout(process::Stdio::piped());
52+
cmd.stderr(process::Stdio::inherit());
1453

1554
let process::Output { status, stdout, .. } = cmd.output().unwrap();
1655

src/target/generated.rs

+32
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,14 @@ pub(crate) fn get(target_triple: &str) -> Option<Target> {
485485
env: "newlib".into(),
486486
abi: "eabihf".into(),
487487
},
488+
"armv7-apple-ios" => Target {
489+
full_arch: "armv7".into(),
490+
arch: "arm".into(),
491+
vendor: "apple".into(),
492+
os: "ios".into(),
493+
env: "".into(),
494+
abi: "".into(),
495+
},
488496
"armv7-linux-androideabi" => Target {
489497
full_arch: "armv7".into(),
490498
arch: "arm".into(),
@@ -669,6 +677,14 @@ pub(crate) fn get(target_triple: &str) -> Option<Target> {
669677
env: "".into(),
670678
abi: "eabihf".into(),
671679
},
680+
"asmjs-unknown-emscripten" => Target {
681+
full_arch: "asmjs".into(),
682+
arch: "wasm32".into(),
683+
vendor: "unknown".into(),
684+
os: "emscripten".into(),
685+
env: "".into(),
686+
abi: "".into(),
687+
},
672688
"avr-unknown-gnu-atmega328" => Target {
673689
full_arch: "avr".into(),
674690
arch: "avr".into(),
@@ -1885,6 +1901,14 @@ pub(crate) fn get(target_triple: &str) -> Option<Target> {
18851901
env: "msvc".into(),
18861902
abi: "".into(),
18871903
},
1904+
"x86_64-sun-solaris" => Target {
1905+
full_arch: "x86_64".into(),
1906+
arch: "x86_64".into(),
1907+
vendor: "sun".into(),
1908+
os: "solaris".into(),
1909+
env: "".into(),
1910+
abi: "".into(),
1911+
},
18881912
"x86_64-unikraft-linux-musl" => Target {
18891913
full_arch: "x86_64".into(),
18901914
arch: "x86_64".into(),
@@ -2013,6 +2037,14 @@ pub(crate) fn get(target_triple: &str) -> Option<Target> {
20132037
env: "".into(),
20142038
abi: "".into(),
20152039
},
2040+
"x86_64-unknown-none-linuxkernel" => Target {
2041+
full_arch: "x86_64".into(),
2042+
arch: "x86_64".into(),
2043+
vendor: "unknown".into(),
2044+
os: "none".into(),
2045+
env: "gnu".into(),
2046+
abi: "".into(),
2047+
},
20162048
"x86_64-unknown-openbsd" => Target {
20172049
full_arch: "x86_64".into(),
20182050
arch: "x86_64".into(),

0 commit comments

Comments
 (0)