void HostInfoBase::ComputeHostArchitectureSupport(ArchSpec &arch_32, ArchSpec &arch_64) { llvm::Triple triple(llvm::sys::getProcessTriple()); arch_32.Clear(); arch_64.Clear(); switch (triple.getArch()) { default: arch_32.SetTriple(triple); break; case llvm::Triple::aarch64: case llvm::Triple::ppc64: case llvm::Triple::x86_64: arch_64.SetTriple(triple); arch_32.SetTriple(triple.get32BitArchVariant()); break; case llvm::Triple::mips64: case llvm::Triple::mips64el: case llvm::Triple::sparcv9: case llvm::Triple::systemz: arch_64.SetTriple(triple); break; } }
bool OptionGroupArchitecture::GetArchitecture(Platform *platform, ArchSpec &arch) { if (m_arch_str.empty()) arch.Clear(); else arch.SetTriple(m_arch_str.c_str(), platform); return arch.IsValid(); }
bool PlatformRemoteAppleWatch::GetSupportedArchitectureAtIndex(uint32_t idx, ArchSpec &arch) { ArchSpec system_arch(GetSystemArchitecture()); const ArchSpec::Core system_core = system_arch.GetCore(); switch (system_core) { default: switch (idx) { case 0: arch.SetTriple("arm64-apple-watchos"); return true; case 1: arch.SetTriple("armv7k-apple-watchos"); return true; case 2: arch.SetTriple("armv7s-apple-watchos"); return true; case 3: arch.SetTriple("armv7-apple-watchos"); return true; case 4: arch.SetTriple("thumbv7k-apple-watchos"); return true; case 5: arch.SetTriple("thumbv7-apple-watchos"); return true; case 6: arch.SetTriple("thumbv7s-apple-watchos"); return true; default: break; } break; case ArchSpec::eCore_arm_arm64: switch (idx) { case 0: arch.SetTriple("arm64-apple-watchos"); return true; case 1: arch.SetTriple("armv7k-apple-watchos"); return true; case 2: arch.SetTriple("armv7s-apple-watchos"); return true; case 3: arch.SetTriple("armv7-apple-watchos"); return true; case 4: arch.SetTriple("thumbv7k-apple-watchos"); return true; case 5: arch.SetTriple("thumbv7-apple-watchos"); return true; case 6: arch.SetTriple("thumbv7s-apple-watchos"); return true; default: break; } break; case ArchSpec::eCore_arm_armv7k: switch (idx) { case 0: arch.SetTriple("armv7k-apple-watchos"); return true; case 1: arch.SetTriple("armv7s-apple-watchos"); return true; case 2: arch.SetTriple("armv7-apple-watchos"); return true; case 3: arch.SetTriple("thumbv7k-apple-watchos"); return true; case 4: arch.SetTriple("thumbv7-apple-watchos"); return true; case 5: arch.SetTriple("thumbv7s-apple-watchos"); return true; default: break; } break; case ArchSpec::eCore_arm_armv7s: switch (idx) { case 0: arch.SetTriple("armv7s-apple-watchos"); return true; case 1: arch.SetTriple("armv7k-apple-watchos"); return true; case 2: arch.SetTriple("armv7-apple-watchos"); return true; case 3: arch.SetTriple("thumbv7k-apple-watchos"); return true; case 4: arch.SetTriple("thumbv7-apple-watchos"); return true; case 5: arch.SetTriple("thumbv7s-apple-watchos"); return true; default: break; } break; case ArchSpec::eCore_arm_armv7: switch (idx) { case 0: arch.SetTriple("armv7-apple-watchos"); return true; case 1: arch.SetTriple("armv7k-apple-watchos"); return true; case 2: arch.SetTriple("thumbv7k-apple-watchos"); return true; case 3: arch.SetTriple("thumbv7-apple-watchos"); return true; default: break; } break; } arch.Clear(); return false; }
const ArchSpec & Host::GetArchitecture (SystemDefaultArchitecture arch_kind) { static bool g_supports_32 = false; static bool g_supports_64 = false; static ArchSpec g_host_arch_32; static ArchSpec g_host_arch_64; #if defined (__APPLE__) // Apple is different in that it can support both 32 and 64 bit executables // in the same operating system running concurrently. Here we detect the // correct host architectures for both 32 and 64 bit including if 64 bit // executables are supported on the system. if (g_supports_32 == false && g_supports_64 == false) { // All apple systems support 32 bit execution. g_supports_32 = true; uint32_t cputype, cpusubtype; uint32_t is_64_bit_capable = false; size_t len = sizeof(cputype); ArchSpec host_arch; // These will tell us about the kernel architecture, which even on a 64 // bit machine can be 32 bit... if (::sysctlbyname("hw.cputype", &cputype, &len, NULL, 0) == 0) { len = sizeof (cpusubtype); if (::sysctlbyname("hw.cpusubtype", &cpusubtype, &len, NULL, 0) != 0) cpusubtype = CPU_TYPE_ANY; len = sizeof (is_64_bit_capable); if (::sysctlbyname("hw.cpu64bit_capable", &is_64_bit_capable, &len, NULL, 0) == 0) { if (is_64_bit_capable) g_supports_64 = true; } if (is_64_bit_capable) { #if defined (__i386__) || defined (__x86_64__) if (cpusubtype == CPU_SUBTYPE_486) cpusubtype = CPU_SUBTYPE_I386_ALL; #endif if (cputype & CPU_ARCH_ABI64) { // We have a 64 bit kernel on a 64 bit system g_host_arch_32.SetArchitecture (eArchTypeMachO, ~(CPU_ARCH_MASK) & cputype, cpusubtype); g_host_arch_64.SetArchitecture (eArchTypeMachO, cputype, cpusubtype); } else { // We have a 32 bit kernel on a 64 bit system g_host_arch_32.SetArchitecture (eArchTypeMachO, cputype, cpusubtype); cputype |= CPU_ARCH_ABI64; g_host_arch_64.SetArchitecture (eArchTypeMachO, cputype, cpusubtype); } } else { g_host_arch_32.SetArchitecture (eArchTypeMachO, cputype, cpusubtype); g_host_arch_64.Clear(); } } } #else // #if defined (__APPLE__) if (g_supports_32 == false && g_supports_64 == false) { llvm::Triple triple(llvm::sys::getDefaultTargetTriple()); g_host_arch_32.Clear(); g_host_arch_64.Clear(); switch (triple.getArch()) { default: g_host_arch_32.SetTriple(triple); g_supports_32 = true; break; case llvm::Triple::x86_64: case llvm::Triple::sparcv9: case llvm::Triple::ppc64: case llvm::Triple::cellspu: g_host_arch_64.SetTriple(triple); g_supports_64 = true; break; } g_supports_32 = g_host_arch_32.IsValid(); g_supports_64 = g_host_arch_64.IsValid(); } #endif // #else for #if defined (__APPLE__) if (arch_kind == eSystemDefaultArchitecture32) return g_host_arch_32; else if (arch_kind == eSystemDefaultArchitecture64) return g_host_arch_64; if (g_supports_64) return g_host_arch_64; return g_host_arch_32; }
bool PlatformDarwin::ARMGetSupportedArchitectureAtIndex (uint32_t idx, ArchSpec &arch) { ArchSpec system_arch (GetSystemArchitecture()); const ArchSpec::Core system_core = system_arch.GetCore(); switch (system_core) { default: switch (idx) { case 0: arch.SetTriple ("armv7-apple-ios"); return true; case 1: arch.SetTriple ("armv7f-apple-ios"); return true; case 2: arch.SetTriple ("armv7k-apple-ios"); return true; case 3: arch.SetTriple ("armv7s-apple-ios"); return true; case 4: arch.SetTriple ("armv6-apple-ios"); return true; case 5: arch.SetTriple ("armv5-apple-ios"); return true; case 6: arch.SetTriple ("armv4-apple-ios"); return true; case 7: arch.SetTriple ("arm-apple-ios"); return true; case 8: arch.SetTriple ("thumbv7-apple-ios"); return true; case 9: arch.SetTriple ("thumbv7f-apple-ios"); return true; case 10: arch.SetTriple ("thumbv7k-apple-ios"); return true; case 11: arch.SetTriple ("thumbv7s-apple-ios"); return true; case 12: arch.SetTriple ("thumbv6-apple-ios"); return true; case 13: arch.SetTriple ("thumbv5-apple-ios"); return true; case 14: arch.SetTriple ("thumbv4t-apple-ios"); return true; case 15: arch.SetTriple ("thumb-apple-ios"); return true; default: break; } break; case ArchSpec::eCore_arm_armv7f: switch (idx) { case 0: arch.SetTriple ("armv7f-apple-ios"); return true; case 1: arch.SetTriple ("armv7-apple-ios"); return true; case 2: arch.SetTriple ("armv6-apple-ios"); return true; case 3: arch.SetTriple ("armv5-apple-ios"); return true; case 4: arch.SetTriple ("armv4-apple-ios"); return true; case 5: arch.SetTriple ("arm-apple-ios"); return true; case 6: arch.SetTriple ("thumbv7f-apple-ios"); return true; case 7: arch.SetTriple ("thumbv7-apple-ios"); return true; case 8: arch.SetTriple ("thumbv6-apple-ios"); return true; case 9: arch.SetTriple ("thumbv5-apple-ios"); return true; case 10: arch.SetTriple ("thumbv4t-apple-ios"); return true; case 11: arch.SetTriple ("thumb-apple-ios"); return true; default: break; } break; case ArchSpec::eCore_arm_armv7k: switch (idx) { case 0: arch.SetTriple ("armv7k-apple-ios"); return true; case 1: arch.SetTriple ("armv7-apple-ios"); return true; case 2: arch.SetTriple ("armv6-apple-ios"); return true; case 3: arch.SetTriple ("armv5-apple-ios"); return true; case 4: arch.SetTriple ("armv4-apple-ios"); return true; case 5: arch.SetTriple ("arm-apple-ios"); return true; case 6: arch.SetTriple ("thumbv7k-apple-ios"); return true; case 7: arch.SetTriple ("thumbv7-apple-ios"); return true; case 8: arch.SetTriple ("thumbv6-apple-ios"); return true; case 9: arch.SetTriple ("thumbv5-apple-ios"); return true; case 10: arch.SetTriple ("thumbv4t-apple-ios"); return true; case 11: arch.SetTriple ("thumb-apple-ios"); return true; default: break; } break; case ArchSpec::eCore_arm_armv7s: switch (idx) { case 0: arch.SetTriple ("armv7s-apple-ios"); return true; case 1: arch.SetTriple ("armv7-apple-ios"); return true; case 2: arch.SetTriple ("armv6-apple-ios"); return true; case 3: arch.SetTriple ("armv5-apple-ios"); return true; case 4: arch.SetTriple ("armv4-apple-ios"); return true; case 5: arch.SetTriple ("arm-apple-ios"); return true; case 6: arch.SetTriple ("thumbv7s-apple-ios"); return true; case 7: arch.SetTriple ("thumbv7-apple-ios"); return true; case 8: arch.SetTriple ("thumbv6-apple-ios"); return true; case 9: arch.SetTriple ("thumbv5-apple-ios"); return true; case 10: arch.SetTriple ("thumbv4t-apple-ios"); return true; case 11: arch.SetTriple ("thumb-apple-ios"); return true; default: break; } break; case ArchSpec::eCore_arm_armv7: switch (idx) { case 0: arch.SetTriple ("armv7-apple-ios"); return true; case 1: arch.SetTriple ("armv6-apple-ios"); return true; case 2: arch.SetTriple ("armv5-apple-ios"); return true; case 3: arch.SetTriple ("armv4-apple-ios"); return true; case 4: arch.SetTriple ("arm-apple-ios"); return true; case 5: arch.SetTriple ("thumbv7-apple-ios"); return true; case 6: arch.SetTriple ("thumbv6-apple-ios"); return true; case 7: arch.SetTriple ("thumbv5-apple-ios"); return true; case 8: arch.SetTriple ("thumbv4t-apple-ios"); return true; case 9: arch.SetTriple ("thumb-apple-ios"); return true; default: break; } break; case ArchSpec::eCore_arm_armv6: switch (idx) { case 0: arch.SetTriple ("armv6-apple-ios"); return true; case 1: arch.SetTriple ("armv5-apple-ios"); return true; case 2: arch.SetTriple ("armv4-apple-ios"); return true; case 3: arch.SetTriple ("arm-apple-ios"); return true; case 4: arch.SetTriple ("thumbv6-apple-ios"); return true; case 5: arch.SetTriple ("thumbv5-apple-ios"); return true; case 6: arch.SetTriple ("thumbv4t-apple-ios"); return true; case 7: arch.SetTriple ("thumb-apple-ios"); return true; default: break; } break; case ArchSpec::eCore_arm_armv5: switch (idx) { case 0: arch.SetTriple ("armv5-apple-ios"); return true; case 1: arch.SetTriple ("armv4-apple-ios"); return true; case 2: arch.SetTriple ("arm-apple-ios"); return true; case 3: arch.SetTriple ("thumbv5-apple-ios"); return true; case 4: arch.SetTriple ("thumbv4t-apple-ios"); return true; case 5: arch.SetTriple ("thumb-apple-ios"); return true; default: break; } break; case ArchSpec::eCore_arm_armv4: switch (idx) { case 0: arch.SetTriple ("armv4-apple-ios"); return true; case 1: arch.SetTriple ("arm-apple-ios"); return true; case 2: arch.SetTriple ("thumbv4t-apple-ios"); return true; case 3: arch.SetTriple ("thumb-apple-ios"); return true; default: break; } break; } arch.Clear(); return false; }