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.
This commit is contained in:
Saleem Abdulrasool
2025-01-08 15:55:22 -08:00
committed by Saleem Abdulrasool
parent 6dc18c0854
commit 1ac0007883
10 changed files with 166 additions and 1 deletions

View File

@@ -110,6 +110,7 @@ defaulted_option(SwiftCore_ENABLE_STATIC_PRINT "Disable full print")
defaulted_option(SwiftCore_ENABLE_COMPACT_ABSOLUTE_FUNCTION_POINTERS "Resolve absolute function pointer as identity")
defaulted_option(SwiftCore_ENABLE_BACKDEPLOYMENT_SUPPORT "Add symbols for runtime backdeployment")
defaulted_option(SwiftCore_ENABLE_STDLIB_TRACING "Enable tracing in the runtime. Assumes the presence of os_log(3) and the os_signpost(3) API.")
defaulted_option(SwiftCore_ENABLE_CONCURRENCY "Enable Concurrency runtime support")
option(SwiftCore_ENABLE_UNICODE_DATA "Include unicode data in Swift runtimes" ON)
option(SwiftCore_ENABLE_SHORT_MANGLING_LOOKUPS "Build with fast-path context descriptor lookups based on well-known short manglings." ON)
option(SwiftCore_ENABLE_FILESYSTEM_SUPPORT "Build for systems that have a filesystem" ON)
@@ -219,3 +220,6 @@ add_subdirectory(core)
if(SwiftCore_ENABLE_ONONESUPPORT)
add_subdirectory(SwiftOnoneSupport)
endif()
if(SwiftCore_ENABLE_CONCURRENCY)
add_subdirectory(Concurrency)
endif()

View File

