[maccatalyst] Handle macCatalyst static swiftmodules (#76784)

The existing CMake code for macCatalyst swiftmodule only handled the
shared case, and did not have the static pieces that non-macCatalyst
targets are doing.

Try to match as much as possible the non-macCatalyst variables and
structure and allow macCatalyst targets to support static Swift targets.

This is important for the `Cxx.swiftmodule` and `CxxStdlib.swiftmodule`,
since they are only static, and the previous code skipped creating those
files since https://github.com/swiftlang/swift/pull/74994
This commit is contained in:
Daniel Rodríguez Troitiño
2024-10-21 22:56:12 -07:00
committed by GitHub
parent 1cbd7d3163
commit d84b23b611

View File

@@ -757,22 +757,37 @@ function(_compile_swift_files
message(FATAL_ERROR "Don't know where to put the module files")
endif()
set(maccatalyst_specific_module_dir
"${maccatalyst_module_dir}/${SWIFTFILE_MODULE_NAME}.swiftmodule")
set(maccatalyst_module_base "${maccatalyst_module_dir}/${SWIFTFILE_MODULE_NAME}")
set(maccatalyst_module_dir_static "${SWIFTSTATICLIB_DIR}/${maccatalyst_library_subdir}")
set(maccatalyst_module_base_static "${maccatalyst_module_dir_static}/${SWIFTFILE_MODULE_NAME}")
set(maccatalyst_module_triple ${SWIFT_SDK_MACCATALYST_ARCH_${SWIFTFILE_ARCHITECTURE}_MODULE})
set(maccatalyst_module_base "${maccatalyst_specific_module_dir}/${maccatalyst_module_triple}")
set(maccatalyst_specific_module_dir "${maccatalyst_module_base}.swiftmodule")
set(maccatalyst_module_base "${maccatalyst_module_base}.swiftmodule/${maccatalyst_module_triple}")
set(maccatalyst_specific_module_dir_static "${maccatalyst_module_base_static}.swiftmodule")
set(maccatalyst_module_base_static "${maccatalyst_module_base_static}.swiftmodule/${maccatalyst_module_triple}")
set(maccatalyst_module_file "${maccatalyst_module_base}.swiftmodule")
set(maccatalyst_module_doc_file "${maccatalyst_module_base}.swiftdoc")
set(maccatalyst_module_file_static "${maccatalyst_module_base_static}.swiftmodule")
set(maccatalyst_module_doc_file_static "${maccatalyst_module_base_static}.swiftdoc")
set(maccatalyst_module_outputs "${maccatalyst_module_file}" "${maccatalyst_module_doc_file}")
set(maccatalyst_module_outputs_static "${maccatalyst_module_file_static}" "${maccatalyst_module_doc_file_static}")
if(SWIFT_ENABLE_MODULE_INTERFACES AND NOT SWIFTFILE_IS_FRAGILE)
set(maccatalyst_interface_file "${maccatalyst_module_base}.swiftinterface")
set(maccatalyst_interface_file_static "${maccatalyst_module_base_static}.swiftinterface")
set(maccatalyst_private_interface_file "${maccatalyst_module_base}.private.swiftinterface")
set(maccatalyst_private_interface_file_static "${maccatalyst_module_base_static}.private.swiftinterface")
list(APPEND maccatalyst_module_outputs "${maccatalyst_interface_file}" "${maccatalyst_private_interface_file}")
list(APPEND maccatalyst_module_outputs_static "${maccatalyst_interface_file_static}" "${maccatalyst_private_interface_file_static}")
else()
set(maccatalyst_interface_file)
set(maccatalyst_private_interface_file)
set(maccatalyst_interface_file_static)
set(maccatalyst_private_interface_file_static)
endif()
if(SWIFT_STDLIB_EMIT_API_DESCRIPTORS AND NOT SWIFTFILE_IS_FRAGILE)
@@ -788,6 +803,15 @@ function(_compile_swift_files
OPTIONAL
PATTERN "Project" EXCLUDE
${exclude_binary_swiftmodule_installation_args})
if(SWIFTFILE_STATIC)
swift_install_in_component(DIRECTORY ${maccatalyst_specific_module_dir_static}
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift_static/${maccatalyst_library_subdir}"
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}"
OPTIONAL
PATTERN "Project" EXCLUDE
${exclude_binary_swiftmodule_installation_args})
endif()
endif()
# If we have extra regexp flags, check if we match any of the regexps. If so
@@ -1146,7 +1170,7 @@ function(_compile_swift_files
COMMAND
"${CMAKE_COMMAND}" "-E" "remove" "-f" ${maccatalyst_module_outputs}
COMMAND
"${CMAKE_COMMAND}" "-E" "make_directory" ${maccatalyst_specific_module_dir}
"${CMAKE_COMMAND}" "-E" "make_directory" ${maccatalyst_module_dir} ${maccatalyst_specific_module_dir}
COMMAND
${set_environment_args}
"$<TARGET_FILE:Python3::Interpreter>" "${line_directive_tool}" "@${file_path}" --
@@ -1167,11 +1191,38 @@ function(_compile_swift_files
COMMENT
"Generating ${maccatalyst_module_file}")
# Piggy-back on the same out-var as the regular swiftmodule
set("${dependency_module_target_out_var_name}"
"${module_dependency_target}"
"${maccatalyst_module_dependency_target}"
PARENT_SCOPE)
if(SWIFTFILE_STATIC)
set(maccatalyst_command_copy_interface_file)
if(maccatalyst_interface_file)
set(maccatalyst_command_copy_interface_file
COMMAND "${CMAKE_COMMAND}" "-E" "copy" ${maccatalyst_interface_file} ${maccatalyst_interface_file_static}
COMMAND "${CMAKE_COMMAND}" "-E" "copy" ${maccatalyst_private_interface_file} ${maccatalyst_private_interface_file_static})
endif()
add_custom_command_target(
maccatalyst_module_dependency_target_static
COMMAND "${CMAKE_COMMAND}" -E make_directory ${dirs_to_create}
COMMAND
"${CMAKE_COMMAND}" "-E" "make_directory" ${maccatalyst_module_dir_static}
${maccatalyst_specific_module_dir_static}
COMMAND
"${CMAKE_COMMAND}" "-E" "copy" ${maccatalyst_module_file} ${maccatalyst_module_file_static}
COMMAND
"${CMAKE_COMMAND}" "-E" "copy" ${maccatalyst_module_doc_file} ${maccatalyst_module_doc_file_static}
${maccatalyst_command_copy_interface_file}
OUTPUT ${maccatalyst_module_outputs_static}
DEPENDS
"${maccatalyst_module_dependency_target}"
"${line_directive_tool}"
"${file_path_target}"
${swift_compiler_tool_dep}
${source_files} ${SWIFTFILE_DEPENDS}
${swift_ide_test_dependency}
${copy_legacy_layouts_dep}
COMMENT "Generating ${maccatalyst_module_file_static}")
set("${dependency_module_target_out_var_name}" "${module_dependency_target_static}" "${maccatalyst_module_dependency_target_static}" PARENT_SCOPE)
else()
set("${dependency_module_target_out_var_name}" "${module_dependency_target}" "${maccatalyst_module_dependency_target}" PARENT_SCOPE)
endif()
endif()
# This is the target to generate the .sib files. It is not built by default.