diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-01-15 21:51:58 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-15 21:51:58 +0900 |
| commit | 1859d57065fa9fd49508035486cde2a5120baa2d (patch) | |
| tree | 4f155546a74c317c95f396562bb489a5c7e6005f | |
| parent | 2c994f22d6f0228b6f0791d372f96395fe7ce900 (diff) | |
| parent | 7d6271b76b7ee7a192e03933ed6b37e6e6385c08 (diff) | |
| download | rust-1859d57065fa9fd49508035486cde2a5120baa2d.tar.gz rust-1859d57065fa9fd49508035486cde2a5120baa2d.zip | |
Rollup merge of #68231 - danielframpton:windows-crosscompile, r=alexcrichton
Better support for cross compilation on Windows. I have been investigating enabling panic=unwind for aarch64-pc-windows-msvc (see #65313) and building rustc and cargo hosted on aarch64-pc-windows-msvc. Without the libpath changes we were trying to link a mix of amd64 and arm64 binaries. Without the cmake system name change, the llvm build was trying to run an arm64 build tool on the x86_64 build machine. That said, I haven't tested all different combinations here and am very open to resolving this a different way.
| -rw-r--r-- | src/bootstrap/native.rs | 2 | ||||
| -rw-r--r-- | src/librustc_llvm/build.rs | 10 |
2 files changed, 8 insertions, 4 deletions
diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs index ce977f1bbc4..89e1a7319cf 100644 --- a/src/bootstrap/native.rs +++ b/src/bootstrap/native.rs @@ -230,6 +230,8 @@ impl Step for Llvm { cfg.define("CMAKE_SYSTEM_NAME", "NetBSD"); } else if target.contains("freebsd") { cfg.define("CMAKE_SYSTEM_NAME", "FreeBSD"); + } else if target.contains("windows") { + cfg.define("CMAKE_SYSTEM_NAME", "Windows"); } cfg.define("LLVM_NATIVE_BUILD", builder.llvm_out(builder.config.build).join("build")); diff --git a/src/librustc_llvm/build.rs b/src/librustc_llvm/build.rs index dff20f87410..405ce0307cd 100644 --- a/src/librustc_llvm/build.rs +++ b/src/librustc_llvm/build.rs @@ -215,12 +215,14 @@ fn main() { let mut cmd = Command::new(&llvm_config); cmd.arg(llvm_link_arg).arg("--ldflags"); for lib in output(&mut cmd).split_whitespace() { - if lib.starts_with("-LIBPATH:") { - println!("cargo:rustc-link-search=native={}", &lib[9..]); - } else if is_crossed { - if lib.starts_with("-L") { + if is_crossed { + if lib.starts_with("-LIBPATH:") { + println!("cargo:rustc-link-search=native={}", lib[9..].replace(&host, &target)); + } else if lib.starts_with("-L") { println!("cargo:rustc-link-search=native={}", lib[2..].replace(&host, &target)); } + } else if lib.starts_with("-LIBPATH:") { + println!("cargo:rustc-link-search=native={}", &lib[9..]); } else if lib.starts_with("-l") { println!("cargo:rustc-link-lib={}", &lib[2..]); } else if lib.starts_with("-L") { |
