Auto merge of #152721 - ehuss:beta-revert-target-spec, r=jackh726
[beta] Revert destabilise target-spec-json This reverts https://github.com/rust-lang/rust/pull/150151 in order to deal with https://github.com/rust-lang/rust/issues/151729 where the destabilization caused a problem with building rustc itself with JSON target specs. There's a fix at https://github.com/rust-lang/rust/pull/152677, but we would prefer to not backport that, and instead give ourselves more time to work out the kinks. Also, the destabilization was incomplete, and the rest of the changes are in 1.95 (https://github.com/rust-lang/rust/pull/151534 and https://github.com/rust-lang/cargo/pull/16557), so it would be nice to keep all the changes together in one release. This reverts commita89683dd95, reversing changes made to2f1bd3f378.
This commit is contained in:
commit
172dc09412
7 changed files with 8 additions and 38 deletions
|
|
@ -1129,10 +1129,9 @@ fn get_backend_from_raw_matches(
|
||||||
let backend_name = debug_flags
|
let backend_name = debug_flags
|
||||||
.iter()
|
.iter()
|
||||||
.find_map(|x| x.strip_prefix("codegen-backend=").or(x.strip_prefix("codegen_backend=")));
|
.find_map(|x| x.strip_prefix("codegen-backend=").or(x.strip_prefix("codegen_backend=")));
|
||||||
let unstable_options = debug_flags.iter().find(|x| *x == "unstable-options").is_some();
|
|
||||||
let target = parse_target_triple(early_dcx, matches);
|
let target = parse_target_triple(early_dcx, matches);
|
||||||
let sysroot = Sysroot::new(matches.opt_str("sysroot").map(PathBuf::from));
|
let sysroot = Sysroot::new(matches.opt_str("sysroot").map(PathBuf::from));
|
||||||
let target = config::build_target_config(early_dcx, &target, sysroot.path(), unstable_options);
|
let target = config::build_target_config(early_dcx, &target, sysroot.path());
|
||||||
|
|
||||||
get_codegen_backend(early_dcx, &sysroot, backend_name, &target)
|
get_codegen_backend(early_dcx, &sysroot, backend_name, &target)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -435,7 +435,6 @@ pub fn run_compiler<R: Send>(config: Config, f: impl FnOnce(&Compiler) -> R + Se
|
||||||
&early_dcx,
|
&early_dcx,
|
||||||
&config.opts.target_triple,
|
&config.opts.target_triple,
|
||||||
config.opts.sysroot.path(),
|
config.opts.sysroot.path(),
|
||||||
config.opts.unstable_opts.unstable_options,
|
|
||||||
);
|
);
|
||||||
let file_loader = config.file_loader.unwrap_or_else(|| Box::new(RealFileLoader));
|
let file_loader = config.file_loader.unwrap_or_else(|| Box::new(RealFileLoader));
|
||||||
let path_mapping = config.opts.file_path_mapping();
|
let path_mapping = config.opts.file_path_mapping();
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,6 @@ where
|
||||||
&early_dcx,
|
&early_dcx,
|
||||||
&sessopts.target_triple,
|
&sessopts.target_triple,
|
||||||
sessopts.sysroot.path(),
|
sessopts.sysroot.path(),
|
||||||
sessopts.unstable_opts.unstable_options,
|
|
||||||
);
|
);
|
||||||
let hash_kind = sessopts.unstable_opts.src_hash_algorithm(&target);
|
let hash_kind = sessopts.unstable_opts.src_hash_algorithm(&target);
|
||||||
let checksum_hash_kind = sessopts.unstable_opts.checksum_hash_algorithm();
|
let checksum_hash_kind = sessopts.unstable_opts.checksum_hash_algorithm();
|
||||||
|
|
|
||||||
|
|
@ -1589,9 +1589,8 @@ pub fn build_target_config(
|
||||||
early_dcx: &EarlyDiagCtxt,
|
early_dcx: &EarlyDiagCtxt,
|
||||||
target: &TargetTuple,
|
target: &TargetTuple,
|
||||||
sysroot: &Path,
|
sysroot: &Path,
|
||||||
unstable_options: bool,
|
|
||||||
) -> Target {
|
) -> Target {
|
||||||
match Target::search(target, sysroot, unstable_options) {
|
match Target::search(target, sysroot) {
|
||||||
Ok((target, warnings)) => {
|
Ok((target, warnings)) => {
|
||||||
for warning in warnings.warning_messages() {
|
for warning in warnings.warning_messages() {
|
||||||
early_dcx.early_warn(warning)
|
early_dcx.early_warn(warning)
|
||||||
|
|
|
||||||
|
|
@ -1002,11 +1002,8 @@ pub fn build_session(
|
||||||
}
|
}
|
||||||
|
|
||||||
let host_triple = TargetTuple::from_tuple(config::host_tuple());
|
let host_triple = TargetTuple::from_tuple(config::host_tuple());
|
||||||
let (host, target_warnings) =
|
let (host, target_warnings) = Target::search(&host_triple, sopts.sysroot.path())
|
||||||
Target::search(&host_triple, sopts.sysroot.path(), sopts.unstable_opts.unstable_options)
|
.unwrap_or_else(|e| dcx.handle().fatal(format!("Error loading host specification: {e}")));
|
||||||
.unwrap_or_else(|e| {
|
|
||||||
dcx.handle().fatal(format!("Error loading host specification: {e}"))
|
|
||||||
});
|
|
||||||
for warning in target_warnings.warning_messages() {
|
for warning in target_warnings.warning_messages() {
|
||||||
dcx.handle().warn(warning)
|
dcx.handle().warn(warning)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3296,19 +3296,10 @@ impl Target {
|
||||||
pub fn search(
|
pub fn search(
|
||||||
target_tuple: &TargetTuple,
|
target_tuple: &TargetTuple,
|
||||||
sysroot: &Path,
|
sysroot: &Path,
|
||||||
unstable_options: bool,
|
|
||||||
) -> Result<(Target, TargetWarnings), String> {
|
) -> Result<(Target, TargetWarnings), String> {
|
||||||
use std::{env, fs};
|
use std::{env, fs};
|
||||||
|
|
||||||
fn load_file(
|
fn load_file(path: &Path) -> Result<(Target, TargetWarnings), String> {
|
||||||
path: &Path,
|
|
||||||
unstable_options: bool,
|
|
||||||
) -> Result<(Target, TargetWarnings), String> {
|
|
||||||
if !unstable_options {
|
|
||||||
return Err(
|
|
||||||
"custom targets are unstable and require `-Zunstable-options`".to_string()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
let contents = fs::read_to_string(path).map_err(|e| e.to_string())?;
|
let contents = fs::read_to_string(path).map_err(|e| e.to_string())?;
|
||||||
Target::from_json(&contents)
|
Target::from_json(&contents)
|
||||||
}
|
}
|
||||||
|
|
@ -3332,7 +3323,7 @@ impl Target {
|
||||||
for dir in env::split_paths(&target_path) {
|
for dir in env::split_paths(&target_path) {
|
||||||
let p = dir.join(&path);
|
let p = dir.join(&path);
|
||||||
if p.is_file() {
|
if p.is_file() {
|
||||||
return load_file(&p, unstable_options);
|
return load_file(&p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3345,7 +3336,7 @@ impl Target {
|
||||||
Path::new("target.json"),
|
Path::new("target.json"),
|
||||||
]);
|
]);
|
||||||
if p.is_file() {
|
if p.is_file() {
|
||||||
return load_file(&p, unstable_options);
|
return load_file(&p);
|
||||||
}
|
}
|
||||||
|
|
||||||
Err(format!("could not find specification for target {target_tuple:?}"))
|
Err(format!("could not find specification for target {target_tuple:?}"))
|
||||||
|
|
|
||||||
|
|
@ -15,20 +15,11 @@ fn main() {
|
||||||
.run_fail()
|
.run_fail()
|
||||||
.assert_stderr_contains("error loading target specification");
|
.assert_stderr_contains("error loading target specification");
|
||||||
rustc()
|
rustc()
|
||||||
.arg("-Zunstable-options")
|
|
||||||
.input("foo.rs")
|
.input("foo.rs")
|
||||||
.target("my-incomplete-platform.json")
|
.target("my-incomplete-platform.json")
|
||||||
.run_fail()
|
.run_fail()
|
||||||
.assert_stderr_contains("missing field `llvm-target`");
|
.assert_stderr_contains("missing field `llvm-target`");
|
||||||
let test_platform = rustc()
|
|
||||||
.input("foo.rs")
|
|
||||||
.target("my-x86_64-unknown-linux-gnu-platform")
|
|
||||||
.crate_type("lib")
|
|
||||||
.emit("asm")
|
|
||||||
.run_fail()
|
|
||||||
.assert_stderr_contains("custom targets are unstable and require `-Zunstable-options`");
|
|
||||||
rustc()
|
rustc()
|
||||||
.arg("-Zunstable-options")
|
|
||||||
.env("RUST_TARGET_PATH", ".")
|
.env("RUST_TARGET_PATH", ".")
|
||||||
.input("foo.rs")
|
.input("foo.rs")
|
||||||
.target("my-awesome-platform")
|
.target("my-awesome-platform")
|
||||||
|
|
@ -36,7 +27,6 @@ fn main() {
|
||||||
.emit("asm")
|
.emit("asm")
|
||||||
.run();
|
.run();
|
||||||
rustc()
|
rustc()
|
||||||
.arg("-Zunstable-options")
|
|
||||||
.env("RUST_TARGET_PATH", ".")
|
.env("RUST_TARGET_PATH", ".")
|
||||||
.input("foo.rs")
|
.input("foo.rs")
|
||||||
.target("my-x86_64-unknown-linux-gnu-platform")
|
.target("my-x86_64-unknown-linux-gnu-platform")
|
||||||
|
|
@ -62,31 +52,27 @@ fn main() {
|
||||||
.actual_text("test-platform-2", test_platform_2)
|
.actual_text("test-platform-2", test_platform_2)
|
||||||
.run();
|
.run();
|
||||||
rustc()
|
rustc()
|
||||||
.arg("-Zunstable-options")
|
|
||||||
.input("foo.rs")
|
.input("foo.rs")
|
||||||
.target("endianness-mismatch")
|
.target("endianness-mismatch")
|
||||||
.run_fail()
|
.run_fail()
|
||||||
.assert_stderr_contains(r#""data-layout" claims architecture is little-endian"#);
|
.assert_stderr_contains(r#""data-layout" claims architecture is little-endian"#);
|
||||||
rustc()
|
rustc()
|
||||||
.arg("-Zunstable-options")
|
|
||||||
.input("foo.rs")
|
.input("foo.rs")
|
||||||
.target("mismatching-data-layout")
|
.target("mismatching-data-layout")
|
||||||
.crate_type("lib")
|
.crate_type("lib")
|
||||||
.run_fail()
|
.run_fail()
|
||||||
.assert_stderr_contains("data-layout for target");
|
.assert_stderr_contains("data-layout for target");
|
||||||
rustc()
|
rustc()
|
||||||
.arg("-Zunstable-options")
|
|
||||||
.input("foo.rs")
|
.input("foo.rs")
|
||||||
.target("require-explicit-cpu")
|
.target("require-explicit-cpu")
|
||||||
.crate_type("lib")
|
.crate_type("lib")
|
||||||
.run_fail()
|
.run_fail()
|
||||||
.assert_stderr_contains("target requires explicitly specifying a cpu");
|
.assert_stderr_contains("target requires explicitly specifying a cpu");
|
||||||
rustc()
|
rustc()
|
||||||
.arg("-Zunstable-options")
|
|
||||||
.input("foo.rs")
|
.input("foo.rs")
|
||||||
.target("require-explicit-cpu")
|
.target("require-explicit-cpu")
|
||||||
.crate_type("lib")
|
.crate_type("lib")
|
||||||
.arg("-Ctarget-cpu=generic")
|
.arg("-Ctarget-cpu=generic")
|
||||||
.run();
|
.run();
|
||||||
rustc().arg("-Zunstable-options").target("require-explicit-cpu").print("target-cpus").run();
|
rustc().target("require-explicit-cpu").arg("--print=target-cpus").run();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue