Skip to content

Commit 03c490c

Browse files
authored
[CMake] add option to generate API descriptors for the standard library (swiftlang#69228)
This would be needed to stop using `swift-api-extract` in some internal configurations. Given the limited scope, only add this as a CMake flag. Addresses rdar://117019309
1 parent 1686800 commit 03c490c

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

stdlib/cmake/modules/StdlibOptions.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ option(SWIFT_ENABLE_MODULE_INTERFACES
9595
"Generate .swiftinterface files alongside .swiftmodule files"
9696
"${SWIFT_STDLIB_STABLE_ABI}")
9797

98+
option(SWIFT_STDLIB_EMIT_API_DESCRIPTORS
99+
"Emit api descriptors for the standard library"
100+
FALSE)
101+
98102
if("${SWIFT_HOST_VARIANT_SDK}" IN_LIST SWIFT_DARWIN_PLATFORMS)
99103
set(SWIFT_STDLIB_ENABLE_PRESPECIALIZATION_default TRUE)
100104
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "LINUX")

stdlib/cmake/modules/SwiftSource.cmake

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,12 @@ function(_compile_swift_files
656656
"-emit-private-module-interface-path" "${private_interface_file}")
657657
endif()
658658

659+
if(SWIFT_STDLIB_EMIT_API_DESCRIPTORS AND NOT SWIFTFILE_IS_FRAGILE)
660+
set(api_descriptor_file "${module_base}.api.json")
661+
list(APPEND swift_module_flags
662+
"-emit-api-descriptor-path" "${api_descriptor_file}")
663+
endif()
664+
659665
if (NOT SWIFTFILE_IS_STDLIB_CORE)
660666
list(APPEND swift_module_flags
661667
"-Xfrontend" "-experimental-skip-non-inlinable-function-bodies")
@@ -714,6 +720,13 @@ function(_compile_swift_files
714720
set(maccatalyst_private_interface_file)
715721
endif()
716722

723+
if(SWIFT_STDLIB_EMIT_API_DESCRIPTORS AND NOT SWIFTFILE_IS_FRAGILE)
724+
set(maccatalyst_api_descriptor_file "${maccatalyst_module_base}.api.json")
725+
list(APPEND maccatalyst_module_outputs "${maccatalyst_api_descriptor_file}")
726+
else()
727+
set(maccatalyst_api_descriptor_file)
728+
endif()
729+
717730
swift_install_in_component(DIRECTORY ${maccatalyst_specific_module_dir}
718731
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${maccatalyst_library_subdir}"
719732
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}"
@@ -737,6 +750,9 @@ function(_compile_swift_files
737750
list(APPEND module_outputs "${interface_file}" "${private_interface_file}")
738751
list(APPEND module_outputs_static "${interface_file_static}" "${private_interface_file_static}")
739752
endif()
753+
if(api_descriptor_file)
754+
list(APPEND module_outputs "${api_descriptor_file}")
755+
endif()
740756

741757
swift_install_in_component(DIRECTORY "${specific_module_dir}"
742758
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${library_subdir}"
@@ -856,6 +872,14 @@ function(_compile_swift_files
856872
list(REMOVE_AT maccatalyst_swift_module_flags ${old_interface_file_index})
857873
endif()
858874

875+
# Remove original api descriptor
876+
list(FIND maccatalyst_swift_module_flags "${api_descriptor_file}" api_descriptor_file_index)
877+
if(NOT api_descriptor_file_index EQUAL -1)
878+
list(INSERT maccatalyst_swift_module_flags ${api_descriptor_file_index} "${maccatalyst_api_descriptor_file}")
879+
math(EXPR old_api_descriptor_file_index "${api_descriptor_file_index} + 1")
880+
list(REMOVE_AT maccatalyst_swift_module_flags ${old_api_descriptor_file_index})
881+
endif()
882+
859883
# We still need to change the main swift flags
860884
# so we can use the correct modules
861885
# when building for macOS

0 commit comments

Comments
 (0)