diff options
author | Daniel Dunbar <daniel@zuster.org> | 2011-04-30 04:18:16 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2011-04-30 04:18:16 +0000 |
commit | b1189434ddb11067d7a3a8dd877d15ebdeef036a (patch) | |
tree | 432224be7cf45bfa6ff778deeee998be4594015f | |
parent | 9aaeb6400bc1fb595a4034eb0068bc0af8916b1a (diff) | |
download | bcm5719-llvm-b1189434ddb11067d7a3a8dd877d15ebdeef036a.tar.gz bcm5719-llvm-b1189434ddb11067d7a3a8dd877d15ebdeef036a.zip |
Driver/Darwin: Change Darwin toolchain to explicitly track is-ios-sim bit, and
update -mios-simulator-version-min to set it.
llvm-svn: 130592
-rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 12 | ||||
-rw-r--r-- | clang/lib/Driver/ToolChains.h | 24 |
2 files changed, 24 insertions, 12 deletions
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index 3602410b2c1..838e5bf2eb5 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -477,7 +477,17 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const { << Version->getAsString(Args); } - setTarget(/*isIPhoneOS=*/ !OSXVersion, Major, Minor, Micro); + bool IsIOSSim = bool(iOSSimVersion); + + // In GCC, the simulator historically was treated as being OS X in some + // contexts, like determining the link logic, despite generally being called + // with an iOS deployment target. For compatibility, we detect the + // simulator as iOS + x86, and treat it differently in a few contexts. + if (iOSVersion && (getTriple().getArch() == llvm::Triple::x86 || + getTriple().getArch() == llvm::Triple::x86_64)) + IsIOSSim = true; + + setTarget(/*IsIPhoneOS=*/ !OSXVersion, Major, Minor, Micro, IsIOSSim); } void DarwinClang::AddCXXStdlibLibArgs(const ArgList &Args, diff --git a/clang/lib/Driver/ToolChains.h b/clang/lib/Driver/ToolChains.h index 6265f3d7d40..7a1a0502529 100644 --- a/clang/lib/Driver/ToolChains.h +++ b/clang/lib/Driver/ToolChains.h @@ -60,6 +60,9 @@ private: /// Whether we are targeting iPhoneOS target. mutable bool TargetIsIPhoneOS; + /// Whether we are targeting the iPhoneOS simulator target. + mutable bool TargetIsIPhoneOSSimulator; + /// The OS version we are targeting. mutable unsigned TargetVersion[3]; @@ -81,18 +84,22 @@ public: // FIXME: Eliminate these ...Target functions and derive separate tool chains // for these targets and put version in constructor. - void setTarget(bool isIPhoneOS, unsigned Major, unsigned Minor, - unsigned Micro) const { + void setTarget(bool IsIPhoneOS, unsigned Major, unsigned Minor, + unsigned Micro, bool IsIOSSim) const { + assert((!IsIOSSim || IsIPhoneOS) && "Unexpected deployment target!"); + // FIXME: For now, allow reinitialization as long as values don't // change. This will go away when we move away from argument translation. - if (TargetInitialized && TargetIsIPhoneOS == isIPhoneOS && + if (TargetInitialized && TargetIsIPhoneOS == IsIPhoneOS && + TargetIsIPhoneOSSimulator == IsIOSSim && TargetVersion[0] == Major && TargetVersion[1] == Minor && TargetVersion[2] == Micro) return; assert(!TargetInitialized && "Target already initialized!"); TargetInitialized = true; - TargetIsIPhoneOS = isIPhoneOS; + TargetIsIPhoneOS = IsIPhoneOS; + TargetIsIPhoneOSSimulator = IsIOSSim; TargetVersion[0] = Major; TargetVersion[1] = Minor; TargetVersion[2] = Micro; @@ -104,13 +111,8 @@ public: } bool isTargetIOSSimulator() const { - // In GCC, the simulator historically was treated as being OS X in some - // contexts, like determining the link logic, despite generally being called - // with an iOS deployment target. For compatibility, we detect the - // simulator is iOS + x86, and treat it differently in a few contexts. - return isTargetIPhoneOS() && - (getTriple().getArch() == llvm::Triple::x86 || - getTriple().getArch() == llvm::Triple::x86_64); + assert(TargetInitialized && "Target not initialized!"); + return TargetIsIPhoneOSSimulator; } bool isTargetInitialized() const { return TargetInitialized; } |