mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
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:
committed by
Saleem Abdulrasool
parent
6dc18c0854
commit
1ac0007883
@@ -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()
|
||||
|
||||
128
Runtimes/Core/Concurrency/CMakeLists.txt
Normal file
128
Runtimes/Core/Concurrency/CMakeLists.txt
Normal 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)
|
||||
3
Runtimes/Core/Concurrency/InternalShims/CMakeLists.txt
Normal file
3
Runtimes/Core/Concurrency/InternalShims/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
add_library(swiftConcurrencyInternalShims INTERFACE)
|
||||
target_include_directories(swiftConcurrencyInternalShims INTERFACE
|
||||
${CMAKE_CURRENT_SOURCE_DIR})
|
||||
12
Runtimes/Core/Concurrency/dispatch.cmake
Normal file
12
Runtimes/Core/Concurrency/dispatch.cmake
Normal 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)
|
||||
2
Runtimes/Core/Concurrency/hooked.cmake
Normal file
2
Runtimes/Core/Concurrency/hooked.cmake
Normal file
@@ -0,0 +1,2 @@
|
||||
target_sources(swift_Concurrency PRIVATE
|
||||
NonDispatchGlobalExecutor.cpp)
|
||||
2
Runtimes/Core/Concurrency/none.cmake
Normal file
2
Runtimes/Core/Concurrency/none.cmake
Normal file
@@ -0,0 +1,2 @@
|
||||
target_sources(swift_Concurrency PRIVATE
|
||||
NonDispatchGlobalExecutor.cpp)
|
||||
2
Runtimes/Core/Concurrency/singlethreaded.cmake
Normal file
2
Runtimes/Core/Concurrency/singlethreaded.cmake
Normal file
@@ -0,0 +1,2 @@
|
||||
target_sources(swift_Concurrency PRIVATE
|
||||
CooperativeGlobalExecutor.cpp)
|
||||
@@ -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)
|
||||
|
||||
@@ -79,7 +79,9 @@ set(CoreLibs
|
||||
stubs
|
||||
CommandLineSupport
|
||||
core
|
||||
SwiftOnoneSupport)
|
||||
SwiftOnoneSupport
|
||||
Concurrency
|
||||
Concurrency/InternalShims)
|
||||
|
||||
# Add these as we get them building
|
||||
# Demangling
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user