forked from OSchip/llvm-project
More robust deployment target parsing on darwin
Summary: This is a more robust way of figuring out implicit deployment target from isysroot. It also handles iphone simulator target. Reviewers: bob.wilson, t.p.northover Reviewed By: t.p.northover Subscribers: t.p.northover, cfe-commits Differential Revision: http://reviews.llvm.org/D6939 llvm-svn: 226005
This commit is contained in:
parent
d94a5f09dd
commit
faf31e7cc5
|
@ -494,16 +494,28 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
|
|||
if (char *env = ::getenv("IPHONEOS_DEPLOYMENT_TARGET"))
|
||||
iOSTarget = env;
|
||||
|
||||
// If no '-miphoneos-version-min' specified on the command line and
|
||||
// IPHONEOS_DEPLOYMENT_TARGET is not defined, see if we can set the default
|
||||
// based on -isysroot.
|
||||
if (iOSTarget.empty()) {
|
||||
// If there is no command-line argument to specify the Target version and
|
||||
// no environment variable defined, see if we can set the default based
|
||||
// on -isysroot.
|
||||
if (iOSTarget.empty() && OSXTarget.empty() &&
|
||||
Args.hasArg(options::OPT_isysroot)) {
|
||||
if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {
|
||||
StringRef first, second;
|
||||
StringRef isysroot = A->getValue();
|
||||
std::tie(first, second) = isysroot.split(StringRef("SDKs/iPhoneOS"));
|
||||
if (second != "")
|
||||
iOSTarget = second.substr(0,3);
|
||||
// Assume SDK has path: SOME_PATH/SDKs/PlatformXX.YY.sdk
|
||||
size_t BeginSDK = isysroot.rfind("SDKs/");
|
||||
size_t EndSDK = isysroot.rfind(".sdk");
|
||||
if (BeginSDK != StringRef::npos && EndSDK != StringRef::npos) {
|
||||
StringRef SDK = isysroot.slice(BeginSDK + 5, EndSDK);
|
||||
size_t StartVer = SDK.find_first_of("123456789");
|
||||
if (StartVer != StringRef::npos) {
|
||||
StringRef Version = SDK.substr(StartVer);
|
||||
if (SDK.startswith("iPhoneOS") ||
|
||||
SDK.startswith("iPhoneSimulator"))
|
||||
iOSTarget = Version;
|
||||
else if (SDK.startswith("MacOSX"))
|
||||
OSXTarget = Version;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -40,3 +40,38 @@
|
|||
// env SDKROOT=/ cmd //c echo %SDKROOT%
|
||||
//
|
||||
// This test passes using env.exe from GnuWin32.
|
||||
|
||||
// Check if clang set the correct deployment target from -sysroot
|
||||
//
|
||||
// RUN: rm -rf %t/SDKs/iPhoneOS8.0.0.sdk
|
||||
// RUN: mkdir -p %t/SDKs/iPhoneOS8.0.0.sdk
|
||||
// RUN: env SDKROOT=%t/SDKs/iPhoneOS8.0.0.sdk %clang -target arm64-apple-darwin %s -### 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-IPHONE %s
|
||||
//
|
||||
// CHECK-IPHONE: clang
|
||||
// CHECK-IPHONE: "-cc1"
|
||||
// CHECK-IPHONE: "-triple" "arm64-apple-ios8.0.0"
|
||||
// CHECK-IPHONE: ld
|
||||
// CHECK-IPHONE: "-iphoneos_version_min" "8.0.0"
|
||||
//
|
||||
// RUN: rm -rf %t/SDKs/iPhoneSimulator8.0.0.sdk
|
||||
// RUN: mkdir -p %t/SDKs/iPhoneSimulator8.0.0.sdk
|
||||
// RUN: env SDKROOT=%t/SDKs/iPhoneSimulator8.0.0.sdk %clang -target x86_64-apple-darwin %s -### 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-SIMULATOR %s
|
||||
//
|
||||
// CHECK-SIMULATOR: clang
|
||||
// CHECK-SIMULATOR: "-cc1"
|
||||
// CHECK-SIMULATOR: "-triple" "x86_64-apple-ios8.0.0"
|
||||
// CHECK-SIMULATOR: ld
|
||||
// CHECK-SIMULATOR: "-ios_simulator_version_min" "8.0.0"
|
||||
//
|
||||
// RUN: rm -rf %t/SDKs/MacOSX10.10.0.sdk
|
||||
// RUN: mkdir -p %t/SDKs/MacOSX10.10.0.sdk
|
||||
// RUN: env SDKROOT=%t/SDKs/MacOSX10.10.0.sdk %clang -target x86_64-apple-darwin %s -### 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-MACOSX %s
|
||||
//
|
||||
// CHECK-MACOSX: clang
|
||||
// CHECK-MACOSX: "-cc1"
|
||||
// CHECK-MACOSX: "-triple" "x86_64-apple-macosx10.10.0"
|
||||
// CHECK-MACOSX: ld
|
||||
// CHECK-MACOSX: "-macosx_version_min" "10.10.0"
|
||||
|
|
Loading…
Reference in New Issue