@@ -0,0 +1,128 @@
add_subdirectory(InternalShims)
add_library(swift_Concurrency
Actor.cpp
AsyncLet.cpp
AsyncStream.cpp
Clock.cpp
ConcurrencyHooks.cpp
EmbeddedSupport.cpp
Error.cpp
ExecutorChecks.cpp
GlobalExecutor.cpp
Setup.cpp
Task.cpp
TaskAlloc.cpp
TaskGroup.cpp
TaskLocal.cpp
TaskStatus.cpp
ThreadingError.cpp
TracingSignpost.cpp
"${PROJECT_SOURCE_DIR}/CompatibilityOverride/CompatibilityOverride.cpp"
"${PROJECT_SOURCE_DIR}/linker-support/magic-symbols-for-install-name.c"
Actor.swift
AsyncCompactMapSequence.swift
AsyncDropFirstSequence.swift
AsyncDropWhileSequence.swift
AsyncFilterSequence.swift
AsyncFlatMapSequence.swift
AsyncIteratorProtocol.swift
AsyncLet.swift
AsyncMapSequence.swift
AsyncPrefixSequence.swift
AsyncPrefixWhileSequence.swift
AsyncSequence.swift
AsyncStream.swift
AsyncStreamBuffer.swift
AsyncThrowingCompactMapSequence.swift
AsyncThrowingDropWhileSequence.swift
AsyncThrowingFilterSequence.swift
AsyncThrowingFlatMapSequence.swift
AsyncThrowingMapSequence.swift
AsyncThrowingPrefixWhileSequence.swift
AsyncThrowingStream.swift
CheckedContinuation.swift
Clock.swift
ContinuousClock.swift
Deque/_DequeBuffer.swift
Deque/_DequeBufferHeader.swift
Deque/_DequeSlot.swift
Deque/_UnsafeWrappedBuffer.swift
Deque/Compatibility.swift
Deque/Deque.swift
Deque/Deque+Codable.swift
Deque/Deque+Collection.swift
Deque/Deque+CustomDebugStringConvertible.swift
Deque/Deque+CustomReflectable.swift
Deque/Deque+CustomStringConvertible.swift
Deque/Deque+Equatable.swift
Deque/Deque+ExpressibleByArrayLiteral.swift
Deque/Deque+Extras.swift
Deque/Deque+Hashable.swift
Deque/Deque+Storage.swift
Deque/Deque+Testing.swift
Deque/Deque+UnsafeHandle.swift
Deque/UnsafeMutableBufferPointer+Utilities.swift
DiscardingTaskGroup.swift
Errors.swift
Executor.swift
ExecutorAssertions.swift
GlobalActor.swift
GlobalConcurrentExecutor.swift
MainActor.swift
PartialAsyncTask.swift
SourceCompatibilityShims.swift
SuspendingClock.swift
Task.swift
Task+TaskExecutor.swift
TaskCancellation.swift
TaskGroup.swift
TaskGroup+TaskExecutor.swift
TaskLocal.swift
TaskSleep.swift
TaskSleepDuration.swift)
include(${SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR}.cmake)
target_compile_definitions(swift_Concurrency PRIVATE
$<$<COMPILE_LANGUAGE:C,CXX>:-DSWIFT_TARGET_LIBRARY_NAME=swift_Concurrency>
# NOTE: VS2017 <15.8 would round clamp alignment to alignof(max_align_t) which
# was non-conformant. Indicate that we wish to use extended alignment.
$<$<AND:$<PLATFORM_ID:Windows>,$<COMPILE_LANGUAGE:C,CXX>>:-D_ENABLE_EXTENDED_ALIGNED_STORAGE=1>
$<$<COMPILE_LANGUAGE:C,CXX>:-D__STDC_WANT_LIB_EXT1__=1>)
target_compile_options(swift_Concurrency PRIVATE
$<$<COMPILE_LANGUAGE:Swift>:-parse-stdlib>
# NOTE: do not remove until `IsolatedAny` is on by default in all supported
# compilers.
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-experimental-feature IsolatedAny>"
# NOTE: enable the async frame pointer on Darwin to faciliate debugging.
$<$<AND:$<PLATFORM_ID:Darwin>,$<COMPILE_LANGUAGE:C,CXX>>:-fswift-async-fp=always>
"$<$<AND:$<PLATFORM_ID:Darwin>,$<COMPILE_LANGUAGE:Swift>>:SHELL:-Xfrontend -swift-async-frame-pointer=always>"
"$<$<AND:$<BOOL:${BUILD_SHARED_LIBS}>,$<COMPILE_LANGUAGE:Swift>>:SHELL:-Xcc -Dswift_Concurrency_EXPORTS>")
target_include_directories(swift_Concurrency PRIVATE
# FIXME: Use of `swift/Runtime/...`, `swift/ABI/...`, and `swift/Demangling/...`
"${SwiftCore_SWIFTC_SOURCE_DIR}/include"
# FIXME: grant access to `runtime/CMakeConfig.h` which should be available
# through the swiftRuntime target.
"${PROJECT_BINARY_DIR}/include")
target_link_libraries(swift_Concurrency PRIVATE
swiftShims
swiftConcurrencyInternalShims
$<$<BOOL:${BUILD_SHARED_LIBS}>:swiftThreading>
$<$<PLATFORM_ID:Windows>:Synchronization>
$<$<PLATFORM_ID:Windows>:mincore>
# Link to the runtime that we are just building.
swiftCore
$<$<NOT:$<PLATFORM_ID:Darwin>>:swiftrt>)
target_link_options(swift_Concurrency PRIVATE
-nostartfiles)
set_target_properties(swift_Concurrency PROPERTIES
Swift_MODULE_NAME _Concurrency)
install(TARGETS swift_Concurrency
ARCHIVE DESTINATION "${SwiftCore_INSTALL_LIBDIR}"
LIBRARY DESTINATION "${SwiftCore_INSTALL_LIBDIR}"
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/_Concurrency.swiftmodule"
DESTINATION "${SwiftCore_INSTALL_SWIFTMODULEDIR}/_Concurrency.swiftmodule"
RENAME "${SwiftCore_MODULE_TRIPLE}.swiftmodule")
emit_swift_interface(swift_Concurrency)
install_swift_interface(swift_Concurrency)

View File

