Skip to content

Commit 67eab53

Browse files
committed
[Concurrency] Fix start of version ranges in install name magic symbols.
The magic symbols specify a version range where clients should reference a @rpath relative path to libswift_Concurrency.dylib instead of the standard absolute path. This version range started at macOS 10.15 and aligned versions, which is the oldest target supported by Concurrency. However, clients that use Concurrency can target earlier OSes as long as they availability-check their use of Concurrency. When targeting something earlier than 10.15, they'd reference the absolute path, then fail to find the back-deployment Concurrency runtime on OS versions that need it. Fix this by setting the start of the range to macOS 10.9 and aligned, which is the oldest target supported by Swift. rdar://140476764
1 parent 867cf28 commit 67eab53

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

stdlib/public/Concurrency/linker-support/magic-symbols-for-install-name.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@
3434
// Xcode inserting a runpath search path of /usr/lib/swift based on the deployment target being less than
3535
// SupportedTargets[target][SwiftConcurrencyMinimumDeploymentTarget] in SDKSettings.plist.
3636

37+
// Clients can back deploy to OS versions that predate Concurrency as an embedded library, and conditionally use
38+
// it behind an #availability check. Such clients will still need to link the embedded library instead of the OS version.
39+
// To support that, set the start version to Swift's first supported versions: macOS (née OS X) 10.9, iOS 7.0,
40+
// watchOS 2.0, tvOS 9.0 rather than Concurrency's first supported versions listed above.
41+
3742
// The linker uses a specially formatted symbol to do the back deployment:
3843
// $ld$previous$<install-name>$<compatibility-version>$<platform>$<start-version>$<end-version>$<symbol-name>$
3944
// compatibility-version and symbol-name are left off to apply to all library versions and symbols.
@@ -49,25 +54,25 @@
4954
RPATH_PREVIOUS_DIRECTIVE_IMPL(SWIFT_TARGET_LIBRARY_NAME, platform, startVersion, endVersion)
5055

5156
#if TARGET_OS_OSX || TARGET_OS_MACCATALYST
52-
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_MACOS, 10.15, 12.0)
57+
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_MACOS, 10.9, 12.0)
5358
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_MACCATALYST, 13.1, 15.0)
5459
#elif TARGET_OS_IOS && !TARGET_OS_VISION
5560
#if TARGET_OS_SIMULATOR
56-
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_IOSSIMULATOR, 13.0, 15.0)
61+
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_IOSSIMULATOR, 7.0, 15.0)
5762
#else
58-
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_IOS, 13.0, 15.0)
63+
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_IOS, 7.0, 15.0)
5964
#endif
6065
#elif TARGET_OS_WATCH
6166
#if TARGET_OS_SIMULATOR
62-
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_WATCHOSSIMULATOR, 6.0, 8.0)
67+
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_WATCHOSSIMULATOR, 2.0, 8.0)
6368
#else
64-
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_WATCHOS, 6.0, 8.0)
69+
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_WATCHOS, 2.0, 8.0)
6570
#endif
6671
#elif TARGET_OS_TV
6772
#if TARGET_OS_SIMULATOR
68-
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_TVOSSIMULATOR, 13.0, 15.0)
73+
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_TVOSSIMULATOR, 9.0, 15.0)
6974
#else
70-
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_TVOS, 13.0, 15.0)
75+
RPATH_PREVIOUS_DIRECTIVE(PLATFORM_TVOS, 9.0, 15.0)
7176
#endif
7277
#endif
7378
// Concurrency wasn't supported as an embedded library in any other OS, so no need to create back deployment

0 commit comments

Comments
 (0)