Skip to content

Commit

Permalink
Add UWP MSVC targets
Browse files Browse the repository at this point in the history
  • Loading branch information
mfkl committed Jul 31, 2019
1 parent 54e268c commit 6e4d023
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 0 deletions.
29 changes: 29 additions & 0 deletions src/librustc_target/spec/aarch64_uwp_windows_msvc.rs
@@ -0,0 +1,29 @@
use crate::spec::{LinkerFlavor, Target, TargetResult, PanicStrategy};
use std::env;

pub fn target() -> TargetResult {
let mut base = super::windows_uwp_msvc_base::opts();
base.max_atomic_width = Some(64);
base.has_elf_tls = true;

// FIXME: this shouldn't be panic=abort, it should be panic=unwind
base.panic_strategy = PanicStrategy::Abort;

let lib_root_path = env::var("VCToolsInstallDir").expect("VCToolsInstallDir not found in env");
base.pre_link_args.get_mut(&LinkerFlavor::Msvc).unwrap()
.push(format!("{}{}{}", "/LIBPATH:".to_string(), lib_root_path, "lib\\arm64\\store".to_string()));

Ok(Target {
llvm_target: "aarch64-pc-windows-msvc".to_string(),
target_endian: "little".to_string(),
target_pointer_width: "64".to_string(),
target_c_int_width: "32".to_string(),
data_layout: "e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128".to_string(),
arch: "aarch64".to_string(),
target_os: "windows".to_string(),
target_env: "msvc".to_string(),
target_vendor: "uwp".to_string(),
linker_flavor: LinkerFlavor::Msvc,
options: base,
})
}
27 changes: 27 additions & 0 deletions src/librustc_target/spec/i686_uwp_windows_msvc.rs
@@ -0,0 +1,27 @@
use crate::spec::{LinkerFlavor, Target, TargetResult};
use std::env;

pub fn target() -> TargetResult {
let mut base = super::windows_uwp_msvc_base::opts();
base.cpu = "pentium4".to_string();
base.max_atomic_width = Some(64);
base.has_elf_tls = true;

let lib_root_path = env::var("VCToolsInstallDir").expect("VCToolsInstallDir not found in env");
base.pre_link_args.get_mut(&LinkerFlavor::Msvc).unwrap()
.push(format!("{}{}{}", "/LIBPATH:".to_string(), lib_root_path, "lib\\x86\\store".to_string()));

Ok(Target {
llvm_target: "i686-pc-windows-msvc".to_string(),
target_endian: "little".to_string(),
target_pointer_width: "32".to_string(),
target_c_int_width: "32".to_string(),
data_layout: "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32".to_string(),
arch: "x86".to_string(),
target_os: "windows".to_string(),
target_env: "msvc".to_string(),
target_vendor: "uwp".to_string(),
linker_flavor: LinkerFlavor::Msvc,
options: base,
})
}
4 changes: 4 additions & 0 deletions src/librustc_target/spec/mod.rs
Expand Up @@ -61,6 +61,7 @@ mod uefi_base;
mod windows_base;
mod windows_msvc_base;
mod windows_uwp_base;
mod windows_uwp_msvc_base;
mod thumb_base;
mod l4re_base;
mod fuchsia_base;
Expand Down Expand Up @@ -439,8 +440,11 @@ supported_targets! {
("x86_64-uwp-windows-gnu", x86_64_uwp_windows_gnu),

("aarch64-pc-windows-msvc", aarch64_pc_windows_msvc),
("aarch64-uwp-windows-msvc", aarch64_uwp_windows_msvc),
("x86_64-pc-windows-msvc", x86_64_pc_windows_msvc),
("x86_64-uwp-windows-msvc", x86_64_uwp_windows_msvc),
("i686-pc-windows-msvc", i686_pc_windows_msvc),
("i686-uwp-windows-msvc", i686_uwp_windows_msvc),
("i586-pc-windows-msvc", i586_pc_windows_msvc),
("thumbv7a-pc-windows-msvc", thumbv7a_pc_windows_msvc),

Expand Down
33 changes: 33 additions & 0 deletions src/librustc_target/spec/windows_uwp_msvc_base.rs
@@ -0,0 +1,33 @@
use crate::spec::{LinkArgs, LinkerFlavor, TargetOptions};
use std::default::Default;

pub fn opts() -> TargetOptions {
let mut args = LinkArgs::new();
args.insert(LinkerFlavor::Msvc,
vec!["/NOLOGO".to_string(),
"/NXCOMPAT".to_string(),
"/APPCONTAINER".to_string(),
"mincore.lib".to_string()]);

TargetOptions {
function_sections: true,
dynamic_linking: true,
executables: true,
dll_prefix: String::new(),
dll_suffix: ".dll".to_string(),
exe_suffix: ".exe".to_string(),
staticlib_prefix: String::new(),
staticlib_suffix: ".lib".to_string(),
target_family: Some("windows".to_string()),
is_like_windows: true,
is_like_msvc: true,
pre_link_args: args,
crt_static_allows_dylibs: true,
crt_static_respected: true,
abi_return_struct_as_int: true,
emit_debug_gdb_scripts: false,
requires_uwtable: true,

.. Default::default()
}
}
27 changes: 27 additions & 0 deletions src/librustc_target/spec/x86_64_uwp_windows_msvc.rs
@@ -0,0 +1,27 @@
use crate::spec::{LinkerFlavor, Target, TargetResult};
use std::env;

pub fn target() -> TargetResult {
let mut base = super::windows_uwp_msvc_base::opts();
base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64);
base.has_elf_tls = true;

let lib_root_path = env::var("VCToolsInstallDir").expect("VCToolsInstallDir not found in env");
base.pre_link_args.get_mut(&LinkerFlavor::Msvc).unwrap()
.push(format!("{}{}{}", "/LIBPATH:".to_string(), lib_root_path, "lib\\x64\\store".to_string()));

Ok(Target {
llvm_target: "x86_64-pc-windows-msvc".to_string(),
target_endian: "little".to_string(),
target_pointer_width: "64".to_string(),
target_c_int_width: "32".to_string(),
data_layout: "e-m:w-i64:64-f80:128-n8:16:32:64-S128".to_string(),
arch: "x86_64".to_string(),
target_os: "windows".to_string(),
target_env: "msvc".to_string(),
target_vendor: "uwp".to_string(),
linker_flavor: LinkerFlavor::Msvc,
options: base,
})
}

0 comments on commit 6e4d023

Please sign in to comment.