From 1969a41ba9dc990e08fd14b36bc1d671a9f82755 Mon Sep 17 00:00:00 2001 From: justiceadams Date: Thu, 10 Jul 2025 15:35:06 -0700 Subject: [PATCH 1/4] [cmake] remove Darwin module from CFExecutor --- Runtimes/Core/Concurrency/CMakeLists.txt | 1 + stdlib/public/Concurrency/CFExecutor.cpp | 28 ++++++++++++++++++++++ stdlib/public/Concurrency/CFExecutor.swift | 8 +++++-- stdlib/public/Concurrency/CMakeLists.txt | 1 + 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 stdlib/public/Concurrency/CFExecutor.cpp diff --git a/Runtimes/Core/Concurrency/CMakeLists.txt b/Runtimes/Core/Concurrency/CMakeLists.txt index a0ab4203e4534..7e98bca7097d4 100644 --- a/Runtimes/Core/Concurrency/CMakeLists.txt +++ b/Runtimes/Core/Concurrency/CMakeLists.txt @@ -8,6 +8,7 @@ add_library(swift_Concurrency Actor.cpp AsyncLet.cpp AsyncStream.cpp + CFExecutor.cpp Clock.cpp ConcurrencyHooks.cpp EmbeddedSupport.cpp diff --git a/stdlib/public/Concurrency/CFExecutor.cpp b/stdlib/public/Concurrency/CFExecutor.cpp new file mode 100644 index 0000000000000..ce473b11dacd5 --- /dev/null +++ b/stdlib/public/Concurrency/CFExecutor.cpp @@ -0,0 +1,28 @@ +//===--- CFExecutor.cpp ----------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2025 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// +#include "swift/Runtime/Concurrency.h" + +#if !defined(_WIN32) && !defined(__wasi__) && __has_include() +#include +#endif + +using namespace swift; + +SWIFT_CC(swift) +extern "C" void * swift_concurrency_dlopen_noload(const char * __path) { + return dlopen( __path, RTLD_NOLOAD); +} + +SWIFT_CC(swift) +extern "C" void * swift_concurrency_dlsym(void * __handle, const char * __symbol) { + return dlsym(__handle, __symbol); +} diff --git a/stdlib/public/Concurrency/CFExecutor.swift b/stdlib/public/Concurrency/CFExecutor.swift index 7a6a08918e3b5..849871dbde90d 100644 --- a/stdlib/public/Concurrency/CFExecutor.swift +++ b/stdlib/public/Concurrency/CFExecutor.swift @@ -14,7 +14,11 @@ import Swift -internal import Darwin +@_silgen_name("swift_concurrency_dlopen_noload") +private func dlopen(_ path: String) -> OpaquePointer? + +@_silgen_name("swift_concurrency_dlsym") +private func dlsym(_ handle: OpaquePointer?, _ symbol: String) -> OpaquePointer? // .. Dynamic binding .......................................................... @@ -22,7 +26,7 @@ enum CoreFoundation { static let path = "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation" - static let handle = unsafe dlopen(path, RTLD_NOLOAD) + static let handle = unsafe dlopen(path) static var isPresent: Bool { return unsafe handle != nil } diff --git a/stdlib/public/Concurrency/CMakeLists.txt b/stdlib/public/Concurrency/CMakeLists.txt index aaffe57efe2e1..9ff176349dcab 100644 --- a/stdlib/public/Concurrency/CMakeLists.txt +++ b/stdlib/public/Concurrency/CMakeLists.txt @@ -77,6 +77,7 @@ set(SWIFT_RUNTIME_CONCURRENCY_C_SOURCES ../CompatibilityOverride/CompatibilityOverride.cpp Actor.cpp AsyncLet.cpp + CFExecutor.cpp Clock.cpp GlobalExecutor.cpp ConcurrencyHooks.cpp From b3fd1fdaae92bac9a622eb5a47a5b100c1533937 Mon Sep 17 00:00:00 2001 From: justiceadams Date: Thu, 10 Jul 2025 15:35:50 -0700 Subject: [PATCH 2/4] [cmake] remove Darwin module from AsyncStreamBuffer --- stdlib/public/Concurrency/AsyncStreamBuffer.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/stdlib/public/Concurrency/AsyncStreamBuffer.swift b/stdlib/public/Concurrency/AsyncStreamBuffer.swift index bc73a4d7ad078..70c8b182e6ddc 100644 --- a/stdlib/public/Concurrency/AsyncStreamBuffer.swift +++ b/stdlib/public/Concurrency/AsyncStreamBuffer.swift @@ -15,7 +15,6 @@ import Swift #if !SWIFT_STDLIB_TASK_TO_THREAD_MODEL_CONCURRENCY #if ASYNC_STREAM_STANDALONE @_exported import _Concurrency -import Darwin func _lockWordCount() -> Int { let sz = From d2dc4b84d521ca9f4acb77206b3dedf60d261c12 Mon Sep 17 00:00:00 2001 From: justiceadams Date: Fri, 11 Jul 2025 11:23:27 -0700 Subject: [PATCH 3/4] [cmake] cleanup changes from PR --- Runtimes/Core/Concurrency/CMakeLists.txt | 7 ++++++- stdlib/public/Concurrency/AsyncStreamBuffer.swift | 1 + stdlib/public/Concurrency/CFExecutor.swift | 6 +++--- stdlib/public/Concurrency/CMakeLists.txt | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Runtimes/Core/Concurrency/CMakeLists.txt b/Runtimes/Core/Concurrency/CMakeLists.txt index 7e98bca7097d4..9cd8b761783e4 100644 --- a/Runtimes/Core/Concurrency/CMakeLists.txt +++ b/Runtimes/Core/Concurrency/CMakeLists.txt @@ -8,7 +8,6 @@ add_library(swift_Concurrency Actor.cpp AsyncLet.cpp AsyncStream.cpp - CFExecutor.cpp Clock.cpp ConcurrencyHooks.cpp EmbeddedSupport.cpp @@ -101,6 +100,12 @@ add_library(swift_Concurrency "${CMAKE_CURRENT_BINARY_DIR}/TaskGroup+addTask.swift" "${CMAKE_CURRENT_BINARY_DIR}/Task+immediate.swift") +if(APPLE) + target_sources(swift_Concurrency PRIVATE + CFExecutor.swift + CFExecutor.cpp) +endif() + include(${SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR}.cmake) target_compile_definitions(swift_Concurrency PRIVATE $<$:-DSWIFT_RUNTIME> diff --git a/stdlib/public/Concurrency/AsyncStreamBuffer.swift b/stdlib/public/Concurrency/AsyncStreamBuffer.swift index 70c8b182e6ddc..bc73a4d7ad078 100644 --- a/stdlib/public/Concurrency/AsyncStreamBuffer.swift +++ b/stdlib/public/Concurrency/AsyncStreamBuffer.swift @@ -15,6 +15,7 @@ import Swift #if !SWIFT_STDLIB_TASK_TO_THREAD_MODEL_CONCURRENCY #if ASYNC_STREAM_STANDALONE @_exported import _Concurrency +import Darwin func _lockWordCount() -> Int { let sz = diff --git a/stdlib/public/Concurrency/CFExecutor.swift b/stdlib/public/Concurrency/CFExecutor.swift index 849871dbde90d..40d6b13161ed0 100644 --- a/stdlib/public/Concurrency/CFExecutor.swift +++ b/stdlib/public/Concurrency/CFExecutor.swift @@ -15,10 +15,10 @@ import Swift @_silgen_name("swift_concurrency_dlopen_noload") -private func dlopen(_ path: String) -> OpaquePointer? +private func dlopen_noload(_ path: UnsafePointer?) -> OpaquePointer? @_silgen_name("swift_concurrency_dlsym") -private func dlsym(_ handle: OpaquePointer?, _ symbol: String) -> OpaquePointer? +private func dlsym(_ handle: OpaquePointer?, _ symbol: UnsafePointer?) -> OpaquePointer? // .. Dynamic binding .......................................................... @@ -26,7 +26,7 @@ enum CoreFoundation { static let path = "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation" - static let handle = unsafe dlopen(path) + static let handle = unsafe dlopen_noload(path) static var isPresent: Bool { return unsafe handle != nil } diff --git a/stdlib/public/Concurrency/CMakeLists.txt b/stdlib/public/Concurrency/CMakeLists.txt index 9ff176349dcab..c7f30d34d112e 100644 --- a/stdlib/public/Concurrency/CMakeLists.txt +++ b/stdlib/public/Concurrency/CMakeLists.txt @@ -77,7 +77,6 @@ set(SWIFT_RUNTIME_CONCURRENCY_C_SOURCES ../CompatibilityOverride/CompatibilityOverride.cpp Actor.cpp AsyncLet.cpp - CFExecutor.cpp Clock.cpp GlobalExecutor.cpp ConcurrencyHooks.cpp @@ -172,6 +171,7 @@ set(SWIFT_RUNTIME_CONCURRENCY_SWIFT_SOURCES set(SWIFT_RUNTIME_CONCURRENCY_NONEMBEDDED_C_SOURCES ExecutorImpl.cpp + CFExecutor.cpp ) set(SWIFT_RUNTIME_CONCURRENCY_EXECUTOR_SOURCES) From 972e6aeef5eeca109192ed4642ba3b70469bf548 Mon Sep 17 00:00:00 2001 From: justiceadams Date: Mon, 14 Jul 2025 13:30:34 -0700 Subject: [PATCH 4/4] [cmake] fix CFExecutor source addition --- stdlib/public/Concurrency/CFExecutor.cpp | 3 --- stdlib/public/Concurrency/CMakeLists.txt | 8 +++++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/stdlib/public/Concurrency/CFExecutor.cpp b/stdlib/public/Concurrency/CFExecutor.cpp index ce473b11dacd5..5474919504bbd 100644 --- a/stdlib/public/Concurrency/CFExecutor.cpp +++ b/stdlib/public/Concurrency/CFExecutor.cpp @@ -10,10 +10,7 @@ // //===----------------------------------------------------------------------===// #include "swift/Runtime/Concurrency.h" - -#if !defined(_WIN32) && !defined(__wasi__) && __has_include() #include -#endif using namespace swift; diff --git a/stdlib/public/Concurrency/CMakeLists.txt b/stdlib/public/Concurrency/CMakeLists.txt index c7f30d34d112e..0baf51c5b637d 100644 --- a/stdlib/public/Concurrency/CMakeLists.txt +++ b/stdlib/public/Concurrency/CMakeLists.txt @@ -171,7 +171,6 @@ set(SWIFT_RUNTIME_CONCURRENCY_SWIFT_SOURCES set(SWIFT_RUNTIME_CONCURRENCY_NONEMBEDDED_C_SOURCES ExecutorImpl.cpp - CFExecutor.cpp ) set(SWIFT_RUNTIME_CONCURRENCY_EXECUTOR_SOURCES) @@ -186,6 +185,12 @@ if("${SWIFT_CONCURRENCY_GLOBAL_EXECUTOR}" STREQUAL "dispatch") CFExecutor.swift ExecutorImpl.swift ) + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(SWIFT_RUNTIME_CONCURRENCY_NONEMBEDDED_C_SOURCES + ExecutorImpl.cpp + CFExecutor.cpp + ) + endif() elseif("${SWIFT_CONCURRENCY_GLOBAL_EXECUTOR}" STREQUAL "singlethreaded") set(SWIFT_RUNTIME_CONCURRENCY_NONEMBEDDED_SWIFT_SOURCES ExecutorImpl.swift @@ -206,6 +211,7 @@ set(LLVM_OPTIONAL_SOURCES DispatchGlobalExecutor.cpp CooperativeGlobalExecutor.cpp DispatchGlobalExecutor.cpp + CFExecutor.cpp ) set(SWIFT_CONCURRENCY_DEPENDENCIES)