use super::super::*; pub(super) fn test_target(target: TargetResult) { // Grab the TargetResult struct. If we successfully retrieved // a Target, then the test JSON encoding/decoding can run for this // Target on this testing platform (i.e., checking the iOS targets // only on a Mac test platform). if let Ok(original) = target { original.check_consistency(); let as_json = original.to_json(); let parsed = Target::from_json(as_json).unwrap(); assert_eq!(original, parsed); } } impl Target { fn check_consistency(&self) { // Check that LLD with the given flavor is treated identically to the linker it emulates. // If you target really needs to deviate from the rules below, whitelist it // and document the reasons. assert_eq!( self.linker_flavor == LinkerFlavor::Msvc || self.linker_flavor == LinkerFlavor::Lld(LldFlavor::Link), self.options.lld_flavor == LldFlavor::Link, ); for args in &[ &self.options.pre_link_args, &self.options.pre_link_args_crt, &self.options.late_link_args, &self.options.late_link_args_dynamic, &self.options.late_link_args_static, &self.options.post_link_args, ] { assert_eq!( args.get(&LinkerFlavor::Msvc), args.get(&LinkerFlavor::Lld(LldFlavor::Link)), ); if args.contains_key(&LinkerFlavor::Msvc) { assert_eq!(self.options.lld_flavor, LldFlavor::Link); } } } }