Skip to content

Commit 4a16261

Browse files
[Driver] Update OS versions for rpath checks.
Make sure that we add the appropriate rpaths so that the appropriate _Concurrency back-deployment library can be picked up. We don't need to update the Swift driver since it uses the C++ driver as the source of truth to determine if the relevant rpath should be added or not.
1 parent 90cb550 commit 4a16261

File tree

6 files changed

+61
-28
lines changed

6 files changed

+61
-28
lines changed

include/swift/Basic/Platform.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,10 @@ namespace swift {
5555
bool triplesAreValidForZippering(const llvm::Triple &target,
5656
const llvm::Triple &targetVariant);
5757

58-
/// Returns true if the given triple represents an OS that ships with
59-
/// ABI-stable swift libraries (eg. in /usr/lib/swift).
60-
bool tripleRequiresRPathForSwiftInOS(const llvm::Triple &triple);
58+
/// Returns true if the given triple represents an OS that has all the
59+
/// "built-in" ABI-stable libraries (stdlib and _Concurrency)
60+
/// (eg. in /usr/lib/swift).
61+
bool tripleRequiresRPathForSwiftLibrariesInOS(const llvm::Triple &triple);
6162

6263
/// Returns the platform name for a given target triple.
6364
///

lib/Basic/Platform.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,25 @@ bool swift::triplesAreValidForZippering(const llvm::Triple &target,
7979
return false;
8080
}
8181

82-
bool swift::tripleRequiresRPathForSwiftInOS(const llvm::Triple &triple) {
82+
bool swift::tripleRequiresRPathForSwiftLibrariesInOS(
83+
const llvm::Triple &triple) {
8384
if (triple.isMacOSX()) {
84-
// macOS 10.14.4 contains a copy of Swift, but the linker will still use an
85-
// rpath-based install name until 10.15.
86-
return triple.isMacOSXVersionLT(10, 15);
85+
// macOS versions before 10.14.4 don't have Swift in the OS
86+
// (the linker still uses an rpath-based install name until 10.15).
87+
// macOS versions before 12.0 don't have _Concurrency in the OS.
88+
return triple.isMacOSXVersionLT(12, 0);
8789
}
8890

8991
if (triple.isiOS()) {
90-
return triple.isOSVersionLT(12, 2);
92+
// iOS versions before 12.2 don't have Swift in the OS.
93+
// iOS versions before 15.0 don't have _Concurrency in the OS.
94+
return triple.isOSVersionLT(15, 0);
9195
}
9296

9397
if (triple.isWatchOS()) {
94-
return triple.isOSVersionLT(5, 2);
98+
// watchOS versions before 5.2 don't have Swift in the OS.
99+
// watchOS versions before 8.0 don't have _Concurrency in the OS.
100+
return triple.isOSVersionLT(8, 0);
95101
}
96102

97103
// Other platforms don't have Swift installed as part of the OS by default.

lib/Driver/DarwinToolChains.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ toolchains::Darwin::addArgsToLinkStdlib(ArgStringList &Arguments,
471471
Arguments.push_back("-rpath");
472472
Arguments.push_back(context.Args.MakeArgString(path));
473473
}
474-
} else if (!tripleRequiresRPathForSwiftInOS(getTriple()) ||
474+
} else if (!tripleRequiresRPathForSwiftLibrariesInOS(getTriple()) ||
475475
context.Args.hasArg(options::OPT_no_stdlib_rpath)) {
476476
// If targeting an OS with Swift in /usr/lib/swift, the LC_ID_DYLIB
477477
// install_name the stdlib will be an absolute path like
@@ -499,9 +499,11 @@ toolchains::Darwin::addArgsToLinkStdlib(ArgStringList &Arguments,
499499
// package isn't installed.
500500
Arguments.push_back("-rpath");
501501
Arguments.push_back(context.Args.MakeArgString("/usr/lib/swift"));
502-
// We don't need an rpath for /System/iOSSupport/usr/lib/swift because...
503-
assert(!tripleIsMacCatalystEnvironment(getTriple())
504-
&& "macCatalyst not supported without Swift-in-the-OS");
502+
// We don’t need an rpath for /System/iOSSupport/usr/lib/swift because:
503+
// 1. The standard library and overlays were part of the OS before
504+
// Catalyst was introduced, so they are always available for Catalyst.
505+
// 2. The _Concurrency back-deployment library is zippered, whereas only
506+
// unzippered frameworks need an unzippered twin in /System/iOSSupport.
505507
}
506508
}
507509

lib/FrontendTool/FrontendTool.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1841,7 +1841,7 @@ static void printTripleInfo(const llvm::Triple &triple,
18411841
}
18421842

18431843
out << " \"librariesRequireRPath\": "
1844-
<< (tripleRequiresRPathForSwiftInOS(triple) ? "true" : "false")
1844+
<< (tripleRequiresRPathForSwiftLibrariesInOS(triple) ? "true" : "false")
18451845
<< "\n";
18461846

18471847
out << " }";

test/Driver/linker-rpath.swift

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,30 @@
66
// RUN: %swiftc_driver_plain -driver-print-jobs -target x86_64-apple-macosx10.14 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
77
// RUN: %swiftc_driver_plain -driver-print-jobs -target x86_64-apple-macosx10.14.3 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
88
// RUN: %swiftc_driver_plain -driver-print-jobs -target x86_64-apple-macosx10.14.4 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
9-
// RUN: %swiftc_driver_plain -driver-print-jobs -target x86_64-apple-macosx10.15 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
9+
// RUN: %swiftc_driver_plain -driver-print-jobs -target x86_64-apple-macosx10.15 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
10+
// RUN: %swiftc_driver_plain -driver-print-jobs -target x86_64-apple-macosx11.0 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
11+
// RUN: %swiftc_driver_plain -driver-print-jobs -target x86_64-apple-macosx12.0 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
1012

1113
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-ios12 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
1214
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-ios12.1 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
13-
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-ios12.2 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
14-
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-ios13 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
15+
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-ios12.2 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
16+
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-ios13 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
17+
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-ios14 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
18+
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-ios15 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
1519

1620
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-tvos12 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
1721
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-tvos12.1 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
18-
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-tvos12.2 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
19-
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-tvos13 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
22+
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-tvos12.2 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
23+
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-tvos13 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
24+
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-tvos14 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
25+
// RUN: %swiftc_driver_plain -driver-print-jobs -target arm64-apple-tvos15 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
2026

2127
// RUN: %swiftc_driver_plain -driver-print-jobs -target armv7k-apple-watchos5 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
2228
// RUN: %swiftc_driver_plain -driver-print-jobs -target armv7k-apple-watchos5.1 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
23-
// RUN: %swiftc_driver_plain -driver-print-jobs -target armv7k-apple-watchos5.2 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
24-
// RUN: %swiftc_driver_plain -driver-print-jobs -target armv7k-apple-watchos6 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
29+
// RUN: %swiftc_driver_plain -driver-print-jobs -target armv7k-apple-watchos5.2 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
30+
// RUN: %swiftc_driver_plain -driver-print-jobs -target armv7k-apple-watchos6 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
31+
// RUN: %swiftc_driver_plain -driver-print-jobs -target armv7k-apple-watchos7 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
32+
// RUN: %swiftc_driver_plain -driver-print-jobs -target armv7k-apple-watchos8 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
2533

2634
// RPATH: bin/ld{{"? }}
2735
// RPATH-SAME: -rpath {{"?/usr/lib/swift(-.+)?"? }}
@@ -39,7 +47,7 @@
3947

4048
// ### Test with -no-toolchain-stdlib-rpath
4149
// RUN: %swiftc_driver_plain -driver-print-jobs -no-toolchain-stdlib-rpath -target x86_64-apple-macosx10.9 %S/../Inputs/empty.swift | %FileCheck -check-prefix RPATH %s
42-
// RUN: %swiftc_driver_plain -driver-print-jobs -no-toolchain-stdlib-rpath -target x86_64-apple-macosx10.15 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
50+
// RUN: %swiftc_driver_plain -driver-print-jobs -no-toolchain-stdlib-rpath -target x86_64-apple-macosx12.0 %S/../Inputs/empty.swift | %FileCheck -check-prefix NO-RPATH %s
4351

4452
// TOOLCHAIN-RPATH: bin/ld{{"? }}
4553
// TOOLCHAIN-RPATH-SAME: -rpath garbage/[[PLATFORM]]{{ }}

test/Driver/print_target_info.swift

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@
88
// RUN: %swift_driver -print-target-info -target x86_64-unknown-linux -static-stdlib | %FileCheck -check-prefix CHECK-LINUX-STATIC %s
99
// RUN: %swift_frontend_plain -print-target-info -target x86_64-unknown-linux -use-static-resource-dir | %FileCheck -check-prefix CHECK-LINUX-STATIC %s
1010

11-
// RUN: %swift_driver -print-target-info -target x86_64-apple-macosx10.15 -target-variant x86_64-apple-ios13-macabi | %FileCheck -check-prefix CHECK-ZIPPERED %s
12-
// RUN: %target-swift-frontend -print-target-info -target x86_64-apple-macosx10.15 -target-variant x86_64-apple-ios13-macabi | %FileCheck -check-prefix CHECK-ZIPPERED %s
11+
// RUN: %swift_driver -print-target-info -target x86_64-apple-macosx10.15 -target-variant x86_64-apple-ios13-macabi | %FileCheck -check-prefix CHECK-PRE-CONCURRENCY-ZIPPERED %s
12+
// RUN: %target-swift-frontend -print-target-info -target x86_64-apple-macosx10.15 -target-variant x86_64-apple-ios13-macabi | %FileCheck -check-prefix CHECK-PRE-CONCURRENCY-ZIPPERED %s
13+
14+
// RUN: %swift_driver -print-target-info -target x86_64-apple-macosx12.0 -target-variant x86_64-apple-ios15-macabi | %FileCheck -check-prefix CHECK-ZIPPERED %s
15+
// RUN: %target-swift-frontend -print-target-info -target x86_64-apple-macosx12.0 -target-variant x86_64-apple-ios15-macabi | %FileCheck -check-prefix CHECK-ZIPPERED %s
1316

1417
// RUN: %swift_driver -print-target-info -target x86_64-apple-ios12.0 | %FileCheck -check-prefix CHECK-IOS-SIM %s
1518

@@ -67,20 +70,33 @@
6770

6871
// CHECK-LINUX-STATIC-NOT: "targetVariant":
6972

73+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "target": {
74+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "triple": "x86_64-apple-macosx10.15"
75+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "unversionedTriple": "x86_64-apple-macosx"
76+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "moduleTriple": "x86_64-apple-macos"
77+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "swiftRuntimeCompatibilityVersion": "5.1"
78+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "librariesRequireRPath": true
79+
// CHECK-PRE-CONCURRENCY-ZIPPERED: }
80+
81+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "targetVariant": {
82+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "triple": "x86_64-apple-ios13-macabi"
83+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "unversionedTriple": "x86_64-apple-ios-macabi"
84+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "moduleTriple": "x86_64-apple-ios-macabi"
85+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "swiftRuntimeCompatibilityVersion": "5.1"
86+
// CHECK-PRE-CONCURRENCY-ZIPPERED: "librariesRequireRPath": true
87+
// CHECK-PRE-CONCURRENCY-ZIPPERED: }
7088

7189
// CHECK-ZIPPERED: "target": {
72-
// CHECK-ZIPPERED: "triple": "x86_64-apple-macosx10.15"
90+
// CHECK-ZIPPERED: "triple": "x86_64-apple-macosx12.0"
7391
// CHECK-ZIPPERED: "unversionedTriple": "x86_64-apple-macosx"
7492
// CHECK-ZIPPERED: "moduleTriple": "x86_64-apple-macos"
75-
// CHECK-ZIPPERED: "swiftRuntimeCompatibilityVersion": "5.1"
7693
// CHECK-ZIPPERED: "librariesRequireRPath": false
7794
// CHECK-ZIPPERED: }
7895

7996
// CHECK-ZIPPERED: "targetVariant": {
80-
// CHECK-ZIPPERED: "triple": "x86_64-apple-ios13-macabi"
97+
// CHECK-ZIPPERED: "triple": "x86_64-apple-ios15-macabi"
8198
// CHECK-ZIPPERED: "unversionedTriple": "x86_64-apple-ios-macabi"
8299
// CHECK-ZIPPERED: "moduleTriple": "x86_64-apple-ios-macabi"
83-
// CHECK-ZIPPERED: "swiftRuntimeCompatibilityVersion": "5.1"
84100
// CHECK-ZIPPERED: "librariesRequireRPath": false
85101
// CHECK-ZIPPERED: }
86102

0 commit comments

Comments
 (0)