Skip to content

Commit ecad1d9

Browse files
[cmake] add SINGLE_THREADED_MODE option to Synchronization (swiftlang#81980)
Add `SwiftSynchronization_ SINGLE_THREADED_MODE` flag to use empty mutex definition for certain apple platforms. This brings Synchronization in line with the current build systems functionality We will revisit this in the future to determine if we can add a mutex definition for all Darwin platforms
1 parent 020c8fd commit ecad1d9

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

Runtimes/Supplemental/Synchronization/CMakeLists.txt

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ option(${PROJECT_NAME}_ENABLE_LIBRARY_EVOLUTION "Generate ABI resilient runtime
5858
option(${PROJECT_NAME}_ENABLE_PRESPECIALIZATION "Enable generic metadata prespecialization"
5959
${SwiftCore_ENABLE_PRESPECIALIZATION})
6060

61+
option(${PROJECT_NAME}_SINGLE_THREADED_MODE "Build Synchronization assuming it will be used in an environment with only a single thread" OFF)
62+
6163
add_compile_options(
6264
$<$<COMPILE_LANGUAGE:Swift>:-explicit-module-build>
6365
$<$<COMPILE_LANGUAGE:Swift>:-nostdlibimport>
@@ -95,12 +97,19 @@ add_library(swiftSynchronization
9597
Atomics/WordPair.swift
9698
Atomics/AtomicStorage.swift
9799
Atomics/AtomicIntegers.swift
98-
Cell.swift
99-
Mutex/Mutex.swift
100-
$<$<PLATFORM_ID:Darwin>:Mutex/DarwinImpl.swift>
101-
$<$<PLATFORM_ID:Android,Linux>:Mutex/LinuxImpl.swift>
102-
$<$<PLATFORM_ID:Android,WASI>:Mutex/SpinLoopHint.swift>
103-
$<$<PLATFORM_ID:Windows>:Mutex/WindowsImpl.swift>)
100+
Cell.swift)
101+
102+
# Determine Mutex definition
103+
if(${PROJECT_NAME}_SINGLE_THREADED_MODE)
104+
target_sources(swiftSynchronization PRIVATE Mutex/MutexUnavailable.swift)
105+
else()
106+
target_sources(swiftSynchronization PRIVATE
107+
Mutex/Mutex.swift
108+
$<$<PLATFORM_ID:Darwin>:Mutex/DarwinImpl.swift>
109+
$<$<PLATFORM_ID:Android,Linux>:Mutex/LinuxImpl.swift>
110+
$<$<PLATFORM_ID:Android,WASI>:Mutex/SpinLoopHint.swift>
111+
$<$<PLATFORM_ID:Windows>:Mutex/WindowsImpl.swift>)
112+
endif()
104113

105114
set_target_properties(swiftSynchronization PROPERTIES
106115
Swift_MODULE_NAME Synchronization)

Runtimes/Supplemental/Synchronization/cmake/caches/Vendors/Apple/arm64-BridgeOS.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ set(CMAKE_Swift_COMPILER_TARGET "arm64-apple-bridgeos${CMAKE_OSX_DEPLOYMENT_TARG
99
set(SwiftSynchronization_ARCH_SUBDIR arm64 CACHE STRING "")
1010
set(SwiftSynchronization_PLATFORM_SUBDIR freestanding CACHE STRING "")
1111
set(CMAKE_BUILD_TYPE MinSizeRel CACHE STRING "")
12+
set(SwiftSynchronization_SINGLE_THREADED_MODE YES CACHE BOOL "")
1213

1314
include("${CMAKE_CURRENT_LIST_DIR}/apple-common.cmake")

0 commit comments

Comments
 (0)