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()));
|
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
|
ToolChain::InvocationInfo
|
||||||
toolchains::Darwin::constructInvocation(const LinkJobAction &job,
|
toolchains::Darwin::constructInvocation(const LinkJobAction &job,
|
||||||
const JobContext &context) const {
|
const JobContext &context) const {
|
||||||
@@ -282,15 +302,9 @@ toolchains::Darwin::constructInvocation(const LinkJobAction &job,
|
|||||||
if (llvm::sys::fs::exists(CompilerRTPath))
|
if (llvm::sys::fs::exists(CompilerRTPath))
|
||||||
Arguments.push_back(context.Args.MakeArgString(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,
|
if (context.Args.hasFlag(options::OPT_link_objc_runtime,
|
||||||
options::OPT_no_link_objc_runtime,
|
options::OPT_no_link_objc_runtime,
|
||||||
/*Default=*/wantsObjCRuntime)) {
|
/*Default=*/wantsObjCRuntime(Triple))) {
|
||||||
llvm::SmallString<128> ARCLiteLib(D.getSwiftProgramPath());
|
llvm::SmallString<128> ARCLiteLib(D.getSwiftProgramPath());
|
||||||
llvm::sys::path::remove_filename(ARCLiteLib); // 'swift'
|
llvm::sys::path::remove_filename(ARCLiteLib); // 'swift'
|
||||||
llvm::sys::path::remove_filename(ARCLiteLib); // 'bin'
|
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-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: bin/ld{{"? }}
|
||||||
// IOS_ARCLITE: -force_load {{[^ ]+/lib/arc/libarclite_iphonesimulator.a}}
|
// IOS_ARCLITE: -force_load {{[^ ]+/lib/arc/libarclite_iphonesimulator.a}}
|
||||||
// IOS_ARCLITE: -o {{[^ ]+}}
|
// 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: bin/ld{{"? }}
|
||||||
// NO_ARCLITE-NOT: arclite
|
// NO_ARCLITE-NOT: arclite
|
||||||
// NO_ARCLITE: -o {{[^ ]+}}
|
// 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