Skip to content

[maccatalyst] Handle macCatalyst static swiftmodules #76784

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 60 additions & 9 deletions stdlib/cmake/modules/SwiftSource.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
Expand Down Expand Up @@ -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}" --
Expand All @@ -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.
Expand Down