static std::string getX86TargetCPU(const llvm::Triple &triple) { // Select the default CPU if none was given (or detection failed). // Intel Macs are relatively recent, take advantage of that. if (triple.isOSDarwin()) return triple.isArch64Bit() ? "core2" : "yonah"; // Everything else goes to x86-64 in 64-bit mode. if (triple.isArch64Bit()) return "x86-64"; if (triple.getOSName().startswith("haiku")) return "i586"; if (triple.getOSName().startswith("openbsd")) return "i486"; if (triple.getOSName().startswith("bitrig")) return "i686"; if (triple.getOSName().startswith("freebsd")) return "i486"; if (triple.getOSName().startswith("netbsd")) return "i486"; #if LDC_LLVM_VER >= 302 // All x86 devices running Android have core2 as their common // denominator. This makes a better choice than pentium4. if (triple.getEnvironment() == llvm::Triple::Android) return "core2"; #endif // Fallback to p4. return "pentium4"; }
static std::string getX86TargetCPU(std::string arch, const llvm::Triple &triple) { if (!arch.empty()) { if (arch != "native") return arch; // FIXME: Reject attempts to use -march=native unless the target matches // the host. // // FIXME: We should also incorporate the detected target features for use // with -native. std::string cpu = llvm::sys::getHostCPUName(); if (!cpu.empty() && cpu != "generic") return cpu; } // Select the default CPU if none was given (or detection failed). bool is64Bit = triple.getArch() == llvm::Triple::x86_64; if (triple.isOSDarwin()) return is64Bit ? "core2" : "yonah"; // Everything else goes to x86-64 in 64-bit mode. if (is64Bit) return "x86-64"; if (triple.getOSName().startswith("haiku")) return "i586"; if (triple.getOSName().startswith("openbsd")) return "i486"; if (triple.getOSName().startswith("bitrig")) return "i686"; if (triple.getOSName().startswith("freebsd")) return "i486"; if (triple.getOSName().startswith("netbsd")) return "i486"; #if LDC_LLVM_VER >= 302 // All x86 devices running Android have core2 as their common // denominator. This makes a better choice than pentium4. if (triple.getEnvironment() == llvm::Triple::Android) return "core2"; #endif // Fallback to p4. return "pentium4"; }
static std::pair<StringRef, clang::VersionTuple> getOSAndVersionForDiagnostics(const llvm::Triple &triple) { StringRef osName; unsigned major, minor, micro; if (triple.isMacOSX()) { // macOS triples represent their versions differently, so we have to use the // special accessor. triple.getMacOSXVersion(major, minor, micro); osName = swift::prettyPlatformString(PlatformKind::OSX); } else { triple.getOSVersion(major, minor, micro); if (triple.isWatchOS()) { osName = swift::prettyPlatformString(PlatformKind::watchOS); } else if (triple.isTvOS()) { assert(triple.isiOS() && "LLVM treats tvOS as a kind of iOS, so tvOS is checked first"); osName = swift::prettyPlatformString(PlatformKind::tvOS); } else if (triple.isiOS()) { osName = swift::prettyPlatformString(PlatformKind::iOS); } else { assert(!triple.isOSDarwin() && "unknown Apple OS"); // Fallback to the LLVM triple name. This isn't great (it won't be // capitalized or anything), but it's better than nothing. osName = triple.getOSName(); } } assert(!osName.empty()); clang::VersionTuple version; if (micro != 0) version = clang::VersionTuple(major, minor, micro); else version = clang::VersionTuple(major, minor); return {osName, version}; }
static std::string normalizeTriple(llvm::Triple Triple) { SmallString<64> T; T += Triple.getArchName(); T += "-"; T += Triple.getOSName(); return T.str(); }
static std::string getOS(llvm::Triple const &triple) { switch (triple.getOS()) { case llvm::Triple::Darwin : return "macosx"; case llvm::Triple::DragonFly : return "dragonfly"; case llvm::Triple::FreeBSD : return "freebsd"; case llvm::Triple::Linux : return "linux"; case llvm::Triple::Cygwin : case llvm::Triple::MinGW32 : case llvm::Triple::MinGW64 : case llvm::Triple::Win32 : return "windows"; case llvm::Triple::NetBSD : return "netbsd"; case llvm::Triple::OpenBSD : return "openbsd"; case llvm::Triple::Solaris : return "solaris"; case llvm::Triple::Haiku : return "haiku"; case llvm::Triple::Minix : return "minix"; default : return triple.getOSName().str(); } }
RenderScript32TargetInfo::RenderScript32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) : ARMleTargetInfo(llvm::Triple("armv7", Triple.getVendorName(), Triple.getOSName(), Triple.getEnvironmentName()), Opts) { IsRenderScriptTarget = true; LongWidth = LongAlign = 64; }
Darwin::Darwin(const HostInfo &Host, const llvm::Triple& Triple) : ToolChain(Host, Triple), TargetInitialized(false) { // Compute the initial Darwin version based on the host. bool HadExtra; std::string OSName = Triple.getOSName(); if (!Driver::GetReleaseVersion(&OSName[6], DarwinVersion[0], DarwinVersion[1], DarwinVersion[2], HadExtra)) getDriver().Diag(clang::diag::err_drv_invalid_darwin_version) << OSName; llvm::raw_string_ostream(MacosxVersionMin) << "10." << std::max(0, (int)DarwinVersion[0] - 4) << '.' << DarwinVersion[1]; }