[Driver] Compute MacOS/iOS version from triple if/when we actually need it. NFC.

llvm-svn: 240065
This commit is contained in:
Alexey Samsonov 2015-06-18 21:46:05 +00:00
parent cf5c220da5
commit 905c802f5b
2 changed files with 19 additions and 33 deletions

View File

@ -49,22 +49,8 @@ MachO::MachO(const Driver &D, const llvm::Triple &Triple,
}
/// Darwin - Darwin tool chain for i386 and x86_64.
Darwin::Darwin(const Driver & D, const llvm::Triple & Triple,
const ArgList & Args)
: MachO(D, Triple, Args), TargetInitialized(false) {
// Compute the initial Darwin version from the triple
unsigned Major, Minor, Micro;
if (!Triple.getMacOSXVersion(Major, Minor, Micro))
getDriver().Diag(diag::err_drv_invalid_darwin_version) <<
Triple.getOSName();
llvm::raw_string_ostream(MacosxVersionMin)
<< Major << '.' << Minor << '.' << Micro;
// Compute the initial iOS version from the triple
Triple.getiOSVersion(Major, Minor, Micro);
llvm::raw_string_ostream(iOSVersionMin)
<< Major << '.' << Minor << '.' << Micro;
}
Darwin::Darwin(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
: MachO(D, Triple, Args), TargetInitialized(false) {}
types::ID MachO::LookupTypeForExtension(const char *Ext) const {
types::ID Ty = types::lookupTypeForExtension(Ext);
@ -489,8 +475,8 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
} else if (!OSXVersion && !iOSVersion) {
// If no deployment target was specified on the command line, check for
// environment defines.
StringRef OSXTarget;
StringRef iOSTarget;
std::string OSXTarget;
std::string iOSTarget;
if (char *env = ::getenv("MACOSX_DEPLOYMENT_TARGET"))
OSXTarget = env;
if (char *env = ::getenv("IPHONEOS_DEPLOYMENT_TARGET"))
@ -510,15 +496,24 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
}
// If no OSX or iOS target has been specified, try to guess platform
// from arch name.
// from arch name and compute the version from the triple.
if (OSXTarget.empty() && iOSTarget.empty()) {
StringRef MachOArchName = getMachOArchName(Args);
unsigned Major, Minor, Micro;
if (MachOArchName == "armv7" || MachOArchName == "armv7s" ||
MachOArchName == "arm64")
iOSTarget = iOSVersionMin;
else if (MachOArchName != "armv6m" && MachOArchName != "armv7m" &&
MachOArchName != "armv7em")
OSXTarget = MacosxVersionMin;
MachOArchName == "arm64") {
getTriple().getiOSVersion(Major, Minor, Micro);
llvm::raw_string_ostream(iOSTarget) << Major << '.' << Minor << '.'
<< Micro;
} else if (MachOArchName != "armv6m" && MachOArchName != "armv7m" &&
MachOArchName != "armv7em") {
if (!getTriple().getMacOSXVersion(Major, Minor, Micro)) {
getDriver().Diag(diag::err_drv_invalid_darwin_version)
<< getTriple().getOSName();
}
llvm::raw_string_ostream(OSXTarget) << Major << '.' << Minor << '.'
<< Micro;
}
}
// Allow conflicts among OSX and iOS for historical reasons, but choose the

View File

@ -334,15 +334,6 @@ public:
/// The OS version we are targeting.
mutable VersionTuple TargetVersion;
private:
/// The default macosx-version-min of this tool chain; empty until
/// initialized.
std::string MacosxVersionMin;
/// The default ios-version-min of this tool chain; empty until
/// initialized.
std::string iOSVersionMin;
private:
void AddDeploymentTarget(llvm::opt::DerivedArgList &Args) const;