]> granicus.if.org Git - clang/commitdiff
Driver/Darwin: Change Darwin toolchain to explicitly track is-ios-sim bit, and
authorDaniel Dunbar <daniel@zuster.org>
Sat, 30 Apr 2011 04:18:16 +0000 (04:18 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sat, 30 Apr 2011 04:18:16 +0000 (04:18 +0000)
update -mios-simulator-version-min to set it.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130592 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/ToolChains.cpp
lib/Driver/ToolChains.h

index 3602410b2c1fc1a2a5a5aa55d4bf54147e5be31a..838e5bf2eb5c98226ad219ee9a5661e74a7d921c 100644 (file)
@@ -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,
index 6265f3d7d40288fe3e4a3eaa5353494931af6dab..7a1a05025296cf78cb1f3e6028578bdd8cce84f7 100644 (file)
@@ -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; }