Skip to content

Commit 8af28aa

Browse files
authored
Merge pull request #59606 from al45tair/alastair/fix-threading-package-defaults-2
[Threading] Fix threading package defaults
2 parents 36e12a8 + 1b34fa9 commit 8af28aa

File tree

11 files changed

+105
-80
lines changed

11 files changed

+105
-80
lines changed

CMakeLists.txt

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -192,16 +192,6 @@ option(SWIFT_STDLIB_ENABLE_UNICODE_DATA
192192
NOTE: Disabling this will cause many String methods to crash."
193193
TRUE)
194194

195-
include(Threading)
196-
197-
threading_package_default("${SWIFT_HOST_VARIANT_SDK}"
198-
SWIFT_THREADING_PACKAGE_default)
199-
200-
set(SWIFT_THREADING_PACKAGE "${SWIFT_THREADING_PACKAGE_default}"
201-
CACHE STRING
202-
"The threading package to use. Must be one of 'none', 'pthreads',
203-
'darwin', 'linux', 'win32', 'c11'.")
204-
205195
option(SWIFT_BUILD_DYNAMIC_SDK_OVERLAY
206196
"Build dynamic variants of the Swift SDK overlay"
207197
TRUE)
@@ -589,6 +579,12 @@ cmake_dependent_option(SWIFT_ENABLE_SOURCEKIT_TESTS
589579
"Enable running SourceKit tests" TRUE
590580
"SWIFT_BUILD_SOURCEKIT" FALSE)
591581

582+
option(SWIFT_THREADING_PACKAGE
583+
"Override the threading package used for the build. This can either be a
584+
single package name, or a semicolon separated sequence of sdk:package pairs.
585+
Valid package names are 'pthreads', 'darwin', 'linux', 'win32', 'c11', 'none'
586+
or the empty string for the SDK default.")
587+
592588
#
593589
# End of user-configurable options.
594590
#
@@ -820,6 +816,32 @@ if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQU
820816
set(SWIFT_COMPILER_IS_MSVC_LIKE TRUE)
821817
endif()
822818

819+
#
820+
# Display a message if the threading package has been overridden
821+
#
822+
823+
if(SWIFT_THREADING_PACKAGE)
824+
message(STATUS "")
825+
message(STATUS "Threading package override enabled")
826+
foreach(elt ${SWIFT_THREADING_PACKAGE})
827+
string(REPLACE ":" ";" elt_list "${elt}")
828+
list(LENGTH elt_list elt_list_len)
829+
if(elt_list_len EQUAL 1)
830+
set(elt_sdk "Global")
831+
list(GET elt_list 0 elt_package)
832+
elseif(elt_list_len EQUAL 2)
833+
list(GET elt_list 0 elt_sdk)
834+
list(GET elt_list 1 elt_package)
835+
string(TOUPPER "${elt_sdk}" elt_sdk)
836+
else()
837+
message(FATAL_ERROR "Bad threading override \"${elt}\" - SWIFT_THREADING_PACKAGE must be a semicolon separated list of package or sdk:package pairs.")
838+
endif()
839+
string(TOLOWER "${elt_package}" elt_package)
840+
message(STATUS " ${elt_sdk}: ${elt_package}")
841+
endforeach()
842+
message(STATUS "")
843+
endif()
844+
823845
#
824846
# Configure SDKs.
825847
#
@@ -1054,7 +1076,6 @@ if(SWIFT_BUILD_STDLIB OR SWIFT_BUILD_SDK_OVERLAY)
10541076
message(STATUS " Leak Detection Checker Entrypoints: ${SWIFT_RUNTIME_ENABLE_LEAK_CHECKER}")
10551077
message(STATUS "")
10561078

1057-
message(STATUS "Threading Package: ${SWIFT_THREADING_PACKAGE}")
10581079
message(STATUS "Differentiable Programming Support: ${SWIFT_ENABLE_EXPERIMENTAL_DIFFERENTIABLE_PROGRAMMING}")
10591080
message(STATUS "Concurrency Support: ${SWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY}")
10601081
message(STATUS "Distributed Support: ${SWIFT_ENABLE_EXPERIMENTAL_DISTRIBUTED}")

cmake/modules/AddSwift.cmake

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ include(SwiftXcodeSupport)
44
include(SwiftWindowsSupport)
55
include(SwiftAndroidSupport)
66
include(SwiftCXXUtils)
7-
include(Threading)
87

98
function(_swift_gyb_target_sources target scope)
109
file(GLOB GYB_UNICODE_DATA ${SWIFT_SOURCE_DIR}/utils/UnicodeData/*)
@@ -309,7 +308,7 @@ function(_add_host_variant_c_compile_flags target)
309308
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS>)
310309
endif()
311310
312-
threading_package_name("${SWIFT_HOST_VARIANT_SDK}" _threading_package)
311+
string(TOUPPER "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_THREADING_PACKAGE}" _threading_package)
313312
target_compile_definitions(${target} PRIVATE
314313
"SWIFT_THREADING_${_threading_package}")
315314

cmake/modules/AddSwiftUnittests.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11

22
include(AddSwift)
3-
include(Threading)
43

54
add_custom_target(SwiftUnitTests)
65

@@ -54,7 +53,8 @@ function(add_swift_unittest test_dirname)
5453
target_compile_definitions("${test_dirname}" PRIVATE
5554
SWIFT_STDLIB_SINGLE_THREADED_CONCURRENCY)
5655
endif()
57-
threading_package_name("${SWIFT_HOST_VARIANT_SDK}" _threading_package)
56+
57+
string(TOUPPER "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_THREADING_PACKAGE}" _threading_package)
5858
target_compile_definitions("${test_dirname}" PRIVATE
5959
"SWIFT_THREADING_${_threading_package}")
6060

cmake/modules/SwiftConfigureSDK.cmake

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ function(_report_sdk prefix)
1313
message(STATUS "${SWIFT_SDK_${prefix}_NAME} SDK:")
1414
message(STATUS " Object File Format: ${SWIFT_SDK_${prefix}_OBJECT_FORMAT}")
1515
message(STATUS " Swift Standard Library Path: ${SWIFT_SDK_${prefix}_LIB_SUBDIR}")
16+
message(STATUS " Threading Package: ${SWIFT_SDK_${prefix}_THREADING_PACKAGE}")
1617

1718
if("${prefix}" STREQUAL "WINDOWS")
1819
message(STATUS " UCRT Version: ${UCRTVersion}")
@@ -101,6 +102,34 @@ function(remove_sdk_unsupported_archs name os sdk_path architectures_var)
101102
set("${architectures_var}" ${architectures} PARENT_SCOPE)
102103
endfunction()
103104

105+
# Work out which threading package to use by consulting SWIFT_THREADING_PACKAGE
106+
function(get_threading_package sdk default package_var)
107+
set(global_override)
108+
foreach(elt ${SWIFT_THREADING_PACKAGE})
109+
string(REPLACE ":" ";" elt_list "${elt}")
110+
list(LENGTH elt_list elt_list_len)
111+
if(elt_list_len EQUAL 1)
112+
list(GET elt_list 0 global_override)
113+
string(TOLOWER "${global_override}" global_override)
114+
else()
115+
list(GET elt_list 0 elt_sdk)
116+
list(GET elt_list 1 elt_package)
117+
string(TOUPPER "${elt_sdk}" elt_sdk)
118+
string(TOLOWER "${elt_package}" elt_package)
119+
120+
if("${elt_sdk}" STREQUAL "${sdk}")
121+
set("${package_var}" "${elt_package}" PARENT_SCOPE)
122+
return()
123+
endif()
124+
endif()
125+
endforeach()
126+
if(global_override)
127+
set("${package_var}" "${global_override}" PARENT_SCOPE)
128+
else()
129+
set("${package_var}" "${default}" PARENT_SCOPE)
130+
endif()
131+
endfunction()
132+
104133
# Configure an SDK
105134
#
106135
# Usage:
@@ -179,6 +208,7 @@ macro(configure_sdk_darwin
179208
set(SWIFT_SDK_${prefix}_STATIC_LIBRARY_SUFFIX ".a")
180209
set(SWIFT_SDK_${prefix}_IMPORT_LIBRARY_PREFIX "")
181210
set(SWIFT_SDK_${prefix}_IMPORT_LIBRARY_SUFFIX "")
211+
get_threading_package(${prefix} "darwin" SWIFT_SDK_${prefix}_THREADING_PACKAGE)
182212

183213
set(SWIFT_SDK_${prefix}_ARCHITECTURES ${architectures})
184214
if(SWIFT_DARWIN_SUPPORTED_ARCHS)
@@ -297,6 +327,15 @@ macro(configure_sdk_unix name architectures)
297327
-Xcc --gcc-toolchain=/usr
298328
CACHE STRING "Extra flags for compiling the C++ overlay")
299329

330+
set(_default_threading_package "pthreads")
331+
if("${prefix}" STREQUAL "LINUX")
332+
set(_default_threading_package "linux")
333+
elseif("${prefix}" STREQUAL "WASI")
334+
set(_default_threading_package "none")
335+
endif()
336+
get_threading_package(${prefix} ${_default_threading_package}
337+
SWIFT_SDK_${prefix}_THREADING_PACKAGE)
338+
300339
foreach(arch ${architectures})
301340
if("${prefix}" STREQUAL "ANDROID")
302341
swift_android_sysroot(android_sysroot)
@@ -423,6 +462,7 @@ macro(configure_sdk_windows name environment architectures)
423462
set(SWIFT_SDK_${prefix}_STATIC_LIBRARY_SUFFIX ".lib")
424463
set(SWIFT_SDK_${prefix}_IMPORT_LIBRARY_PREFIX "")
425464
set(SWIFT_SDK_${prefix}_IMPORT_LIBRARY_SUFFIX ".lib")
465+
get_threading_package(${prefix} "win32" SWIFT_SDK_${prefix}_THREADING_PACKAGE)
426466

427467
foreach(arch ${architectures})
428468
if(arch STREQUAL armv7)
@@ -489,5 +529,6 @@ function(configure_target_variant prefix name sdk build_config lib_subdir)
489529
set(SWIFT_VARIANT_${prefix}_STATIC_LIBRARY_SUFFIX ${SWIFT_SDK_${sdk}_STATIC_LIBRARY_SUFFIX})
490530
set(SWIFT_VARIANT_${prefix}_IMPORT_LIBRARY_PREFIX ${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_PREFIX})
491531
set(SWIFT_VARIANT_${prefix}_IMPORT_LIBRARY_SUFFIX ${SWIFT_SDK_${sdk}_IMPORT_LIBRARY_SUFFIX})
532+
get_threading_package(${prefix} ${SWIFT_SDK_${sdk}_THREADING_PACKAGE} SWIFT_VARIANT_${prefix}_THREADING_PACKAGE)
492533
endfunction()
493534

cmake/modules/Threading.cmake

Lines changed: 0 additions & 29 deletions
This file was deleted.

stdlib/cmake/modules/AddSwiftStdlib.cmake

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11

22
include(AddSwift)
33
include(SwiftSource)
4-
include(Threading)
54

65
function(add_dependencies_multiple_targets)
76
cmake_parse_arguments(
@@ -355,7 +354,7 @@ function(_add_target_variant_c_compile_flags)
355354
list(APPEND result "-DSWIFT_STDLIB_SINGLE_THREADED_CONCURRENCY")
356355
endif()
357356

358-
threading_package_name("${CFLAGS_SDK}" _threading_package)
357+
string(TOUPPER "${SWIFT_SDK_${CFLAGS_SDK}_THREADING_PACKAGE}" _threading_package)
359358
list(APPEND result "-DSWIFT_THREADING_${_threading_package}")
360359

361360
if(SWIFT_STDLIB_OS_VERSIONING)

stdlib/cmake/modules/StdlibOptions.cmake

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
include_guard(GLOBAL)
22

33
include(${CMAKE_CURRENT_LIST_DIR}/../../../cmake/modules/SwiftUtils.cmake)
4-
include(${CMAKE_CURRENT_LIST_DIR}/../../../cmake/modules/Threading.cmake)
54

65
precondition(SWIFT_HOST_VARIANT_SDK)
76
precondition(SWIFT_DARWIN_PLATFORMS)
@@ -191,16 +190,6 @@ else()
191190
set(SWIFT_CONCURRENCY_GLOBAL_EXECUTOR_default "dispatch")
192191
endif()
193192

194-
include(Threading)
195-
196-
threading_package_default("${SWIFT_HOST_VARIANT_SDK}"
197-
SWIFT_THREADING_PACKAGE_default)
198-
199-
set(SWIFT_THREADING_PACKAGE "${SWIFT_THREADING_PACKAGE_default}"
200-
CACHE STRING
201-
"The threading package to use. Must be one of 'none', 'pthreads',
202-
'darwin', 'linux', 'win32', 'c11'.")
203-
204193
set(SWIFT_CONCURRENCY_GLOBAL_EXECUTOR
205194
"${SWIFT_CONCURRENCY_GLOBAL_EXECUTOR_default}" CACHE STRING
206195
"Build the concurrency library to use the given global executor (options: dispatch, singlethreaded, hooked)")

stdlib/cmake/modules/SwiftSource.cmake

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
include(macCatalystUtils)
22
include(SwiftUtils)
3-
include(Threading)
43

54
function(_compute_lto_swift_flag option out_var)
65
string(TOLOWER "${option}" lowercase_option)
@@ -327,7 +326,7 @@ function(_add_target_variant_swift_compile_flags
327326
list(APPEND result "-D" "SWIFT_STDLIB_SINGLE_THREADED_CONCURRENCY")
328327
endif()
329328

330-
threading_package_name("${sdk}" _threading_package)
329+
string(TOUPPER "${SWIFT_SDK_${sdk}_THREADING_PACKAGE}" _threading_package)
331330
list(APPEND result "-D" "SWIFT_THREADING_${_threading_package}")
332331

333332
set("${result_var_name}" "${result}" PARENT_SCOPE)
@@ -483,7 +482,7 @@ function(_compile_swift_files
483482
list(APPEND swift_flags "-Xfrontend" "-library-level" "-Xfrontend" "api")
484483
endif()
485484

486-
if(SWIFT_THREADING_PACKAGE STREQUAL "none")
485+
if("${SWIFT_SDK_${SWIFTFILE_SDK}_THREADING_PACKAGE}" STREQUAL "none")
487486
list(APPEND swift_flags "-Xfrontend" "-assume-single-threaded")
488487
endif()
489488

test/CMakeLists.txt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
22

33
include(SwiftTestUtils)
4-
include(Threading)
54

65
function(swift_configure_lit_site_cfg source_path destination_path installed_name)
76
if (CMAKE_CFG_INTDIR STREQUAL ".")
@@ -395,14 +394,7 @@ foreach(SDK ${SWIFT_SDKS})
395394
list(APPEND LIT_ARGS "--param" "string_processing")
396395
endif()
397396

398-
if("${SWIFT_SDK_${SDK}_THREADING_PACKAGE}")
399-
list(APPEND LIT_ARGS "--param" "threading=${SWIFT_SDK_${SDK}_THREADING_PACKAGE}")
400-
else()
401-
threading_package_default("${SDK}" SWIFT_THREADING_PACKAGE)
402-
list(APPEND LIT_ARGS "--param"
403-
"threading=${SWIFT_THREADING_PACKAGE}")
404-
endif()
405-
397+
list(APPEND LIT_ARGS "--param" "threading=${SWIFT_SDK_${SDK}_THREADING_PACKAGE}")
406398
foreach(test_subset ${TEST_SUBSETS})
407399
set(directories)
408400
set(dependencies ${test_dependencies})

test/lit.site.cfg.in

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,6 @@ if "@SWIFT_OPTIMIZED@" == "TRUE":
9999
if "@SWIFT_STDLIB_SINGLE_THREADED_CONCURRENCY@" == "TRUE":
100100
config.available_features.add("single_threaded_concurrency")
101101

102-
if "@SWIFT_THREADING_PACKAGE@" != "none":
103-
# This is not called "threading" because we might want that later
104-
config.available_features.add("thread_safe_runtime")
105-
config.available_features.add("threading_@SWIFT_THREADING_PACKAGE@")
106-
107102
if "@SWIFT_ENABLE_REFLECTION@" == "TRUE":
108103
config.available_features.add("reflection")
109104

0 commit comments

Comments
 (0)