Skip to content

Commit 1bc94bf

Browse files
gottesmmDougGregor
authored andcommitted
[concurrency] Implement a compatibility .a library for Concurrency.
In a back deployment scenario, this will provide a place where one could provide function implementations that are not available in the relevant stdlib. This is just setting up for future work and isn't doing anything interesting beyond wiring it up/making sure that it is wired up correctly with tests.
1 parent 30a7ac7 commit 1bc94bf

File tree

15 files changed

+105
-6
lines changed

15 files changed

+105
-6
lines changed

include/swift/AST/IRGenOptions.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,8 @@ class IRGenOptions {
372372
/// Pull in runtime compatibility shim libraries by autolinking.
373373
Optional<llvm::VersionTuple> AutolinkRuntimeCompatibilityLibraryVersion;
374374
Optional<llvm::VersionTuple> AutolinkRuntimeCompatibilityDynamicReplacementLibraryVersion;
375+
Optional<llvm::VersionTuple>
376+
AutolinkRuntimeCompatibilityConcurrencyLibraryVersion;
375377

376378
JITDebugArtifact DumpJIT = JITDebugArtifact::None;
377379

include/swift/Frontend/BackDeploymentLibs.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,6 @@
2727
BACK_DEPLOYMENT_LIB((5, 0), all, "swiftCompatibility50")
2828
BACK_DEPLOYMENT_LIB((5, 1), all, "swiftCompatibility51")
2929
BACK_DEPLOYMENT_LIB((5, 0), executable, "swiftCompatibilityDynamicReplacements")
30+
BACK_DEPLOYMENT_LIB((5, 5), all, "swiftCompatibilityConcurrency")
3031

3132
#undef BACK_DEPLOYMENT_LIB

include/swift/Option/Options.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,6 +1226,12 @@ def disable_autolinking_runtime_compatibility_dynamic_replacements
12261226
HelpText<"Do not use autolinking for the dynamic replacement runtime "
12271227
"compatibility library">;
12281228

1229+
def disable_autolinking_runtime_compatibility_concurrency
1230+
: Flag<[ "-" ], "disable-autolinking-runtime-compatibility-concurrency">,
1231+
Flags<[ FrontendOption ]>,
1232+
HelpText<"Do not use autolinking for the concurrency runtime "
1233+
"compatibility library">;
1234+
12291235
def emit_symbol_graph: Flag<["-"], "emit-symbol-graph">,
12301236
Flags<[FrontendOption, NoInteractiveOption, SupplementaryOutput, HelpHidden]>,
12311237
HelpText<"Emit a symbol graph">;

lib/Driver/DarwinToolChains.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,8 @@ toolchains::Darwin::addArgsToLinkStdlib(ArgStringList &Arguments,
409409
runtimeCompatibilityVersion = llvm::VersionTuple(5, 0);
410410
} else if (value.equals("5.1")) {
411411
runtimeCompatibilityVersion = llvm::VersionTuple(5, 1);
412+
} else if (value.equals("5.5")) {
413+
runtimeCompatibilityVersion = llvm::VersionTuple(5, 5);
412414
} else if (value.equals("none")) {
413415
runtimeCompatibilityVersion = None;
414416
} else {

lib/Driver/ToolChains.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,7 @@ ToolChain::constructInvocation(const CompileJobAction &job,
556556
options::OPT_disable_autolinking_runtime_compatibility)) {
557557
Arguments.push_back("-disable-autolinking-runtime-compatibility");
558558
}
559-
559+
560560
if (auto arg = context.Args.getLastArg(
561561
options::OPT_runtime_compatibility_version)) {
562562
Arguments.push_back("-runtime-compatibility-version");
@@ -577,6 +577,9 @@ ToolChain::constructInvocation(const CompileJobAction &job,
577577
Arguments,
578578
options::
579579
OPT_disable_autolinking_runtime_compatibility_dynamic_replacements);
580+
context.Args.AddLastArg(
581+
Arguments,
582+
options::OPT_disable_autolinking_runtime_compatibility_concurrency);
580583

581584
if (context.OI.CompilerMode == OutputInfo::Mode::SingleCompile) {
582585
context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph);

lib/Frontend/CompilerInvocation.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1835,6 +1835,8 @@ static bool ParseIRGenArgs(IRGenOptions &Opts, ArgList &Args,
18351835
runtimeCompatibilityVersion = llvm::VersionTuple(5, 0);
18361836
} else if (version.equals("5.1")) {
18371837
runtimeCompatibilityVersion = llvm::VersionTuple(5, 1);
1838+
} else if (version.equals("5.5")) {
1839+
runtimeCompatibilityVersion = llvm::VersionTuple(5, 5);
18381840
} else {
18391841
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,
18401842
versionArg->getAsString(Args), version);
@@ -1857,6 +1859,12 @@ static bool ParseIRGenArgs(IRGenOptions &Opts, ArgList &Args,
18571859
getRuntimeCompatVersion();
18581860
}
18591861

1862+
if (!Args.hasArg(
1863+
options::OPT_disable_autolinking_runtime_compatibility_concurrency)) {
1864+
Opts.AutolinkRuntimeCompatibilityConcurrencyLibraryVersion =
1865+
getRuntimeCompatVersion();
1866+
}
1867+
18601868
if (const Arg *A = Args.getLastArg(OPT_num_threads)) {
18611869
if (StringRef(A->getValue()).getAsInteger(10, Opts.NumThreads)) {
18621870
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,

lib/IRGen/GenDecl.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,9 @@ void IRGenModule::emitSourceFile(SourceFile &SF) {
485485
if (libraryName == "swiftCompatibilityDynamicReplacements") {
486486
compatibilityVersion = IRGen.Opts.
487487
AutolinkRuntimeCompatibilityDynamicReplacementLibraryVersion;
488+
} else if (libraryName == "swiftCompatibilityConcurrency") {
489+
compatibilityVersion =
490+
IRGen.Opts.AutolinkRuntimeCompatibilityConcurrencyLibraryVersion;
488491
} else {
489492
compatibilityVersion = IRGen.Opts.
490493
AutolinkRuntimeCompatibilityLibraryVersion;

stdlib/cmake/modules/SwiftSource.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,7 @@ function(_compile_swift_files
459459
if (SWIFTFILE_IS_STDLIB OR SWIFTFILE_IS_SDK_OVERLAY)
460460
list(APPEND swift_flags "-runtime-compatibility-version" "none")
461461
list(APPEND swift_flags "-disable-autolinking-runtime-compatibility-dynamic-replacements")
462+
list(APPEND swift_flags "-Xfrontend" "-disable-autolinking-runtime-compatibility-concurrency")
462463
endif()
463464

464465
if (SWIFTFILE_IS_STDLIB_CORE OR SWIFTFILE_IS_SDK_OVERLAY)

stdlib/toolchain/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,4 @@ add_subdirectory(legacy_layouts)
5454
add_subdirectory(Compatibility50)
5555
add_subdirectory(Compatibility51)
5656
add_subdirectory(CompatibilityDynamicReplacements)
57+
add_subdirectory(CompatibilityConcurrency)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
set(library_name "swiftCompatibilityConcurrency")
2+
3+
add_swift_target_library("${library_name}" STATIC
4+
CompatibilityConcurrency.cpp
5+
6+
TARGET_SDKS ${SWIFT_APPLE_PLATFORMS}
7+
8+
C_COMPILE_FLAGS ${CXX_COMPILE_FLAGS}
9+
LINK_FLAGS ${CXX_LINK_FLAGS}
10+
SWIFT_COMPILE_FLAGS ${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS}
11+
DEPLOYMENT_VERSION_OSX ${COMPATIBILITY_MINIMUM_DEPLOYMENT_VERSION_OSX}
12+
DEPLOYMENT_VERSION_IOS ${COMPATIBILITY_MINIMUM_DEPLOYMENT_VERSION_IOS}
13+
DEPLOYMENT_VERSION_TVOS ${COMPATIBILITY_MINIMUM_DEPLOYMENT_VERSION_TVOS}
14+
DEPLOYMENT_VERSION_WATCHOS ${COMPATIBILITY_MINIMUM_DEPLOYMENT_VERSION_WATCHOS}
15+
16+
INSTALL_IN_COMPONENT compiler
17+
INSTALL_WITH_SHARED)
18+
19+
# FIXME: We need a more flexible mechanism to add lipo targets generated by
20+
# add_swift_target_library to the ALL target. Until then this hack is necessary
21+
# to ensure these libraries build.
22+
foreach(sdk ${SWIFT_SDKS})
23+
set(target_name "${library_name}-${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
24+
if(NOT TARGET "${target_name}")
25+
continue()
26+
endif()
27+
28+
set_target_properties("${target_name}"
29+
PROPERTIES
30+
EXCLUDE_FROM_ALL FALSE)
31+
endforeach()

0 commit comments

Comments
 (0)