| //! 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(); |
| } |