@@ -640,6 +640,7 @@ function(_add_swift_target_library_single target name)
640640 SDK
641641 DEPLOYMENT_VERSION_MACCATALYST
642642 MACCATALYST_BUILD_FLAVOR
643+ BACK_DEPLOYMENT_LIBRARY
643644 ENABLE_LTO)
644645 set (SWIFTLIB_SINGLE_multiple_parameter_options
645646 C_COMPILE_FLAGS
@@ -771,6 +772,13 @@ function(_add_swift_target_library_single target name)
771772 -libc;${SWIFT_STDLIB_MSVC_RUNTIME_LIBRARY} )
772773 endif ()
773774
775+ # Don't install the Swift module content for back-deployment libraries.
776+ if (SWIFTLIB_SINGLE_BACK_DEPLOYMENT_LIBRARY)
777+ set (install_in_component "never_install" )
778+ else ()
779+ set (install_in_component "${SWIFTLIB_SINGLE_INSTALL_IN_COMPONENT} " )
780+ endif ()
781+
774782 # FIXME: don't actually depend on the libraries in SWIFTLIB_SINGLE_LINK_LIBRARIES,
775783 # just any swiftmodule files that are associated with them.
776784 handle_swift_sources(
@@ -796,7 +804,7 @@ function(_add_swift_target_library_single target name)
796804 ${embed_bitcode_arg}
797805 ${SWIFTLIB_SINGLE_STATIC_keyword}
798806 ENABLE_LTO "${SWIFTLIB_SINGLE_ENABLE_LTO} "
799- INSTALL_IN_COMPONENT "${SWIFTLIB_SINGLE_INSTALL_IN_COMPONENT } "
807+ INSTALL_IN_COMPONENT "${install_in_component } "
800808 MACCATALYST_BUILD_FLAVOR "${SWIFTLIB_SINGLE_MACCATALYST_BUILD_FLAVOR} " )
801809 add_swift_source_group("${SWIFTLIB_SINGLE_EXTERNAL_SOURCES} " )
802810
@@ -941,21 +949,28 @@ function(_add_swift_target_library_single target name)
941949 SUFFIX ${LLVM_PLUGIN_EXT} )
942950 endif ()
943951
952+ # For back-deployed libraries, install into lib/swift-<version>.
953+ if (SWIFTLIB_SINGLE_BACK_DEPLOYMENT_LIBRARY)
954+ set (swiftlib_prefix "${CMAKE_BINARY_DIR} /${CMAKE_CFG_INTDIR} /lib/swift-${SWIFTLIB_SINGLE_BACK_DEPLOYMENT_LIBRARY} " )
955+ else ()
956+ set (swiftlib_prefix ${SWIFTLIB_DIR} )
957+ endif ()
958+
944959 # Install runtime libraries to lib/swift instead of lib. This works around
945960 # the fact that -isysroot prevents linking to libraries in the system
946961 # /usr/lib if Swift is installed in /usr.
947962 set_target_properties ("${target} " PROPERTIES
948- LIBRARY_OUTPUT_DIRECTORY ${SWIFTLIB_DIR } /${SWIFTLIB_SINGLE_SUBDIR}
949- ARCHIVE_OUTPUT_DIRECTORY ${SWIFTLIB_DIR } /${SWIFTLIB_SINGLE_SUBDIR} )
963+ LIBRARY_OUTPUT_DIRECTORY ${swiftlib_prefix } /${SWIFTLIB_SINGLE_SUBDIR}
964+ ARCHIVE_OUTPUT_DIRECTORY ${swiftlib_prefix } /${SWIFTLIB_SINGLE_SUBDIR} )
950965 if (SWIFTLIB_SINGLE_SDK STREQUAL WINDOWS AND SWIFTLIB_SINGLE_IS_STDLIB_CORE
951966 AND libkind STREQUAL SHARED)
952967 add_custom_command (TARGET ${target} POST_BUILD
953- COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${target} > ${SWIFTLIB_DIR } /${SWIFTLIB_SINGLE_SUBDIR} )
968+ COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${target} > ${swiftlib_prefix } /${SWIFTLIB_SINGLE_SUBDIR} )
954969 endif ()
955970
956971 foreach (config ${CMAKE_CONFIGURATION_TYPES} )
957972 string (TOUPPER ${config} config_upper)
958- escape_path_for_xcode("${config} " "${SWIFTLIB_DIR } " config_lib_dir)
973+ escape_path_for_xcode("${config} " "${swiftlib_prefix } " config_lib_dir)
959974 set_target_properties (${target} PROPERTIES
960975 LIBRARY_OUTPUT_DIRECTORY_${config_upper} ${config_lib_dir} /${SWIFTLIB_SINGLE_SUBDIR}
961976 ARCHIVE_OUTPUT_DIRECTORY_${config_upper} ${config_lib_dir} /${SWIFTLIB_SINGLE_SUBDIR} )
@@ -1390,6 +1405,7 @@ endfunction()
13901405# DEPLOYMENT_VERSION_TVOS version
13911406# DEPLOYMENT_VERSION_WATCHOS version
13921407# MACCATALYST_BUILD_FLAVOR flavor
1408+ # BACK_DEPLOYMENT_LIBRARY version
13931409# source1 [source2 source3 ...])
13941410#
13951411# name
@@ -1485,6 +1501,9 @@ endfunction()
14851501# IS_SDK_OVERLAY
14861502# Treat the library as a part of the Swift SDK overlay.
14871503#
1504+ # BACK_DEPLOYMENT_LIBRARY
1505+ # Treat this as a back-deployment library to the given Swift version
1506+ #
14881507# INSTALL_IN_COMPONENT comp
14891508# The Swift installation component that this library belongs to.
14901509#
@@ -1533,7 +1552,8 @@ function(add_swift_target_library name)
15331552 INSTALL_IN_COMPONENT
15341553 DARWIN_INSTALL_NAME_DIR
15351554 DEPLOYMENT_VERSION_MACCATALYST
1536- MACCATALYST_BUILD_FLAVOR)
1555+ MACCATALYST_BUILD_FLAVOR
1556+ BACK_DEPLOYMENT_LIBRARY)
15371557 set (SWIFTLIB_multiple_parameter_options
15381558 C_COMPILE_FLAGS
15391559 DEPENDS
@@ -1970,6 +1990,12 @@ function(add_swift_target_library name)
19701990 list (APPEND swiftlib_link_flags_all "-Wl,-soname,lib${name} .so" )
19711991 endif ()
19721992
1993+ if (SWIFTLIB_BACK_DEPLOYMENT_LIBRARY)
1994+ set (back_deployment_library_option BACK_DEPLOYMENT_LIBRARY ${SWIFTLIB_BACK_DEPLOYMENT_LIBRARY} )
1995+ else ()
1996+ set (back_deployment_library_option)
1997+ endif ()
1998+
19731999 # Add this library variant.
19742000 _add_swift_target_library_single(
19752001 ${variant_name}
@@ -2006,6 +2032,7 @@ function(add_swift_target_library name)
20062032 DEPLOYMENT_VERSION_TVOS "${SWIFTLIB_DEPLOYMENT_VERSION_TVOS} "
20072033 DEPLOYMENT_VERSION_WATCHOS "${SWIFTLIB_DEPLOYMENT_VERSION_WATCHOS} "
20082034 MACCATALYST_BUILD_FLAVOR "${maccatalyst_build_flavor} "
2035+ ${back_deployment_library_option}
20092036 ENABLE_LTO "${SWIFT_STDLIB_ENABLE_LTO} "
20102037 GYB_SOURCES ${SWIFTLIB_GYB_SOURCES}
20112038 )
@@ -2106,6 +2133,9 @@ function(add_swift_target_library name)
21062133 if ("${sdk} " STREQUAL "WINDOWS" )
21072134 set (UNIVERSAL_LIBRARY_NAME
21082135 "${SWIFTLIB_DIR} /${library_subdir} /${name} .dll" )
2136+ elseif (SWIFTLIB_BACK_DEPLOYMENT_LIBRARY)
2137+ set (UNIVERSAL_LIBRARY_NAME
2138+ "${CMAKE_BINARY_DIR} /${CMAKE_CFG_INTDIR} /lib/swift-${SWIFTLIB_BACK_DEPLOYMENT_LIBRARY} /${library_subdir} /${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX} " )
21092139 else ()
21102140 set (UNIVERSAL_LIBRARY_NAME
21112141 "${SWIFTLIB_DIR} /${library_subdir} /${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX} " )
@@ -2185,8 +2215,16 @@ function(add_swift_target_library name)
21852215 # NOTE: ${UNIVERSAL_LIBRARY_NAME} is the output associated with the target
21862216 # ${lipo_target}
21872217 add_dependencies (${SWIFTLIB_INSTALL_IN_COMPONENT} ${lipo_target} )
2218+
2219+ if (SWIFTLIB_BACK_DEPLOYMENT_LIBRARY)
2220+ # Back-deployment libraries get installed into a versioned directory.
2221+ set (install_dest "lib${LLVM_LIBDIR_SUFFIX} /${resource_dir} -${SWIFTLIB_BACK_DEPLOYMENT_LIBRARY} /${resource_dir_sdk_subdir} " )
2222+ else ()
2223+ set (install_dest "lib${LLVM_LIBDIR_SUFFIX} /${resource_dir} /${resource_dir_sdk_subdir} " )
2224+ endif ()
2225+
21882226 swift_install_in_component(FILES "${UNIVERSAL_LIBRARY_NAME} "
2189- DESTINATION "lib ${LLVM_LIBDIR_SUFFIX} / ${resource_dir} / ${resource_dir_sdk_subdir} "
2227+ DESTINATION ${install_dest}
21902228 COMPONENT "${SWIFTLIB_INSTALL_IN_COMPONENT} "
21912229 PERMISSIONS ${file_permissions}
21922230 "${optional_arg} " )
0 commit comments