summaryrefslogtreecommitdiff
path: root/lib/Driver
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2017-12-19 19:56:14 +0000
committerAlex Lorenz <arphaman@gmail.com>2017-12-19 19:56:14 +0000
commit24f2ba0729b8b3096c58a414872a9450d51e53f5 (patch)
tree4b219c0ad0c541f9e232beffcf8a3b979e111a1c /lib/Driver
parent257d24609e764e401cd8e727495a3e569f2f8f54 (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.cpp27
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);