diff options
author | Alex Lorenz <arphaman@gmail.com> | 2017-12-19 19:56:14 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2017-12-19 19:56:14 +0000 |
commit | 24f2ba0729b8b3096c58a414872a9450d51e53f5 (patch) | |
tree | 4b219c0ad0c541f9e232beffcf8a3b979e111a1c /lib/Driver | |
parent | 257d24609e764e401cd8e727495a3e569f2f8f54 (diff) |
[driver][darwin] Set the 'simulator' environment when it's specified
in '-target'
rdar://35742458
Differential Revision: https://reviews.llvm.org/D41076
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@321102 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver')
-rw-r--r-- | lib/Driver/ToolChains/Darwin.cpp | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/lib/Driver/ToolChains/Darwin.cpp b/lib/Driver/ToolChains/Darwin.cpp index 2114c28480..3d53a1711f 100644 --- a/lib/Driver/ToolChains/Darwin.cpp +++ b/lib/Driver/ToolChains/Darwin.cpp @@ -1181,9 +1181,12 @@ struct DarwinPlatform { }; using DarwinPlatformKind = Darwin::DarwinPlatformKind; + using DarwinEnvironmentKind = Darwin::DarwinEnvironmentKind; DarwinPlatformKind getPlatform() const { return Platform; } + DarwinEnvironmentKind getEnvironment() const { return Environment; } + StringRef getOSVersion() const { if (Kind == OSVersionArg) return Argument->getValue(); @@ -1234,8 +1237,17 @@ struct DarwinPlatform { } static DarwinPlatform createFromTarget(llvm::Triple::OSType OS, - StringRef OSVersion, Arg *A) { - return DarwinPlatform(TargetArg, getPlatformFromOS(OS), OSVersion, A); + StringRef OSVersion, Arg *A, + llvm::Triple::EnvironmentType Env) { + DarwinPlatform Result(TargetArg, getPlatformFromOS(OS), OSVersion, A); + switch (Env) { + case llvm::Triple::Simulator: + Result.Environment = DarwinEnvironmentKind::Simulator; + break; + default: + break; + } + return Result; } static DarwinPlatform createOSVersionArg(DarwinPlatformKind Platform, Arg *A) { @@ -1282,6 +1294,7 @@ private: SourceKind Kind; DarwinPlatformKind Platform; + DarwinEnvironmentKind Environment = DarwinEnvironmentKind::NativeEnvironment; std::string OSVersion; Arg *Argument; StringRef EnvVarName; @@ -1478,7 +1491,8 @@ Optional<DarwinPlatform> getDeploymentTargetFromTargetArg( return None; std::string OSVersion = getOSVersion(Triple.getOS(), Triple, TheDriver); return DarwinPlatform::createFromTarget(Triple.getOS(), OSVersion, - Args.getLastArg(options::OPT_target)); + Args.getLastArg(options::OPT_target), + Triple.getEnvironment()); } } // namespace @@ -1584,10 +1598,11 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const { } else llvm_unreachable("unknown kind of Darwin platform"); - DarwinEnvironmentKind Environment = NativeEnvironment; + DarwinEnvironmentKind Environment = OSTarget->getEnvironment(); // Recognize iOS targets with an x86 architecture as the iOS simulator. - if (Platform != MacOS && (getTriple().getArch() == llvm::Triple::x86 || - getTriple().getArch() == llvm::Triple::x86_64)) + if (Environment == NativeEnvironment && Platform != MacOS && + (getTriple().getArch() == llvm::Triple::x86 || + getTriple().getArch() == llvm::Triple::x86_64)) Environment = Simulator; setTarget(Platform, Environment, Major, Minor, Micro); |