diff options
Diffstat (limited to 'clang/lib/Driver/ToolChains/Darwin.h')
-rw-r--r-- | clang/lib/Driver/ToolChains/Darwin.h | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/clang/lib/Driver/ToolChains/Darwin.h b/clang/lib/Driver/ToolChains/Darwin.h index 6d6493a6d1b..87d553bd7e0 100644 --- a/clang/lib/Driver/ToolChains/Darwin.h +++ b/clang/lib/Driver/ToolChains/Darwin.h @@ -268,14 +268,17 @@ public: enum DarwinPlatformKind { MacOS, IPhoneOS, - IPhoneOSSimulator, TvOS, - TvOSSimulator, WatchOS, - WatchOSSimulator + LastDarwinPlatform = WatchOS + }; + enum DarwinEnvironmentKind { + NativeEnvironment, + Simulator, }; mutable DarwinPlatformKind TargetPlatform; + mutable DarwinEnvironmentKind TargetEnvironment; /// The OS version we are targeting. mutable VersionTuple TargetVersion; @@ -317,32 +320,34 @@ protected: // FIXME: Eliminate these ...Target functions and derive separate tool chains // for these targets and put version in constructor. - void setTarget(DarwinPlatformKind Platform, unsigned Major, unsigned Minor, - unsigned Micro) const { + void setTarget(DarwinPlatformKind Platform, DarwinEnvironmentKind Environment, + unsigned Major, unsigned Minor, unsigned Micro) const { // 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 && TargetPlatform == Platform && + TargetEnvironment == Environment && TargetVersion == VersionTuple(Major, Minor, Micro)) return; assert(!TargetInitialized && "Target already initialized!"); TargetInitialized = true; TargetPlatform = Platform; + TargetEnvironment = Environment; TargetVersion = VersionTuple(Major, Minor, Micro); - if (Platform == IPhoneOSSimulator || Platform == TvOSSimulator || - Platform == WatchOSSimulator) + if (Environment == Simulator) const_cast<Darwin *>(this)->setTripleEnvironment(llvm::Triple::Simulator); } bool isTargetIPhoneOS() const { assert(TargetInitialized && "Target not initialized!"); - return TargetPlatform == IPhoneOS || TargetPlatform == TvOS; + return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) && + TargetEnvironment == NativeEnvironment; } bool isTargetIOSSimulator() const { assert(TargetInitialized && "Target not initialized!"); - return TargetPlatform == IPhoneOSSimulator || - TargetPlatform == TvOSSimulator; + return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) && + TargetEnvironment == Simulator; } bool isTargetIOSBased() const { @@ -352,32 +357,32 @@ protected: bool isTargetTvOS() const { assert(TargetInitialized && "Target not initialized!"); - return TargetPlatform == TvOS; + return TargetPlatform == TvOS && TargetEnvironment == NativeEnvironment; } bool isTargetTvOSSimulator() const { assert(TargetInitialized && "Target not initialized!"); - return TargetPlatform == TvOSSimulator; + return TargetPlatform == TvOS && TargetEnvironment == Simulator; } bool isTargetTvOSBased() const { assert(TargetInitialized && "Target not initialized!"); - return TargetPlatform == TvOS || TargetPlatform == TvOSSimulator; + return TargetPlatform == TvOS; } bool isTargetWatchOS() const { assert(TargetInitialized && "Target not initialized!"); - return TargetPlatform == WatchOS; + return TargetPlatform == WatchOS && TargetEnvironment == NativeEnvironment; } bool isTargetWatchOSSimulator() const { assert(TargetInitialized && "Target not initialized!"); - return TargetPlatform == WatchOSSimulator; + return TargetPlatform == WatchOS && TargetEnvironment == Simulator; } bool isTargetWatchOSBased() const { assert(TargetInitialized && "Target not initialized!"); - return TargetPlatform == WatchOS || TargetPlatform == WatchOSSimulator; + return TargetPlatform == WatchOS; } bool isTargetMacOS() const { @@ -413,10 +418,11 @@ protected: Action::OffloadKind DeviceOffloadKind) const override; StringRef getPlatformFamily() const; - static StringRef getSDKName(StringRef isysroot); StringRef getOSLibraryNameSuffix() const; public: + static StringRef getSDKName(StringRef isysroot); + /// } /// @name ToolChain Implementation /// { |