Skip to content

Commit 6e4d023

Browse files
committed
Add UWP MSVC targets
1 parent 54e268c commit 6e4d023

File tree

5 files changed

+120
-0
lines changed

5 files changed

+120
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
use crate::spec::{LinkerFlavor, Target, TargetResult, PanicStrategy};
2+
use std::env;
3+
4+
pub fn target() -> TargetResult {
5+
let mut base = super::windows_uwp_msvc_base::opts();
6+
base.max_atomic_width = Some(64);
7+
base.has_elf_tls = true;
8+
9+
// FIXME: this shouldn't be panic=abort, it should be panic=unwind
10+
base.panic_strategy = PanicStrategy::Abort;
11+
12+
let lib_root_path = env::var("VCToolsInstallDir").expect("VCToolsInstallDir not found in env");
13+
base.pre_link_args.get_mut(&LinkerFlavor::Msvc).unwrap()
14+
.push(format!("{}{}{}", "/LIBPATH:".to_string(), lib_root_path, "lib\\arm64\\store".to_string()));
15+
16+
Ok(Target {
17+
llvm_target: "aarch64-pc-windows-msvc".to_string(),
18+
target_endian: "little".to_string(),
19+
target_pointer_width: "64".to_string(),
20+
target_c_int_width: "32".to_string(),
21+
data_layout: "e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128".to_string(),
22+
arch: "aarch64".to_string(),
23+
target_os: "windows".to_string(),
24+
target_env: "msvc".to_string(),
25+
target_vendor: "uwp".to_string(),
26+
linker_flavor: LinkerFlavor::Msvc,
27+
options: base,
28+
})
29+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use crate::spec::{LinkerFlavor, Target, TargetResult};
2+
use std::env;
3+
4+
pub fn target() -> TargetResult {
5+
let mut base = super::windows_uwp_msvc_base::opts();
6+
base.cpu = "pentium4".to_string();
7+
base.max_atomic_width = Some(64);
8+
base.has_elf_tls = true;
9+
10+
let lib_root_path = env::var("VCToolsInstallDir").expect("VCToolsInstallDir not found in env");
11+
base.pre_link_args.get_mut(&LinkerFlavor::Msvc).unwrap()
12+
.push(format!("{}{}{}", "/LIBPATH:".to_string(), lib_root_path, "lib\\x86\\store".to_string()));
13+
14+
Ok(Target {
15+
llvm_target: "i686-pc-windows-msvc".to_string(),
16+
target_endian: "little".to_string(),
17+
target_pointer_width: "32".to_string(),
18+
target_c_int_width: "32".to_string(),
19+
data_layout: "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32".to_string(),
20+
arch: "x86".to_string(),
21+
target_os: "windows".to_string(),
22+
target_env: "msvc".to_string(),
23+
target_vendor: "uwp".to_string(),
24+
linker_flavor: LinkerFlavor::Msvc,
25+
options: base,
26+
})
27+
}

src/librustc_target/spec/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ mod uefi_base;
6161
mod windows_base;
6262
mod windows_msvc_base;
6363
mod windows_uwp_base;
64+
mod windows_uwp_msvc_base;
6465
mod thumb_base;
6566
mod l4re_base;
6667
mod fuchsia_base;
@@ -439,8 +440,11 @@ supported_targets! {
439440
("x86_64-uwp-windows-gnu", x86_64_uwp_windows_gnu),
440441

441442
("aarch64-pc-windows-msvc", aarch64_pc_windows_msvc),
443+
("aarch64-uwp-windows-msvc", aarch64_uwp_windows_msvc),
442444
("x86_64-pc-windows-msvc", x86_64_pc_windows_msvc),
445+
("x86_64-uwp-windows-msvc", x86_64_uwp_windows_msvc),
443446
("i686-pc-windows-msvc", i686_pc_windows_msvc),
447+
("i686-uwp-windows-msvc", i686_uwp_windows_msvc),
444448
("i586-pc-windows-msvc", i586_pc_windows_msvc),
445449
("thumbv7a-pc-windows-msvc", thumbv7a_pc_windows_msvc),
446450

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
use crate::spec::{LinkArgs, LinkerFlavor, TargetOptions};
2+
use std::default::Default;
3+
4+
pub fn opts() -> TargetOptions {
5+
let mut args = LinkArgs::new();
6+
args.insert(LinkerFlavor::Msvc,
7+
vec!["/NOLOGO".to_string(),
8+
"/NXCOMPAT".to_string(),
9+
"/APPCONTAINER".to_string(),
10+
"mincore.lib".to_string()]);
11+
12+
TargetOptions {
13+
function_sections: true,
14+
dynamic_linking: true,
15+
executables: true,
16+
dll_prefix: String::new(),
17+
dll_suffix: ".dll".to_string(),
18+
exe_suffix: ".exe".to_string(),
19+
staticlib_prefix: String::new(),
20+
staticlib_suffix: ".lib".to_string(),
21+
target_family: Some("windows".to_string()),
22+
is_like_windows: true,
23+
is_like_msvc: true,
24+
pre_link_args: args,
25+
crt_static_allows_dylibs: true,
26+
crt_static_respected: true,
27+
abi_return_struct_as_int: true,
28+
emit_debug_gdb_scripts: false,
29+
requires_uwtable: true,
30+
31+
.. Default::default()
32+
}
33+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use crate::spec::{LinkerFlavor, Target, TargetResult};
2+
use std::env;
3+
4+
pub fn target() -> TargetResult {
5+
let mut base = super::windows_uwp_msvc_base::opts();
6+
base.cpu = "x86-64".to_string();
7+
base.max_atomic_width = Some(64);
8+
base.has_elf_tls = true;
9+
10+
let lib_root_path = env::var("VCToolsInstallDir").expect("VCToolsInstallDir not found in env");
11+
base.pre_link_args.get_mut(&LinkerFlavor::Msvc).unwrap()
12+
.push(format!("{}{}{}", "/LIBPATH:".to_string(), lib_root_path, "lib\\x64\\store".to_string()));
13+
14+
Ok(Target {
15+
llvm_target: "x86_64-pc-windows-msvc".to_string(),
16+
target_endian: "little".to_string(),
17+
target_pointer_width: "64".to_string(),
18+
target_c_int_width: "32".to_string(),
19+
data_layout: "e-m:w-i64:64-f80:128-n8:16:32:64-S128".to_string(),
20+
arch: "x86_64".to_string(),
21+
target_os: "windows".to_string(),
22+
target_env: "msvc".to_string(),
23+
target_vendor: "uwp".to_string(),
24+
linker_flavor: LinkerFlavor::Msvc,
25+
options: base,
26+
})
27+
}

0 commit comments

Comments
 (0)