Skip to content

Commit 1458acb

Browse files
authored
Merge pull request swiftlang#78505 from compnerd/concurrent
Runtimes: introduce `swift_Concurrency`
2 parents c42fcc5 + 69a3cd8 commit 1458acb

File tree

10 files changed

+166
-1
lines changed

10 files changed

+166
-1
lines changed

Runtimes/Core/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ defaulted_option(SwiftCore_ENABLE_STATIC_PRINT "Disable full print")
110110
defaulted_option(SwiftCore_ENABLE_COMPACT_ABSOLUTE_FUNCTION_POINTERS "Resolve absolute function pointer as identity")
111111
defaulted_option(SwiftCore_ENABLE_BACKDEPLOYMENT_SUPPORT "Add symbols for runtime backdeployment")
112112
defaulted_option(SwiftCore_ENABLE_STDLIB_TRACING "Enable tracing in the runtime. Assumes the presence of os_log(3) and the os_signpost(3) API.")
113+
defaulted_option(SwiftCore_ENABLE_CONCURRENCY "Enable Concurrency runtime support")
113114
option(SwiftCore_ENABLE_UNICODE_DATA "Include unicode data in Swift runtimes" ON)
114115
option(SwiftCore_ENABLE_SHORT_MANGLING_LOOKUPS "Build with fast-path context descriptor lookups based on well-known short manglings." ON)
115116
option(SwiftCore_ENABLE_FILESYSTEM_SUPPORT "Build for systems that have a filesystem" ON)
@@ -219,3 +220,6 @@ add_subdirectory(core)
219220
if(SwiftCore_ENABLE_ONONESUPPORT)
220221
add_subdirectory(SwiftOnoneSupport)
221222
endif()
223+
if(SwiftCore_ENABLE_CONCURRENCY)
224+
add_subdirectory(Concurrency)
225+
endif()
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
add_subdirectory(InternalShims)
2+
3+
add_library(swift_Concurrency
4+
Actor.cpp
5+
AsyncLet.cpp
6+
AsyncStream.cpp
7+
Clock.cpp
8+
ConcurrencyHooks.cpp
9+
EmbeddedSupport.cpp
10+
Error.cpp
11+
ExecutorChecks.cpp
12+
GlobalExecutor.cpp
13+
Setup.cpp
14+
Task.cpp
15+
TaskAlloc.cpp
16+
TaskGroup.cpp
17+
TaskLocal.cpp
18+
TaskStatus.cpp
19+
ThreadingError.cpp
20+
TracingSignpost.cpp
21+
"${PROJECT_SOURCE_DIR}/CompatibilityOverride/CompatibilityOverride.cpp"
22+
"${PROJECT_SOURCE_DIR}/linker-support/magic-symbols-for-install-name.c"
23+
Actor.swift
24+
AsyncCompactMapSequence.swift
25+
AsyncDropFirstSequence.swift
26+
AsyncDropWhileSequence.swift
27+
AsyncFilterSequence.swift
28+
AsyncFlatMapSequence.swift
29+
AsyncIteratorProtocol.swift
30+
AsyncLet.swift
31+
AsyncMapSequence.swift
32+
AsyncPrefixSequence.swift
33+
AsyncPrefixWhileSequence.swift
34+
AsyncSequence.swift
35+
AsyncStream.swift
36+
AsyncStreamBuffer.swift
37+
AsyncThrowingCompactMapSequence.swift
38+
AsyncThrowingDropWhileSequence.swift
39+
AsyncThrowingFilterSequence.swift
40+
AsyncThrowingFlatMapSequence.swift
41+
AsyncThrowingMapSequence.swift
42+
AsyncThrowingPrefixWhileSequence.swift
43+
AsyncThrowingStream.swift
44+
CheckedContinuation.swift
45+
Clock.swift
46+
ContinuousClock.swift
47+
Deque/_DequeBuffer.swift
48+
Deque/_DequeBufferHeader.swift
49+
Deque/_DequeSlot.swift
50+
Deque/_UnsafeWrappedBuffer.swift
51+
Deque/Compatibility.swift
52+
Deque/Deque.swift
53+
Deque/Deque+Codable.swift
54+
Deque/Deque+Collection.swift
55+
Deque/Deque+CustomDebugStringConvertible.swift
56+
Deque/Deque+CustomReflectable.swift
57+
Deque/Deque+CustomStringConvertible.swift
58+
Deque/Deque+Equatable.swift
59+
Deque/Deque+ExpressibleByArrayLiteral.swift
60+
Deque/Deque+Extras.swift
61+
Deque/Deque+Hashable.swift
62+
Deque/Deque+Storage.swift
63+
Deque/Deque+Testing.swift
64+
Deque/Deque+UnsafeHandle.swift
65+
Deque/UnsafeMutableBufferPointer+Utilities.swift
66+
DiscardingTaskGroup.swift
67+
Errors.swift
68+
Executor.swift
69+
ExecutorAssertions.swift
70+
GlobalActor.swift
71+
GlobalConcurrentExecutor.swift
72+
MainActor.swift
73+
PartialAsyncTask.swift
74+
SourceCompatibilityShims.swift
75+
SuspendingClock.swift
76+
Task.swift
77+
Task+TaskExecutor.swift
78+
TaskCancellation.swift
79+
TaskGroup.swift
80+
TaskGroup+TaskExecutor.swift
81+
TaskLocal.swift
82+
TaskSleep.swift
83+
TaskSleepDuration.swift)
84+
include(${SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR}.cmake)
85+
target_compile_definitions(swift_Concurrency PRIVATE
86+
$<$<COMPILE_LANGUAGE:C,CXX>:-DSWIFT_TARGET_LIBRARY_NAME=swift_Concurrency>
87+
# NOTE: VS2017 <15.8 would round clamp alignment to alignof(max_align_t) which
88+
# was non-conformant. Indicate that we wish to use extended alignment.
89+
$<$<AND:$<PLATFORM_ID:Windows>,$<COMPILE_LANGUAGE:C,CXX>>:-D_ENABLE_EXTENDED_ALIGNED_STORAGE=1>
90+
$<$<COMPILE_LANGUAGE:C,CXX>:-D__STDC_WANT_LIB_EXT1__=1>)
91+
target_compile_options(swift_Concurrency PRIVATE
92+
$<$<COMPILE_LANGUAGE:Swift>:-parse-stdlib>
93+
# NOTE: do not remove until `IsolatedAny` is on by default in all supported
94+
# compilers.
95+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-experimental-feature IsolatedAny>"
96+
# NOTE: enable the async frame pointer on Darwin to faciliate debugging.
97+
$<$<AND:$<PLATFORM_ID:Darwin>,$<COMPILE_LANGUAGE:C,CXX>>:-fswift-async-fp=always>
98+
"$<$<AND:$<PLATFORM_ID:Darwin>,$<COMPILE_LANGUAGE:Swift>>:SHELL:-Xfrontend -swift-async-frame-pointer=always>"
99+
"$<$<AND:$<BOOL:${BUILD_SHARED_LIBS}>,$<COMPILE_LANGUAGE:Swift>>:SHELL:-Xcc -Dswift_Concurrency_EXPORTS>")
100+
target_include_directories(swift_Concurrency PRIVATE
101+
# FIXME: Use of `swift/Runtime/...`, `swift/ABI/...`, and `swift/Demangling/...`
102+
"${SwiftCore_SWIFTC_SOURCE_DIR}/include"
103+
# FIXME: grant access to `runtime/CMakeConfig.h` which should be available
104+
# through the swiftRuntime target.
105+
"${PROJECT_BINARY_DIR}/include")
106+
target_link_libraries(swift_Concurrency PRIVATE
107+
swiftShims
108+
swiftConcurrencyInternalShims
109+
$<$<BOOL:${BUILD_SHARED_LIBS}>:swiftThreading>
110+
$<$<PLATFORM_ID:Windows>:Synchronization>
111+
$<$<PLATFORM_ID:Windows>:mincore>
112+
# Link to the runtime that we are just building.
113+
swiftCore
114+
$<$<NOT:$<PLATFORM_ID:Darwin>>:swiftrt>)
115+
target_link_options(swift_Concurrency PRIVATE
116+
-nostartfiles)
117+
set_target_properties(swift_Concurrency PROPERTIES
118+
Swift_MODULE_NAME _Concurrency)
119+
120+
install(TARGETS swift_Concurrency
121+
ARCHIVE DESTINATION "${SwiftCore_INSTALL_LIBDIR}"
122+
LIBRARY DESTINATION "${SwiftCore_INSTALL_LIBDIR}"
123+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
124+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/_Concurrency.swiftmodule"
125+
DESTINATION "${SwiftCore_INSTALL_SWIFTMODULEDIR}/_Concurrency.swiftmodule"
126+
RENAME "${SwiftCore_MODULE_TRIPLE}.swiftmodule")
127+
emit_swift_interface(swift_Concurrency)
128+
install_swift_interface(swift_Concurrency)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
add_library(swiftConcurrencyInternalShims INTERFACE)
2+
target_include_directories(swiftConcurrencyInternalShims INTERFACE
3+
${CMAKE_CURRENT_SOURCE_DIR})
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
find_package(dispatch QUIET)
3+
4+
target_sources(swift_Concurrency PRIVATE
5+
DispatchGlobalExecutor.cpp)
6+
target_compile_definitions(swift_Concurrency PRIVATE
7+
$<$<COMPILE_LANGUAGE:C,CXX>:-DSWIFT_CONCURRENCY_USES_DISPATCH=1>)
8+
target_compile_options(swift_Concurrency PRIVATE
9+
$<$<COMPILE_LANGUAGE:Swift>:-DSWIFT_CONCURRENCY_USES_DISPATCH>
10+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -DSWIFT_CONCURRENCY_USES_DISPATCH>")
11+
target_link_libraries(swift_Concurrency PRIVATE
12+
dispatch)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
target_sources(swift_Concurrency PRIVATE
2+
NonDispatchGlobalExecutor.cpp)

Runtimes/Core/Concurrency/none.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
target_sources(swift_Concurrency PRIVATE
2+
NonDispatchGlobalExecutor.cpp)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
target_sources(swift_Concurrency PRIVATE
2+
CooperativeGlobalExecutor.cpp)

Runtimes/Core/cmake/modules/DefaultSettings.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,15 @@ if(APPLE)
4040
set(SwiftCore_ENABLE_FATALERROR_BACKTRACE_default ON)
4141
set(SwiftCore_ENABLE_RUNTIME_OS_VERSIONING ON)
4242
set(SwiftCore_ENABLE_OVERRIDABLE_RETAIN_RELEASE ON)
43+
set(SwiftCore_ENABLE_CONCURRENCY_default NO)
4344
set(SwiftCore_THREADING_PACKAGE "DARWIN")
4445
set(SwiftCore_ENABLE_PRESPECIALIZATION_default ON)
46+
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR_default "dispatch")
4547
elseif(CMAKE_SYSTEM_NAME STREQUAL "WASM")
4648
set(SwiftCore_OBJECT_FORMAT_default "elf")
4749
set(SwiftCore_THREADING_PACKAGE "NONE")
50+
set(SwiftCore_ENABLE_CONCURRENCY_default NO)
51+
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR_default "none")
4852
elseif(LINUX OR ANDROID OR BSD)
4953
set(SwiftCore_OBJECT_FORMAT_default "elf")
5054
set(SwiftCore_ENABLE_FATALERROR_BACKTRACE_default ON)
@@ -54,11 +58,15 @@ elseif(LINUX OR ANDROID OR BSD)
5458
else()
5559
set(SwiftCore_THREADING_PACKAGE "PTHREADS")
5660
endif()
61+
set(SwiftCore_ENABLE_CONCURRENCY_default NO)
62+
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR_default "dispatch")
5763
elseif(WIN32)
5864
set(SwiftCore_OBJECT_FORMAT_default "coff")
5965
set(SwiftCore_THREADING_PACKAGE "WIN32")
6066
set(SwiftCore_ENABLE_FATALERROR_BACKTRACE_default ON)
6167
set(SwiftCore_ENABLE_PRESPECIALIZATION_default ON)
68+
set(SwiftCore_ENABLE_CONCURRENCY_default NO)
69+
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR_default "dispatch")
6270
endif()
6371

6472
include("${SwiftCore_VENDOR_MODULE_DIR}/DefaultSettings.cmake" OPTIONAL)

Runtimes/Resync.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ set(CoreLibs
7979
stubs
8080
CommandLineSupport
8181
core
82-
SwiftOnoneSupport)
82+
SwiftOnoneSupport
83+
Concurrency
84+
Concurrency/InternalShims)
8385

8486
# Add these as we get them building
8587
# Demangling

utils/build.ps1

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2122,6 +2122,8 @@ function Build-ExperimentalRuntime {
21222122
-UseGNUDriver `
21232123
-Defines @{
21242124
BUILD_SHARED_LIBS = if ($Static) { "NO" } else { "YES" };
2125+
CMAKE_FIND_PACKAGE_PREFER_CONFIG = "YES";
2126+
dispatch_DIR = "$(Get-TargetProjectBinaryCache $Arch Dispatch)\cmake\modules";
21252127
}
21262128
}
21272129
}

0 commit comments

Comments
 (0)