33 lines
1.2 KiB
Rust
33 lines
1.2 KiB
Rust
|
|
//! Test that linking works under an environment similar to what Xcode sets up.
|
||
|
|
//!
|
||
|
|
//! Regression test for https://github.com/rust-lang/rust/issues/80817.
|
||
|
|
|
||
|
|
//@ only-apple
|
||
|
|
|
||
|
|
use run_make_support::{cmd, rustc, target};
|
||
|
|
|
||
|
|
fn main() {
|
||
|
|
// Fetch toolchain `/usr/bin` directory. Usually:
|
||
|
|
// /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
|
||
|
|
let clang_bin = cmd("xcrun").arg("--find").arg("clang").run().stdout_utf8();
|
||
|
|
let toolchain_bin = clang_bin.trim().strip_suffix("/clang").unwrap();
|
||
|
|
|
||
|
|
// Put toolchain directory at the front of PATH.
|
||
|
|
let path = format!("{}:{}", toolchain_bin, std::env::var("PATH").unwrap());
|
||
|
|
|
||
|
|
// Check that compiling and linking still works.
|
||
|
|
//
|
||
|
|
// Removing `SDKROOT` is necessary for the test to excercise what we want, since bootstrap runs
|
||
|
|
// under `/usr/bin/python3`, which will set SDKROOT for us.
|
||
|
|
rustc().target(target()).env_remove("SDKROOT").env("PATH", &path).input("foo.rs").run();
|
||
|
|
|
||
|
|
// Also check linking directly with the system linker.
|
||
|
|
rustc()
|
||
|
|
.target(target())
|
||
|
|
.env_remove("SDKROOT")
|
||
|
|
.env("PATH", &path)
|
||
|
|
.input("foo.rs")
|
||
|
|
.arg("-Clinker-flavor=ld")
|
||
|
|
.run();
|
||
|
|
}
|