@@ -0,0 +1,3 @@
add_library(swiftConcurrencyInternalShims INTERFACE)
target_include_directories(swiftConcurrencyInternalShims INTERFACE
${CMAKE_CURRENT_SOURCE_DIR})

View File

@@ -0,0 +1,12 @@
find_package(dispatch QUIET)
target_sources(swift_Concurrency PRIVATE
DispatchGlobalExecutor.cpp)
target_compile_definitions(swift_Concurrency PRIVATE
$<$<COMPILE_LANGUAGE:C,CXX>:-DSWIFT_CONCURRENCY_USES_DISPATCH=1>)
target_compile_options(swift_Concurrency PRIVATE
$<$<COMPILE_LANGUAGE:Swift>:-DSWIFT_CONCURRENCY_USES_DISPATCH>
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -DSWIFT_CONCURRENCY_USES_DISPATCH>")
target_link_libraries(swift_Concurrency PRIVATE
dispatch)

View File

@@ -0,0 +1,2 @@
target_sources(swift_Concurrency PRIVATE
NonDispatchGlobalExecutor.cpp)

View File

@@ -0,0 +1,2 @@
target_sources(swift_Concurrency PRIVATE
NonDispatchGlobalExecutor.cpp)

View File

@@ -0,0 +1,2 @@
target_sources(swift_Concurrency PRIVATE
CooperativeGlobalExecutor.cpp)

View File

@@ -40,11 +40,15 @@ if(APPLE)
set(SwiftCore_ENABLE_FATALERROR_BACKTRACE_default ON)
set(SwiftCore_ENABLE_RUNTIME_OS_VERSIONING ON)
set(SwiftCore_ENABLE_OVERRIDABLE_RETAIN_RELEASE ON)
set(SwiftCore_ENABLE_CONCURRENCY NO)
set(SwiftCore_THREADING_PACKAGE "DARWIN")
set(SwiftCore_ENABLE_PRESPECIALIZATION_default ON)
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR "dispatch")
elseif(CMAKE_SYSTEM_NAME STREQUAL "WASM")
set(SwiftCore_OBJECT_FORMAT_default "elf")
set(SwiftCore_THREADING_PACKAGE "NONE")
set(SwiftCore_ENABLE_CONCURRENCY NO)
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR "none")
elseif(LINUX OR ANDROID OR BSD)
set(SwiftCore_OBJECT_FORMAT_default "elf")
set(SwiftCore_ENABLE_FATALERROR_BACKTRACE_default ON)
@@ -54,11 +58,15 @@ elseif(LINUX OR ANDROID OR BSD)
else()
set(SwiftCore_THREADING_PACKAGE "PTHREADS")
endif()
set(SwiftCore_ENABLE_CONCURRENCY NO)
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR "dispatch")
elseif(WIN32)
set(SwiftCore_OBJECT_FORMAT_default "coff")
set(SwiftCore_THREADING_PACKAGE "WIN32")
set(SwiftCore_ENABLE_FATALERROR_BACKTRACE_default ON)
set(SwiftCore_ENABLE_PRESPECIALIZATION_default ON)
set(SwiftCore_ENABLE_CONCURRENCY YES)
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR "dispatch")
endif()
include("${SwiftCore_VENDOR_MODULE_DIR}/DefaultSettings.cmake" OPTIONAL)

View File

@@ -79,7 +79,9 @@ set(CoreLibs
stubs
CommandLineSupport
core
SwiftOnoneSupport)
SwiftOnoneSupport
Concurrency
Concurrency/InternalShims)
# Add these as we get them building
# Demangling

View File

@@ -2120,6 +2120,8 @@ function Build-ExperimentalRuntime {
-UseGNUDriver `
-Defines @{
BUILD_SHARED_LIBS = if ($Static) { "NO" } else { "YES" };
CMAKE_FIND_PACKAGE_PREFER_CONFIG = "YES";
dispatch_DIR = "$(Get-TargetProjectBinaryCache $Arch Dispatch)\cmake\modules";
}
}
}