Skip to content

Commit a1c8166

Browse files
[cmake] add Synchronization library to Supplemental build
Addresses rdar://150300769
1 parent a08a87b commit a1c8166

File tree

3 files changed

+139
-0
lines changed

3 files changed

+139
-0
lines changed

Runtimes/Resync.cmake

+5
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ endforeach()
9696
message(STATUS "plist[${StdlibSources}/Info.plist.in] -> Core/Info.plist.in")
9797
copy_files("" "Core" FILES "Info.plist.in")
9898

99+
message(STATUS "plist[${StdlibSources}/Info.plist.in] -> Supplemental/Synchronization/Info.plist.in")
100+
copy_files("" "Supplemental/Synchronization" FILES "Info.plist.in")
101+
99102
# Platform Overlays
100103

101104
# Copy magic linker symbols
@@ -153,6 +156,8 @@ copy_files(public/Platform Overlay/Windows/CRT
153156
# libraries, and test support libraries.
154157

155158
# Supplemental Libraries
159+
copy_library_sources("Synchronization" "public" "Supplemental")
160+
156161

157162
# Copy StringProcessing, RegexParser, RegexBuilder
158163
if(NOT DEFINED StringProcessing_ROOT_DIR)

Runtimes/Supplemental/CMakeLists.txt

+12
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ endif()
2222

2323
set(COMMON_OPTIONS
2424
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
25+
-DSDKROOT=${SDKROOT}
2526
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
2627
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
2728
-DCMAKE_INSTALL_NAME_DIR=${CMAKE_INSTALL_NAME_DIR}
@@ -47,3 +48,14 @@ if(SwiftRuntime_ENABLE_stringprocessing)
4748
CMAKE_ARGS
4849
${COMMON_OPTIONS})
4950
endif()
51+
52+
# Synchronization
53+
if(SwiftRuntime_ENABLE_synchronization)
54+
ExternalProject_Add(Synchronization
55+
PREFIX "Synchronization"
56+
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Synchronization"
57+
INSTALL_DIR "${CMAKE_INSTALL_PREFIX}"
58+
INSTALL_COMMAND ""
59+
CMAKE_ARGS
60+
${COMMON_OPTIONS})
61+
endif()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
cmake_minimum_required(VERSION 3.29)
2+
3+
set(CMAKE_POSITION_INDEPENDENT_CODE YES)
4+
5+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../cmake/modules")
6+
7+
if($ENV{BUILD_NUMBER})
8+
math(EXPR BUILD_NUMBER "$ENV{BUILD_NUMBER} % 65535")
9+
set(BUILD_NUMBER ".${BUILD_NUMBER}")
10+
endif()
11+
project(SwiftSynchronization
12+
LANGUAGES Swift
13+
VERSION 6.1.0${BUILD_NUMBER})
14+
15+
set(CMAKE_Swift_LANGUAGE_VERSION 5)
16+
17+
include(GNUInstallDirs)
18+
19+
if(NOT PROJECT_IS_TOP_LEVEL)
20+
message(SEND_ERROR "Swift Synchronization must build as a standalone project")
21+
endif()
22+
23+
set(${PROJECT_NAME}_SWIFTC_SOURCE_DIR
24+
"${PROJECT_SOURCE_DIR}/../../../"
25+
CACHE FILEPATH "Path to the root source directory of the Swift compiler")
26+
27+
set(${PROJECT_NAME}_VENDOR_MODULE_DIR "${CMAKE_SOURCE_DIR}/../cmake/modules/vendor"
28+
CACHE FILEPATH "Location for private build system extension")
29+
30+
find_package(SwiftCore QUIET REQUIRED)
31+
32+
include(gyb)
33+
include(ResourceEmbedding)
34+
include(AvailabilityMacros)
35+
include(PlatformInfo)
36+
37+
include("${${PROJECT_NAME}_VENDOR_MODULE_DIR}/Settings.cmake" OPTIONAL)
38+
39+
option(${PROJECT_NAME}_ENABLE_LIBRARY_EVOLUTION "Generate ABI resilient runtime libraries"
40+
${SwiftCore_ENABLE_LIBRARY_EVOLUTION})
41+
42+
option(${PROJECT_NAME}_ENABLE_PRESPECIALIZATION "Enable generic metadata prespecialization"
43+
${SwiftCore_ENABLE_PRESPECIALIZATION})
44+
45+
option(${PROJECT_NAME}_ARCH_SUBDIR "Architecture used for setting the architecture subdirectory"
46+
${SwiftCore_ARCH_SUBDIR})
47+
48+
option(${PROJECT_NAME}_INSTALL_NESTED_SUBDIR "Install libraries under a platform and architecture subdirectory"
49+
${SwiftCore_INSTALL_NESTED_SUBDIR})
50+
51+
option(${PROJECT_NAME}_PLATFORM_SUBDIR "Platform name used for installed swift{doc,module,interface} files"
52+
${SwiftCore_PLATFORM_SUBDIR})
53+
54+
option(${PROJECT_NAME}_COMPILER_VARIANT_TARGET "Compiler variant target to use when emiting modules"
55+
${SwiftCore_COMPILER_VARIANT_TARGET})
56+
57+
include(CatalystSupport)
58+
include(EmitSwiftInterface)
59+
60+
add_compile_options(
61+
"$<$<COMPILE_LANGUAGE:Swift>:-nostdlibimport>"
62+
"$<$<AND:$<BOOL:${${PROJECT_NAME}_ENABLE_LIBRARY_EVOLUTION}>,$<COMPILE_LANGUAGE:Swift>>:-enable-library-evolution>"
63+
"$<$<AND:$<BOOL:${${PROJECT_NAME}_ENABLE_PRESPECIALIZATION}>,$<COMPILE_LANGUAGE:Swift>>:SHELL:-Xfrontend -prespecialize-generic-metadata>"
64+
$<$<COMPILE_LANGUAGE:Swift>:-explicit-module-build>
65+
$<$<COMPILE_LANGUAGE:Swift>:-enable-builtin-module>
66+
$<$<COMPILE_LANGUAGE:Swift>:-strict-memory-safety>
67+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-experimental-feature RawLayout>"
68+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-experimental-feature StaticExclusiveOnly>"
69+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-experimental-feature Extern>")
70+
71+
gyb_expand(Atomics/AtomicIntegers.swift.gyb Atomics/AtomicIntegers.swift)
72+
gyb_expand(Atomics/AtomicStorage.swift.gyb Atomics/AtomicStorage.swift)
73+
74+
add_library(swiftSynchronization
75+
Atomics/Atomic.swift
76+
Atomics/AtomicBool.swift
77+
Atomics/AtomicFloats.swift
78+
Atomics/AtomicLazyReference.swift
79+
Atomics/AtomicMemoryOrderings.swift
80+
Atomics/AtomicOptional.swift
81+
Atomics/AtomicPointers.swift
82+
Atomics/AtomicRepresentable.swift
83+
Atomics/WordPair.swift
84+
Atomics/AtomicStorage.swift
85+
Atomics/AtomicIntegers.swift
86+
Cell.swift
87+
Mutex/Mutex.swift
88+
$<$<PLATFORM_ID:Darwin>:Mutex/DarwinImpl.swift>
89+
$<$<PLATFORM_ID:Linux>:Mutex/LinuxImpl.swift>
90+
$<$<PLATFORM_ID:WASI>:Mutex/SpinLoopHint.swift>
91+
$<$<PLATFORM_ID:WINDOWS>:Mutex/WindowsImpl.swift>)
92+
93+
set_target_properties(swiftSynchronization PROPERTIES
94+
Swift_MODULE_NAME Synchronization
95+
Swift_COMPILATION_MODE wholemodule)
96+
97+
if(APPLE AND BUILD_SHARED_LIBS)
98+
target_link_options(swiftSynchronization PRIVATE "SHELL:-Xlinker -headerpad_max_install_names")
99+
endif()
100+
101+
target_link_libraries(swiftSynchronization
102+
PRIVATE
103+
swiftCore
104+
$<$<PLATFORM_ID:Darwin>:swiftDarwin>)
105+
106+
set(${PROJECT_NAME}_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>$<$<BOOL:${Supplemental_INSTALL_NESTED_SUBDIR}>:/${Supplemental_PLATFORM_SUBDIR}/${Supplemental_ARCH_SUBDIR}>" CACHE STRING "")
107+
set(${PROJECT_NAME}_INSTALL_SWIFTMODULEDIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>$<$<BOOL:${Supplemental_INSTALL_NESTED_SUBDIR}>:/${Supplemental_PLATFORM_SUBDIR}>" CACHE STRING "")
108+
109+
install(TARGETS swiftSynchronization
110+
EXPORT SwiftSupplementalTargets
111+
COMPONENT SwiftCore_runtime
112+
ARCHIVE DESTINATION "${${PROJECT_NAME}_INSTALL_LIBDIR}"
113+
LIBRARY DESTINATION "${${PROJECT_NAME}_INSTALL_LIBDIR}"
114+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
115+
emit_swift_interface(swiftSynchronization)
116+
install_swift_interface(swiftSynchronization)
117+
118+
# Configure plist creation for Darwin platforms.
119+
generate_plist("${CMAKE_PROJECT_NAME}" "${CMAKE_PROJECT_VERSION}" swiftSynchronization)
120+
embed_manifest(swiftSynchronization)
121+
122+
include("${${PROJECT_NAME}_VENDOR_MODULE_DIR}/swiftSynchronization.cmake" OPTIONAL)

0 commit comments

Comments
 (0)