]> git.proxmox.com Git - rustc.git/blame - compiler/rustc_target/src/spec/tests/tests_impl.rs
New upstream version 1.63.0+dfsg1
[rustc.git] / compiler / rustc_target / src / spec / tests / tests_impl.rs
CommitLineData
ba9703b0
XL
1use super::super::*;
2
29967ef6
XL
3// Test target self-consistency and JSON encoding/decoding roundtrip.
4pub(super) fn test_target(target: Target) {
5 target.check_consistency();
136023e0 6 assert_eq!(Target::from_json(target.to_json()).map(|(j, _)| j), Ok(target));
ba9703b0
XL
7}
8
9impl Target {
10 fn check_consistency(&self) {
923072b8
FG
11 assert_eq!(self.is_like_osx, self.vendor == "apple");
12 assert_eq!(self.is_like_solaris, self.os == "solaris" || self.os == "illumos");
13 assert_eq!(self.is_like_windows, self.os == "windows" || self.os == "uefi");
14 assert_eq!(self.is_like_wasm, self.arch == "wasm32" || self.arch == "wasm64");
fc512014 15 assert!(self.is_like_windows || !self.is_like_msvc);
923072b8 16
ba9703b0 17 // Check that LLD with the given flavor is treated identically to the linker it emulates.
f035d41b
XL
18 // If your target really needs to deviate from the rules below, except it and document the
19 // reasons.
ba9703b0
XL
20 assert_eq!(
21 self.linker_flavor == LinkerFlavor::Msvc
22 || self.linker_flavor == LinkerFlavor::Lld(LldFlavor::Link),
29967ef6 23 self.lld_flavor == LldFlavor::Link,
ba9703b0 24 );
fc512014 25 assert_eq!(self.is_like_msvc, self.lld_flavor == LldFlavor::Link);
ba9703b0 26 for args in &[
29967ef6
XL
27 &self.pre_link_args,
28 &self.late_link_args,
29 &self.late_link_args_dynamic,
30 &self.late_link_args_static,
31 &self.post_link_args,
ba9703b0
XL
32 ] {
33 assert_eq!(
34 args.get(&LinkerFlavor::Msvc),
35 args.get(&LinkerFlavor::Lld(LldFlavor::Link)),
36 );
37 if args.contains_key(&LinkerFlavor::Msvc) {
29967ef6 38 assert_eq!(self.lld_flavor, LldFlavor::Link);
ba9703b0
XL
39 }
40 }
f035d41b 41 assert!(
29967ef6
XL
42 (self.pre_link_objects_fallback.is_empty()
43 && self.post_link_objects_fallback.is_empty())
44 || self.crt_objects_fallback.is_some()
f035d41b 45 );
fc512014
XL
46 // Keep the default "unknown" vendor instead.
47 assert_ne!(self.vendor, "");
48 if !self.can_use_os_unknown() {
49 // Keep the default "none" for bare metal targets instead.
50 assert_ne!(self.os, "unknown");
51 }
52 }
53
54 // Add your target to the whitelist if it has `std` library
55 // and you certainly want "unknown" for the OS name.
56 fn can_use_os_unknown(&self) -> bool {
57 self.llvm_target == "wasm32-unknown-unknown"
cdc7bbd5 58 || self.llvm_target == "wasm64-unknown-unknown"
fc512014 59 || (self.env == "sgx" && self.vendor == "fortanix")
ba9703b0
XL
60 }
61}