From 2a367234beb720a63d76707b00d60eec3a762d06 Mon Sep 17 00:00:00 2001 From: Eric Miotto <1094986+edymtt@users.noreply.github.com> Date: Thu, 6 Feb 2025 09:03:37 -0800 Subject: [PATCH] Runtimes: support generic metadata prespecialization for all of Core Also provide a flag to enabled/disable it. Addresses rdar://144255917 --- Runtimes/Core/CMakeLists.txt | 4 +++- Runtimes/Core/cmake/modules/DefaultSettings.cmake | 3 +++ Runtimes/Core/core/CMakeLists.txt | 3 +-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Runtimes/Core/CMakeLists.txt b/Runtimes/Core/CMakeLists.txt index 54c25b0bbb5aa..b642d77926103 100644 --- a/Runtimes/Core/CMakeLists.txt +++ b/Runtimes/Core/CMakeLists.txt @@ -106,6 +106,7 @@ option(SwiftCore_HAS_DARWIN_LIBMALLOC "Use Darwin malloc features" ${APPLE}) defaulted_option(SwiftCore_ENABLE_BACKTRACING "Enable backtracing runtime support") defaulted_set(SwiftCore_BACKTRACER_PATH STRING "Set a fixed path to the Swift backtracer") defaulted_option(SwiftCore_ENABLE_FATALERROR_BACKTRACE "Build stdlib fatalError with backtrace output") +defaulted_option(SwiftCore_ENABLE_PRESPECIALIZATION "Enable generic metadata prespecialization") option(SwiftCore_ENABLE_CLOBBER_FREED_OBJECTS "" OFF) option(SwiftCore_ENABLE_RUNTIME_LEAK_CHECKER "" OFF) @@ -181,7 +182,8 @@ add_compile_options( "$<$:SHELL:-Xfrontend -target-min-inlining-version -Xfrontend min>" "$<$>,$>:SHELL:-Xfrontend -disable-objc-interop>" "$<$,$>:SHELL:-Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules>" - "$<$,$>:-enable-library-evolution>") + "$<$,$>:-enable-library-evolution>" + "$<$,$>:SHELL:-Xfrontend -prespecialize-generic-metadata>") include_directories(include) diff --git a/Runtimes/Core/cmake/modules/DefaultSettings.cmake b/Runtimes/Core/cmake/modules/DefaultSettings.cmake index 29923e5bf5d4c..3c2db77aa30fa 100644 --- a/Runtimes/Core/cmake/modules/DefaultSettings.cmake +++ b/Runtimes/Core/cmake/modules/DefaultSettings.cmake @@ -41,6 +41,7 @@ if(APPLE) set(SwiftCore_ENABLE_RUNTIME_OS_VERSIONING ON) set(SwiftCore_ENABLE_OVERRIDABLE_RETAIN_RELEASE ON) set(SwiftCore_THREADING_PACKAGE "DARWIN") + set(SwiftCore_ENABLE_PRESPECIALIZATION_default ON) elseif(CMAKE_SYSTEM_NAME STREQUAL "WASM") set(SwiftCore_OBJECT_FORMAT_default "elf") set(SwiftCore_THREADING_PACKAGE "NONE") @@ -49,6 +50,7 @@ elseif(LINUX OR ANDROID OR BSD) set(SwiftCore_ENABLE_FATALERROR_BACKTRACE_default ON) if(LINUX) set(SwiftCore_THREADING_PACKAGE "LINUX") + set(SwiftCore_ENABLE_PRESPECIALIZATION_default ON) else() set(SwiftCore_THREADING_PACKAGE "PTHREADS") endif() @@ -56,6 +58,7 @@ elseif(WIN32) set(SwiftCore_OBJECT_FORMAT_default "coff") set(SwiftCore_THREADING_PACKAGE "WIN32") set(SwiftCore_ENABLE_FATALERROR_BACKTRACE_default ON) + set(SwiftCore_ENABLE_PRESPECIALIZATION_default ON) endif() include("${SwiftCore_VENDOR_MODULE_DIR}/DefaultSettings.cmake" OPTIONAL) diff --git a/Runtimes/Core/core/CMakeLists.txt b/Runtimes/Core/core/CMakeLists.txt index 23f9741d2f887..4f5ab2d5c6899 100644 --- a/Runtimes/Core/core/CMakeLists.txt +++ b/Runtimes/Core/core/CMakeLists.txt @@ -283,8 +283,7 @@ target_compile_options(swiftCore PRIVATE "$<$:SHELL:-Xfrontend -group-info-path -Xfrontend ${CMAKE_CURRENT_SOURCE_DIR}/GroupInfo.json>" "$<$:SHELL:-Xfrontend -disable-autolinking-runtime-compatibility-concurrency>" "$<$:SHELL:-Xfrontend -disable-objc-attr-requires-foundation-module>" - "$<$:SHELL:-Xfrontend -require-explicit-availability=ignore>" - "$<$:SHELL:-Xfrontend -prespecialize-generic-metadata>") + "$<$:SHELL:-Xfrontend -require-explicit-availability=ignore>") if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel") # Using these in MinSizeRel would result in a 15% increase in the binary size