private static bool IsOsDarwin(TripleOSType osType) { osType.ValidateDefined(nameof(osType)); switch (osType) { case TripleOSType.Darwin: case TripleOSType.MacOSX: case TripleOSType.IOS: case TripleOSType.TvOS: case TripleOSType.WatchOS: return(true); default: return(false); } }
/// <summary>Gets the default <see cref="TripleObjectFormatType"/> for a given <see cref="TripleArchType"/> and <see cref="TripleOSType"/></summary> /// <param name="arch">Architecture type</param> /// <param name="os">Operating system type</param> /// <returns>Default object format</returns> public static TripleObjectFormatType GetDefaultObjectFormat(TripleArchType arch, TripleOSType os) { arch.ValidateDefined(nameof(arch)); os.ValidateDefined(nameof(os)); switch (arch) { case TripleArchType.UnknownArch: case TripleArchType.Aarch64: case TripleArchType.Arm: case TripleArchType.Thumb: case TripleArchType.X86: case TripleArchType.X86_64: if (IsOsDarwin(os)) { return(TripleObjectFormatType.MachO); } if (os == TripleOSType.Win32) { return(TripleObjectFormatType.COFF); } return(TripleObjectFormatType.ELF); case TripleArchType.Aarch64_be: case TripleArchType.AMDGCN: case TripleArchType.Amdil: case TripleArchType.Amdil64: case TripleArchType.Armeb: case TripleArchType.Avr: case TripleArchType.BPFeb: case TripleArchType.BPFel: case TripleArchType.Hexagon: case TripleArchType.Lanai: case TripleArchType.Hsail: case TripleArchType.Hsail64: case TripleArchType.Kalimba: case TripleArchType.Le32: case TripleArchType.Le64: case TripleArchType.MIPS: case TripleArchType.MIPS64: case TripleArchType.MIPS64el: case TripleArchType.MIPSel: case TripleArchType.MSP430: case TripleArchType.Nvptx: case TripleArchType.Nvptx64: case TripleArchType.PPC64le: case TripleArchType.R600: case TripleArchType.Renderscript32: case TripleArchType.Renderscript64: case TripleArchType.Shave: case TripleArchType.Sparc: case TripleArchType.Sparcel: case TripleArchType.Sparcv9: case TripleArchType.Spir: case TripleArchType.Spir64: case TripleArchType.SystemZ: case TripleArchType.TCE: case TripleArchType.Thumbeb: case TripleArchType.Wasm32: case TripleArchType.Wasm64: case TripleArchType.Xcore: return(TripleObjectFormatType.ELF); case TripleArchType.PPC: case TripleArchType.PPC64: if (IsOsDarwin(os)) { return(TripleObjectFormatType.MachO); } return(TripleObjectFormatType.ELF); default: throw new ArgumentException("Unsupported Architecture", nameof(arch)); } }