@@ -640,6 +640,7 @@ function(_add_swift_target_library_single target name)
640
640
SDK
641
641
DEPLOYMENT_VERSION_MACCATALYST
642
642
MACCATALYST_BUILD_FLAVOR
643
+ BACK_DEPLOYMENT_LIBRARY
643
644
ENABLE_LTO )
644
645
set (SWIFTLIB_SINGLE_multiple_parameter_options
645
646
C_COMPILE_FLAGS
@@ -771,6 +772,13 @@ function(_add_swift_target_library_single target name)
771
772
-libc;${SWIFT_STDLIB_MSVC_RUNTIME_LIBRARY} )
772
773
endif ()
773
774
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
+
774
782
# FIXME: don't actually depend on the libraries in SWIFTLIB_SINGLE_LINK_LIBRARIES,
775
783
# just any swiftmodule files that are associated with them.
776
784
handle_swift_sources (
@@ -796,7 +804,7 @@ function(_add_swift_target_library_single target name)
796
804
${embed_bitcode_arg}
797
805
${SWIFTLIB_SINGLE_STATIC_keyword}
798
806
ENABLE_LTO "${SWIFTLIB_SINGLE_ENABLE_LTO} "
799
- INSTALL_IN_COMPONENT "${SWIFTLIB_SINGLE_INSTALL_IN_COMPONENT } "
807
+ INSTALL_IN_COMPONENT "${install_in_component } "
800
808
MACCATALYST_BUILD_FLAVOR "${SWIFTLIB_SINGLE_MACCATALYST_BUILD_FLAVOR} " )
801
809
add_swift_source_group ("${SWIFTLIB_SINGLE_EXTERNAL_SOURCES} " )
802
810
@@ -941,21 +949,28 @@ function(_add_swift_target_library_single target name)
941
949
SUFFIX ${LLVM_PLUGIN_EXT} )
942
950
endif ()
943
951
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
+
944
959
# Install runtime libraries to lib/swift instead of lib. This works around
945
960
# the fact that -isysroot prevents linking to libraries in the system
946
961
# /usr/lib if Swift is installed in /usr.
947
962
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} )
950
965
if (SWIFTLIB_SINGLE_SDK STREQUAL WINDOWS AND SWIFTLIB_SINGLE_IS_STDLIB_CORE
951
966
AND libkind STREQUAL SHARED )
952
967
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} )
954
969
endif ()
955
970
956
971
foreach (config ${CMAKE_CONFIGURATION_TYPES} )
957
972
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 )
959
974
set_target_properties (${target} PROPERTIES
960
975
LIBRARY_OUTPUT_DIRECTORY_${config_upper} ${config_lib_dir} /${SWIFTLIB_SINGLE_SUBDIR}
961
976
ARCHIVE_OUTPUT_DIRECTORY_${config_upper} ${config_lib_dir} /${SWIFTLIB_SINGLE_SUBDIR} )
@@ -1390,6 +1405,7 @@ endfunction()
1390
1405
# DEPLOYMENT_VERSION_TVOS version
1391
1406
# DEPLOYMENT_VERSION_WATCHOS version
1392
1407
# MACCATALYST_BUILD_FLAVOR flavor
1408
+ # BACK_DEPLOYMENT_LIBRARY version
1393
1409
# source1 [source2 source3 ...])
1394
1410
#
1395
1411
# name
@@ -1485,6 +1501,9 @@ endfunction()
1485
1501
# IS_SDK_OVERLAY
1486
1502
# Treat the library as a part of the Swift SDK overlay.
1487
1503
#
1504
+ # BACK_DEPLOYMENT_LIBRARY
1505
+ # Treat this as a back-deployment library to the given Swift version
1506
+ #
1488
1507
# INSTALL_IN_COMPONENT comp
1489
1508
# The Swift installation component that this library belongs to.
1490
1509
#
@@ -1533,7 +1552,8 @@ function(add_swift_target_library name)
1533
1552
INSTALL_IN_COMPONENT
1534
1553
DARWIN_INSTALL_NAME_DIR
1535
1554
DEPLOYMENT_VERSION_MACCATALYST
1536
- MACCATALYST_BUILD_FLAVOR )
1555
+ MACCATALYST_BUILD_FLAVOR
1556
+ BACK_DEPLOYMENT_LIBRARY )
1537
1557
set (SWIFTLIB_multiple_parameter_options
1538
1558
C_COMPILE_FLAGS
1539
1559
DEPENDS
@@ -1970,6 +1990,12 @@ function(add_swift_target_library name)
1970
1990
list (APPEND swiftlib_link_flags_all "-Wl,-soname,lib${name} .so" )
1971
1991
endif ()
1972
1992
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
+
1973
1999
# Add this library variant.
1974
2000
_add_swift_target_library_single (
1975
2001
${variant_name}
@@ -2006,6 +2032,7 @@ function(add_swift_target_library name)
2006
2032
DEPLOYMENT_VERSION_TVOS "${SWIFTLIB_DEPLOYMENT_VERSION_TVOS} "
2007
2033
DEPLOYMENT_VERSION_WATCHOS "${SWIFTLIB_DEPLOYMENT_VERSION_WATCHOS} "
2008
2034
MACCATALYST_BUILD_FLAVOR "${maccatalyst_build_flavor} "
2035
+ ${back_deployment_library_option}
2009
2036
ENABLE_LTO "${SWIFT_STDLIB_ENABLE_LTO} "
2010
2037
GYB_SOURCES ${SWIFTLIB_GYB_SOURCES}
2011
2038
)
@@ -2106,6 +2133,9 @@ function(add_swift_target_library name)
2106
2133
if ("${sdk} " STREQUAL "WINDOWS" )
2107
2134
set (UNIVERSAL_LIBRARY_NAME
2108
2135
"${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} " )
2109
2139
else ()
2110
2140
set (UNIVERSAL_LIBRARY_NAME
2111
2141
"${SWIFTLIB_DIR} /${library_subdir} /${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX} " )
@@ -2185,8 +2215,16 @@ function(add_swift_target_library name)
2185
2215
# NOTE: ${UNIVERSAL_LIBRARY_NAME} is the output associated with the target
2186
2216
# ${lipo_target}
2187
2217
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
+
2188
2226
swift_install_in_component (FILES "${UNIVERSAL_LIBRARY_NAME} "
2189
- DESTINATION "lib ${LLVM_LIBDIR_SUFFIX} / ${resource_dir} / ${resource_dir_sdk_subdir} "
2227
+ DESTINATION ${install_dest}
2190
2228
COMPONENT "${SWIFTLIB_INSTALL_IN_COMPONENT} "
2191
2229
PERMISSIONS ${file_permissions}
2192
2230
"${optional_arg} " )
0 commit comments