mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[Driver] Always link arclite when deploying earlier than macOS 10.14
For the upcoming hook in the ObjC runtime for class_getImageName (see previous commit).
This commit is contained in:
@@ -198,6 +198,26 @@ static void addVersionString(const ArgList &inputArgs, ArgStringList &arguments,
|
||||
arguments.push_back(inputArgs.MakeArgString(os.str()));
|
||||
}
|
||||
|
||||
/// Returns true if the compiler depends on features provided by the ObjC
|
||||
/// runtime that are not present on the deployment target indicated by
|
||||
/// \p triple.
|
||||
static bool wantsObjCRuntime(const llvm::Triple &triple) {
|
||||
assert((!triple.isTvOS() || triple.isiOS()) &&
|
||||
"tvOS is considered a kind of iOS");
|
||||
|
||||
// When updating the versions listed here, please record the most recent
|
||||
// feature being depended on and when it was introduced:
|
||||
//
|
||||
// - The hook to override class_getImageName (macOS 10.14 and equivalent)
|
||||
if (triple.isiOS())
|
||||
return triple.isOSVersionLT(12);
|
||||
if (triple.isMacOSX())
|
||||
return triple.isMacOSXVersionLT(10, 14);
|
||||
if (triple.isWatchOS())
|
||||
return triple.isOSVersionLT(5);
|
||||
llvm_unreachable("unknown Darwin OS");
|
||||
}
|
||||
|
||||
ToolChain::InvocationInfo
|
||||
toolchains::Darwin::constructInvocation(const LinkJobAction &job,
|
||||
const JobContext &context) const {
|
||||
@@ -282,15 +302,9 @@ toolchains::Darwin::constructInvocation(const LinkJobAction &job,
|
||||
if (llvm::sys::fs::exists(CompilerRTPath))
|
||||
Arguments.push_back(context.Args.MakeArgString(CompilerRTPath));
|
||||
|
||||
bool wantsObjCRuntime = false;
|
||||
if (Triple.isiOS())
|
||||
wantsObjCRuntime = Triple.isOSVersionLT(9);
|
||||
else if (Triple.isMacOSX())
|
||||
wantsObjCRuntime = Triple.isMacOSXVersionLT(10, 11);
|
||||
|
||||
if (context.Args.hasFlag(options::OPT_link_objc_runtime,
|
||||
options::OPT_no_link_objc_runtime,
|
||||
/*Default=*/wantsObjCRuntime)) {
|
||||
/*Default=*/wantsObjCRuntime(Triple))) {
|
||||
llvm::SmallString<128> ARCLiteLib(D.getSwiftProgramPath());
|
||||
llvm::sys::path::remove_filename(ARCLiteLib); // 'swift'
|
||||
llvm::sys::path::remove_filename(ARCLiteLib); // 'bin'
|
||||
|
||||
@@ -11,15 +11,24 @@
|
||||
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target x86_64-apple-ios8.0 %S/../Inputs/empty.swift | %FileCheck -check-prefix IOS_ARCLITE %s
|
||||
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target x86_64-apple-macosx10.11 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO_ARCLITE %s
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target x86_64-apple-ios9.0 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO_ARCLITE %s
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target arm64-apple-tvos9.0 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO_ARCLITE %s
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target armv7k-apple-watchos2.0 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO_ARCLITE %s
|
||||
|
||||
// IOS_ARCLITE: bin/ld{{"? }}
|
||||
// IOS_ARCLITE: -force_load {{[^ ]+/lib/arc/libarclite_iphonesimulator.a}}
|
||||
// IOS_ARCLITE: -o {{[^ ]+}}
|
||||
|
||||
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target x86_64-apple-macosx10.14 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO_ARCLITE %s
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target x86_64-apple-macosx10.13 %S/../Inputs/empty.swift | %FileCheck -check-prefix ANY_ARCLITE %s
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target x86_64-apple-ios12 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO_ARCLITE %s
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target x86_64-apple-ios11 %S/../Inputs/empty.swift | %FileCheck -check-prefix ANY_ARCLITE %s
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target arm64-apple-tvos12 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO_ARCLITE %s
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target arm64-apple-tvos11 %S/../Inputs/empty.swift | %FileCheck -check-prefix ANY_ARCLITE %s
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target armv7k-apple-watchos5 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO_ARCLITE %s
|
||||
// RUN: %swiftc_driver -driver-print-jobs -target armv7k-apple-watchos4 %S/../Inputs/empty.swift | %FileCheck -check-prefix ANY_ARCLITE %s
|
||||
|
||||
// NO_ARCLITE: bin/ld{{"? }}
|
||||
// NO_ARCLITE-NOT: arclite
|
||||
// NO_ARCLITE: -o {{[^ ]+}}
|
||||
|
||||
// ANY_ARCLITE: bin/ld{{"? }}
|
||||
// ANY_ARCLITE: -force_load {{[^ ]+}}/lib/arc/libarclite_{{.+}}.a
|
||||
// ANY_ARCLITE: -o {{[^ ]+}}
|
||||
|
||||
Reference in New Issue
Block a user