Rollup merge of #63155 - mfkl:uwp-msvc, r=alexcrichton
Add UWP MSVC targets
Hi,
- The README URI change is the correct one for VS2019 community edition, which I suspect most people would use. Doesn't _need_ to be merged though.
- This 5e6619edd1 fixes the UWP build (msvc or not, doesn't matter). I suspect it broke with recent changes unnoticed because no CI.
- Store lib location is found through the VCToolsInstallDir env variable. The end of the path is currently for the VS2019 store lib locations only.
- I could not test the aarch64_uwp_windows_msvc target because the rust build script does not currently support arm64 msvc AFAIU.
This commit is contained in:
commit
1db4bbcced
9 changed files with 140 additions and 3 deletions
|
|
@ -32,6 +32,7 @@ use std::path::{Path, PathBuf};
|
|||
use std::process::{Output, Stdio, ExitStatus};
|
||||
use std::str;
|
||||
use std::env;
|
||||
use std::ffi::OsString;
|
||||
|
||||
pub use rustc_codegen_utils::link::*;
|
||||
|
||||
|
|
@ -158,6 +159,36 @@ pub fn get_linker(sess: &Session, linker: &Path, flavor: LinkerFlavor) -> (PathB
|
|||
}
|
||||
};
|
||||
|
||||
// UWP apps have API restrictions enforced during Store submissions.
|
||||
// To comply with the Windows App Certification Kit,
|
||||
// MSVC needs to link with the Store versions of the runtime libraries (vcruntime, msvcrt, etc).
|
||||
let t = &sess.target.target;
|
||||
if flavor == LinkerFlavor::Msvc && t.target_vendor == "uwp" {
|
||||
if let Some(ref tool) = msvc_tool {
|
||||
let original_path = tool.path();
|
||||
if let Some(ref root_lib_path) = original_path.ancestors().skip(4).next() {
|
||||
let arch = match t.arch.as_str() {
|
||||
"x86_64" => Some("x64".to_string()),
|
||||
"x86" => Some("x86".to_string()),
|
||||
"aarch64" => Some("arm64".to_string()),
|
||||
_ => None,
|
||||
};
|
||||
if let Some(ref a) = arch {
|
||||
let mut arg = OsString::from("/LIBPATH:");
|
||||
arg.push(format!("{}\\lib\\{}\\store", root_lib_path.display(), a.to_string()));
|
||||
cmd.arg(&arg);
|
||||
}
|
||||
else {
|
||||
warn!("arch is not supported");
|
||||
}
|
||||
} else {
|
||||
warn!("MSVC root path lib location not found");
|
||||
}
|
||||
} else {
|
||||
warn!("link.exe not found");
|
||||
}
|
||||
}
|
||||
|
||||
// The compiler's sysroot often has some bundled tools, so add it to the
|
||||
// PATH for the child.
|
||||
let mut new_path = sess.host_filesearch(PathKind::All)
|
||||
|
|
@ -1027,6 +1058,7 @@ fn link_args<'a, B: ArchiveBuilder<'a>>(cmd: &mut dyn Linker,
|
|||
let t = &sess.target.target;
|
||||
|
||||
cmd.include_path(&fix_windows_verbatim_for_gcc(&lib_path));
|
||||
|
||||
for obj in codegen_results.modules.iter().filter_map(|m| m.object.as_ref()) {
|
||||
cmd.add_object(obj);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue