Skip to content

Commit 57908cd

Browse files
committed
Runtimes: allow to link SwiftDirectRetainRelease in swiftCore
At the moment we are not building that natively in the new build system, so find the copy built by the legacy one using a find module. Keep this disabled for the time being. Addresses rdar://164174616
1 parent a93595e commit 57908cd

File tree

7 files changed

+91
-1
lines changed

7 files changed

+91
-1
lines changed

Runtimes/Core/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ defaulted_option(SwiftCore_ENABLE_BACKDEPLOYMENT_SUPPORT "Add symbols for runtim
109109
defaulted_option(SwiftCore_ENABLE_STDLIB_TRACING "Enable tracing in the runtime. Assumes the presence of os_log(3) and the os_signpost(3) API.")
110110
defaulted_option(SwiftCore_ENABLE_CONCURRENCY "Enable Concurrency runtime support")
111111
defaulted_option(SwiftCore_ENABLE_REMOTE_MIRROR "Enable RemoteMirror runtime support")
112+
defaulted_option(SwiftCore_ENABLE_DIRECT_RETAIN_RELEASE "Use direct retain release in the runtime/stdlib")
112113
defaulted_set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR STRING "Default Concurrency global executor implementation")
113114
option(SwiftCore_ENABLE_COMMANDLINE_SUPPORT "Enable command line argument support" ON)
114115
option(SwiftCore_ENABLE_UNICODE_DATA "Include unicode data in Swift runtimes" ON)
@@ -196,6 +197,11 @@ add_compile_options(
196197
"$<$<AND:$<BOOL:${SwiftCore_ENABLE_LIBRARY_EVOLUTION}>,$<COMPILE_LANGUAGE:Swift>>:-enable-library-evolution>"
197198
"$<$<AND:$<BOOL:${SwiftCore_ENABLE_PRESPECIALIZATION}>,$<COMPILE_LANGUAGE:Swift>>:SHELL:-Xfrontend -prespecialize-generic-metadata>")
198199

200+
if(SwiftCore_ENABLE_DIRECT_RETAIN_RELEASE)
201+
find_package(SwiftSwiftDirectRuntime REQUIRED)
202+
add_compile_options("$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xfrontend -enable-direct-retain-release>")
203+
endif()
204+
199205
include(ExperimentalFeatures)
200206

201207
include_directories(include)

Runtimes/Core/Concurrency/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ target_link_libraries(swift_Concurrency PRIVATE
139139
$<$<PLATFORM_ID:Android>:log>
140140
$<$<PLATFORM_ID:Windows>:Synchronization>
141141
$<$<PLATFORM_ID:Windows>:mincore>
142+
$<$<BOOL:${SwiftSwiftDirectRuntime_FOUND}>:swiftSwiftDirectRuntime>
142143
# Link to the runtime that we are just building.
143144
swiftCore)
144145
set_target_properties(swift_Concurrency PROPERTIES

Runtimes/Core/Core/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,7 @@ target_link_libraries(swiftCore
337337
swiftStdlibStubs
338338
swiftThreading
339339
$<$<NOT:$<PLATFORM_ID:Darwin>>:swiftrt$<$<PLATFORM_ID:Windows>:T>>
340+
$<$<BOOL:${SwiftSwiftDirectRuntime_FOUND}>:swiftSwiftDirectRuntime>
340341
PUBLIC
341342
swiftShims
342343
INTERFACE

Runtimes/Core/SwiftOnoneSupport/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ target_compile_definitions(swiftSwiftOnoneSupport PRIVATE
2929
target_link_libraries(swiftSwiftOnoneSupport
3030
PRIVATE
3131
swiftShims
32-
swiftCore)
32+
swiftCore
33+
$<$<BOOL:${SwiftSwiftDirectRuntime_FOUND}>:swiftSwiftDirectRuntime>)
3334

3435
install(TARGETS swiftSwiftOnoneSupport
3536
EXPORT SwiftCoreTargets

Runtimes/Core/cmake/interface/SwiftCoreConfig.cmake.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ set(SwiftCore_ENABLE_LIBRARY_EVOLUTION @SwiftCore_ENABLE_LIBRARY_EVOLUTION@)
66
set(SwiftCore_ENABLE_VECTOR_TYPES @SwiftCore_ENABLE_VECTOR_TYPES@)
77

88
set(SwiftCore_ENABLE_BACKDEPLOYMENT_SUPPORT @SwiftCore_ENABLE_BACKDEPLOYMENT_SUPPORT@)
9+
10+
set(SwiftCore_ENABLE_DIRECT_RETAIN_RELEASE @SwiftCore_ENABLE_DIRECT_RETAIN_RELEASE@)

Runtimes/Core/cmake/modules/DefaultSettings.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,15 @@ if(APPLE)
4646
set(SwiftCore_THREADING_PACKAGE_default "DARWIN")
4747
set(SwiftCore_ENABLE_PRESPECIALIZATION_default ON)
4848
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR_default "dispatch")
49+
# TODO we are not ready to enable it here
50+
set(SwiftCore_ENABLE_DIRECT_RETAIN_RELEASE_default OFF)
4951
elseif(CMAKE_SYSTEM_NAME STREQUAL "WASM")
5052
set(SwiftCore_OBJECT_FORMAT_default "elf")
5153
set(SwiftCore_THREADING_PACKAGE_default "NONE")
5254
set(SwiftCore_ENABLE_CONCURRENCY_default NO)
5355
set(SwiftCore_ENABLE_REMOTE_MIRROR_default NO)
5456
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR_default "none")
57+
set(SwiftCore_ENABLE_DIRECT_RETAIN_RELEASE_default OFF)
5558
elseif(LINUX OR ANDROID OR BSD)
5659
set(SwiftCore_OBJECT_FORMAT_default "elf")
5760

@@ -66,6 +69,7 @@ elseif(LINUX OR ANDROID OR BSD)
6669
set(SwiftCore_ENABLE_CONCURRENCY_default NO)
6770
set(SwiftCore_ENABLE_REMOTE_MIRROR_default NO)
6871
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR_default "dispatch")
72+
set(SwiftCore_ENABLE_DIRECT_RETAIN_RELEASE_default OFF)
6973
elseif(WIN32)
7074
set(SwiftCore_OBJECT_FORMAT_default "coff")
7175

@@ -80,6 +84,7 @@ elseif(WIN32)
8084
# errors
8185
set(SwiftCore_ENABLE_PRESPECIALIZATION_default OFF)
8286
set(SwiftCore_CONCURRENCY_GLOBAL_EXECUTOR_default "dispatch")
87+
set(SwiftCore_ENABLE_DIRECT_RETAIN_RELEASE_default OFF)
8388

8489
set(SwiftCore_ENABLE_VECTOR_TYPES_default ON)
8590
set(SwiftCore_ENABLE_FILESYSTEM_SUPPORT_default ON)
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#[=======================================================================[.rst:
2+
FindSwiftSwiftDirectRuntime
3+
------------
4+
5+
Find swiftSwiftDirectRuntime, deferring to the associated SwiftSwiftDirectRuntimeConfig.cmake when requested.
6+
This is meant to be linked in swiftCore.
7+
8+
Imported Targets
9+
^^^^^^^^^^^^^^^^
10+
11+
The following :prop_tgt:`IMPORTED` TARGETS may be defined:
12+
13+
``swiftSwiftDirectRuntime``
14+
15+
#]=======================================================================]
16+
17+
include_guard(GLOBAL)
18+
19+
if(SwiftSwiftDirectRuntime_DIR)
20+
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED)
21+
list(APPEND args REQUIRED)
22+
endif()
23+
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
24+
list(APPEND args QUIET)
25+
endif()
26+
find_package(SwiftSwiftDirectRuntime CONFIG ${args})
27+
return()
28+
endif()
29+
30+
include(FindPackageHandleStandardArgs)
31+
include(PlatformInfo)
32+
33+
if(APPLE)
34+
# SwiftDirectRuntime is not installed in the SDKs, but in the
35+
# toolchain next to the compiler
36+
set(target_info_command "${CMAKE_Swift_COMPILER}" -print-target-info)
37+
if(CMAKE_Swift_COMPILER_TARGET)
38+
list(APPEND target_info_command -target ${CMAKE_Swift_COMPILER_TARGET})
39+
endif()
40+
execute_process(COMMAND ${target_info_command} OUTPUT_VARIABLE target_info_json)
41+
message(CONFIGURE_LOG "Swift target info: ${target_info_command}\n"
42+
"${target_info_json}")
43+
44+
string(JSON runtime_library_import_paths_json GET "${target_info_json}" "paths" "runtimeLibraryImportPaths")
45+
message(CONFIGURE_LOG "runtime_library_import_paths_json ${runtime_library_import_paths_json}")
46+
47+
string(JSON number_of_runtime_library_import_paths LENGTH "${runtime_library_import_paths_json}")
48+
math(EXPR index_of_last_runtime_library_import_path "${number_of_runtime_library_import_paths} - 1")
49+
foreach(index RANGE 0 ${index_of_last_runtime_library_import_path})
50+
string(JSON runtime_library_import_path GET "${runtime_library_import_paths_json}" ${index})
51+
52+
list(APPEND swiftSwiftDirectRuntime_LIBRARY_HINTS
53+
"${runtime_library_import_path}")
54+
endforeach()
55+
56+
list(APPEND swiftSwiftDirectRuntime_NAMES libswiftSwiftDirectRuntime.a)
57+
else()
58+
message(WARNING "SwiftDirectRuntime is only available for Apple platforms at the moment.\n")
59+
return()
60+
endif()
61+
62+
find_library(swiftSwiftDirectRuntime_LIBRARY
63+
NAMES
64+
${swiftSwiftDirectRuntime_NAMES}
65+
NO_CMAKE_FIND_ROOT_PATH
66+
HINTS
67+
${swiftSwiftDirectRuntime_LIBRARY_HINTS})
68+
69+
add_library(swiftSwiftDirectRuntime STATIC IMPORTED GLOBAL)
70+
set_target_properties(swiftSwiftDirectRuntime PROPERTIES
71+
IMPORTED_LOCATION "${swiftSwiftDirectRuntime_LIBRARY}")
72+
73+
find_package_handle_standard_args(SwiftSwiftDirectRuntime DEFAULT_MSG
74+
swiftSwiftDirectRuntime_LIBRARY)

0 commit comments

Comments
 (0)