Skip to content

Commit 1ac0007

Browse files
committed
Runtimes: introduce swift_Concurrency
This adds the `swift_Concurrency` module to the new runtimes build. This is sufficient to build the code but will require further fine tuning to ensure that all the flags entirely identical and that the ABI surface is also fully replicated.
1 parent 6dc18c0 commit 1ac0007

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 NO)
4344
set(SwiftCore_THREADING_PACKAGE "DARWIN")
4445
set(SwiftCore_ENABLE_PRESPECIALIZATION_default ON)
46+
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR "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 NO)
51+
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR "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 NO)
62+
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR "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 YES)
69+
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR "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
@@ -2120,6 +2120,8 @@ function Build-ExperimentalRuntime {
21202120
-UseGNUDriver `
21212121
-Defines @{
21222122
BUILD_SHARED_LIBS = if ($Static) { "NO" } else { "YES" };
2123+
CMAKE_FIND_PACKAGE_PREFER_CONFIG = "YES";
2124+
dispatch_DIR = "$(Get-TargetProjectBinaryCache $Arch Dispatch)\cmake\modules";
21232125
}
21242126
}
21252127
}

0 commit comments

Comments
 (0)