@@ -303,6 +303,11 @@ function(_add_variant_c_compile_flags)
303
303
"-fcoverage-mapping" )
304
304
endif ()
305
305
306
+ if ((CFLAGS_ARCH STREQUAL "armv7" OR CFLAGS_ARCH STREQUAL "aarch64" ) AND
307
+ (CFLAGS_SDK STREQUAL "LINUX" OR CFLAGS_SDK STREQUAL "ANDROID" ))
308
+ list (APPEND result -funwind-tables )
309
+ endif ()
310
+
306
311
if ("${CFLAGS_SDK} " STREQUAL "ANDROID" )
307
312
swift_android_libcxx_include_paths (CFLAGS_CXX_INCLUDES )
308
313
swift_android_include_for_arch ("${CFLAGS_ARCH} " "${CFLAGS_ARCH} _INCLUDE" )
@@ -465,6 +470,10 @@ function(_add_variant_link_flags)
465
470
set (android_libcxx_path "${SWIFT_ANDROID_NDK_PATH} /sources/cxx-stl/llvm-libc++/libs/armeabi-v7a" )
466
471
elseif ("${LFLAGS_ARCH} " MATCHES aarch64 )
467
472
set (android_libcxx_path "${SWIFT_ANDROID_NDK_PATH} /sources/cxx-stl/llvm-libc++/libs/arm64-v8a" )
473
+ elseif ("${LFLAGS_ARCH} " MATCHES i686 )
474
+ set (android_libcxx_path "${SWIFT_ANDROID_NDK_PATH} /sources/cxx-stl/llvm-libc++/libs/x86" )
475
+ elseif ("${LFLAGS_ARCH} " MATCHES x86_64 )
476
+ set (android_libcxx_path "${SWIFT_ANDROID_NDK_PATH} /sources/cxx-stl/llvm-libc++/libs/x86_64" )
468
477
else ()
469
478
message (SEND_ERROR "unknown architecture (${LFLAGS_ARCH} ) for android" )
470
479
endif ()
@@ -738,7 +747,8 @@ function(_add_swift_library_single target name)
738
747
OBJECT_LIBRARY
739
748
SHARED
740
749
STATIC
741
- TARGET_LIBRARY )
750
+ TARGET_LIBRARY
751
+ INSTALL_WITH_SHARED )
742
752
set (SWIFTLIB_SINGLE_single_parameter_options
743
753
ARCHITECTURE
744
754
DEPLOYMENT_VERSION_IOS
@@ -933,6 +943,17 @@ function(_add_swift_library_single target name)
933
943
endif ()
934
944
endif ()
935
945
946
+ # Only build the modules for any arch listed in the *_MODULE_ARCHITECTURES.
947
+ if (SWIFTLIB_SINGLE_SDK IN_LIST SWIFT_APPLE_PLATFORMS
948
+ AND SWIFTLIB_SINGLE_ARCHITECTURE IN_LIST SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_MODULE_ARCHITECTURES )
949
+ # Create dummy target to hook up the module target dependency.
950
+ add_custom_target ("${target} "
951
+ DEPENDS
952
+ "${swift_module_dependency_target} " )
953
+
954
+ return ()
955
+ endif ()
956
+
936
957
set (SWIFTLIB_INCORPORATED_OBJECT_LIBRARIES_EXPRESSIONS )
937
958
foreach (object_library ${SWIFTLIB_SINGLE_INCORPORATE_OBJECT_LIBRARIES} )
938
959
list (APPEND SWIFTLIB_INCORPORATED_OBJECT_LIBRARIES_EXPRESSIONS
@@ -1118,18 +1139,24 @@ function(_add_swift_library_single target name)
1118
1139
BINARY_DIR ${SWIFT_RUNTIME_OUTPUT_INTDIR}
1119
1140
LIBRARY_DIR ${SWIFT_LIBRARY_OUTPUT_INTDIR} )
1120
1141
1142
+ if (SWIFTLIB_INSTALL_WITH_SHARED )
1143
+ set (swift_lib_dir ${SWIFTLIB_DIR} )
1144
+ else ()
1145
+ set (swift_lib_dir ${SWIFTSTATICLIB_DIR} )
1146
+ endif ()
1147
+
1121
1148
foreach (config ${CMAKE_CONFIGURATION_TYPES} )
1122
1149
string (TOUPPER ${config} config_upper )
1123
1150
escape_path_for_xcode (
1124
- "${config} " "${SWIFTSTATICLIB_DIR } " config_lib_dir )
1151
+ "${config} " "${swift_lib_dir } " config_lib_dir )
1125
1152
set_target_properties (${target_static} PROPERTIES
1126
1153
LIBRARY_OUTPUT_DIRECTORY_${config_upper} ${config_lib_dir} /${SWIFTLIB_SINGLE_SUBDIR}
1127
1154
ARCHIVE_OUTPUT_DIRECTORY_${config_upper} ${config_lib_dir} /${SWIFTLIB_SINGLE_SUBDIR} )
1128
1155
endforeach ()
1129
1156
1130
1157
set_target_properties (${target_static} PROPERTIES
1131
- LIBRARY_OUTPUT_DIRECTORY ${SWIFTSTATICLIB_DIR } /${SWIFTLIB_SINGLE_SUBDIR}
1132
- ARCHIVE_OUTPUT_DIRECTORY ${SWIFTSTATICLIB_DIR } /${SWIFTLIB_SINGLE_SUBDIR} )
1158
+ LIBRARY_OUTPUT_DIRECTORY ${swift_lib_dir } /${SWIFTLIB_SINGLE_SUBDIR}
1159
+ ARCHIVE_OUTPUT_DIRECTORY ${swift_lib_dir } /${SWIFTLIB_SINGLE_SUBDIR} )
1133
1160
endif ()
1134
1161
1135
1162
set_target_properties (${target}
@@ -1380,8 +1407,14 @@ function(_add_swift_library_single target name)
1380
1407
set_property (TARGET "${target_static} " APPEND_STRING PROPERTY
1381
1408
COMPILE_FLAGS " ${c_compile_flags} " )
1382
1409
# FIXME: The fallback paths here are going to be dynamic libraries.
1410
+
1411
+ if (SWIFTLIB_INSTALL_WITH_SHARED )
1412
+ set (search_base_dir ${SWIFTLIB_DIR} )
1413
+ else ()
1414
+ set (search_base_dir ${SWIFTSTATICLIB_DIR} )
1415
+ endif ()
1383
1416
set (library_search_directories
1384
- "${SWIFTSTATICLIB_DIR } /${SWIFTLIB_SINGLE_SUBDIR} "
1417
+ "${search_base_dir } /${SWIFTLIB_SINGLE_SUBDIR} "
1385
1418
"${SWIFT_NATIVE_SWIFT_TOOLS_PATH} /../lib/swift/${SWIFTLIB_SINGLE_SUBDIR} "
1386
1419
"${SWIFT_NATIVE_SWIFT_TOOLS_PATH} /../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK} _LIB_SUBDIR}" )
1387
1420
swift_target_link_search_directories ("${target_static} " "${library_search_directories} " )
@@ -1510,6 +1543,7 @@ endfunction()
1510
1543
# [IS_STDLIB]
1511
1544
# [IS_STDLIB_CORE]
1512
1545
# [TARGET_LIBRARY]
1546
+ # [INSTALL_WITH_SHARED]
1513
1547
# INSTALL_IN_COMPONENT comp
1514
1548
# DEPLOYMENT_VERSION_OSX version
1515
1549
# DEPLOYMENT_VERSION_IOS version
@@ -1616,6 +1650,9 @@ endfunction()
1616
1650
# DEPLOYMENT_VERSION_WATCHOS
1617
1651
# The minimum deployment version to build for if this is an WATCHOS library.
1618
1652
#
1653
+ # INSTALL_WITH_SHARED
1654
+ # Install a static library target alongside shared libraries
1655
+ #
1619
1656
# source1 ...
1620
1657
# Sources to add into this library.
1621
1658
function (add_swift_target_library name )
@@ -1630,7 +1667,8 @@ function(add_swift_target_library name)
1630
1667
OBJECT_LIBRARY
1631
1668
SHARED
1632
1669
STATIC
1633
- TARGET_LIBRARY )
1670
+ TARGET_LIBRARY
1671
+ INSTALL_WITH_SHARED )
1634
1672
set (SWIFTLIB_single_parameter_options
1635
1673
DEPLOYMENT_VERSION_IOS
1636
1674
DEPLOYMENT_VERSION_OSX
@@ -1704,7 +1742,6 @@ function(add_swift_target_library name)
1704
1742
if ("${SWIFTLIB_TARGET_SDKS} " STREQUAL "" )
1705
1743
set (SWIFTLIB_TARGET_SDKS ${SWIFT_SDKS} )
1706
1744
endif ()
1707
- list_replace (SWIFTLIB_TARGET_SDKS ALL_POSIX_PLATFORMS "ALL_APPLE_PLATFORMS;ANDROID;CYGWIN;FREEBSD;LINUX;HAIKU" )
1708
1745
list_replace (SWIFTLIB_TARGET_SDKS ALL_APPLE_PLATFORMS "${SWIFT_APPLE_PLATFORMS} " )
1709
1746
1710
1747
# All Swift code depends on the standard library, except for the standard
@@ -1858,8 +1895,13 @@ function(add_swift_target_library name)
1858
1895
list (APPEND swiftlib_link_flags_all "-Wl,-z,defs" )
1859
1896
endif ()
1860
1897
1898
+ set (sdk_supported_archs
1899
+ ${SWIFT_SDK_${sdk}_ARCHITECTURES}
1900
+ ${SWIFT_SDK_${sdk}_MODULE_ARCHITECTURES} )
1901
+ list (REMOVE_DUPLICATES sdk_supported_archs )
1902
+
1861
1903
# For each architecture supported by this SDK
1862
- foreach (arch ${SWIFT_SDK_${sdk}_ARCHITECTURES } )
1904
+ foreach (arch ${sdk_supported_archs } )
1863
1905
# Configure variables for this subdirectory.
1864
1906
set (VARIANT_SUFFIX "-${SWIFT_SDK_${sdk} _LIB_SUBDIR}-${arch} " )
1865
1907
set (VARIANT_NAME "${name}${VARIANT_SUFFIX} " )
@@ -1915,6 +1957,7 @@ function(add_swift_target_library name)
1915
1957
${SWIFTLIB_SHARED_keyword}
1916
1958
${SWIFTLIB_STATIC_keyword}
1917
1959
${SWIFTLIB_OBJECT_LIBRARY_keyword}
1960
+ ${SWIFTLIB_INSTALL_WITH_SHARED_keyword}
1918
1961
${SWIFTLIB_SOURCES}
1919
1962
MODULE_TARGET ${MODULE_VARIANT_NAME}
1920
1963
SDK ${sdk}
@@ -1980,11 +2023,38 @@ function(add_swift_target_library name)
1980
2023
endforeach ()
1981
2024
endif ()
1982
2025
1983
- # Note this thin library.
1984
- list (APPEND THIN_INPUT_TARGETS ${VARIANT_NAME} )
2026
+ if (arch IN_LIST SWIFT_SDK_${sdk}_ARCHITECTURES )
2027
+ # Note this thin library.
2028
+ list (APPEND THIN_INPUT_TARGETS ${VARIANT_NAME} )
2029
+ endif ()
1985
2030
endif ()
1986
2031
endforeach ()
1987
2032
2033
+ # Configure module-only targets
2034
+ if (NOT SWIFT_SDK_${sdk}_ARCHITECTURES
2035
+ AND SWIFT_SDK_${sdk}_MODULE_ARCHITECTURES )
2036
+ set (_target "${name} -${SWIFT_SDK_${sdk} _LIB_SUBDIR}" )
2037
+
2038
+ # Create unified sdk target
2039
+ add_custom_target ("${_target} " )
2040
+
2041
+ foreach (_arch ${SWIFT_SDK_${sdk}_MODULE_ARCHITECTURES} )
2042
+ set (_variant_suffix "-${SWIFT_SDK_${sdk} _LIB_SUBDIR}-${_arch} " )
2043
+ set (_module_variant_name "${name} -swiftmodule-${_variant_suffix} " )
2044
+
2045
+ add_dependencies ("${_target} " ${_module_variant_name} )
2046
+
2047
+ # Add Swift standard library targets as dependencies to the top-level
2048
+ # convenience target.
2049
+ if (TARGET "swift-stdlib${_variant_suffix} " )
2050
+ add_dependencies ("swift-stdlib${_variant_suffix} "
2051
+ "${_target} " )
2052
+ endif ()
2053
+ endforeach ()
2054
+
2055
+ return ()
2056
+ endif ()
2057
+
1988
2058
if (NOT SWIFTLIB_OBJECT_LIBRARY )
1989
2059
# Determine the name of the universal library.
1990
2060
if (SWIFTLIB_SHARED )
@@ -2029,7 +2099,7 @@ function(add_swift_target_library name)
2029
2099
set (resource_dir_sdk_subdir "${SWIFT_SDK_${sdk} _LIB_SUBDIR}" )
2030
2100
precondition (resource_dir_sdk_subdir )
2031
2101
2032
- if (SWIFTLIB_SHARED )
2102
+ if (SWIFTLIB_SHARED OR SWIFTLIB_INSTALL_WITH_SHARED )
2033
2103
set (resource_dir "swift" )
2034
2104
set (file_permissions
2035
2105
OWNER_READ OWNER_WRITE OWNER_EXECUTE
@@ -2075,12 +2145,35 @@ function(add_swift_target_library name)
2075
2145
endforeach ()
2076
2146
endif ()
2077
2147
2078
- swift_is_installing_component ("${SWIFTLIB_INSTALL_IN_COMPONENT} " is_installing )
2079
- if (NOT is_installing )
2080
- set_property (GLOBAL APPEND PROPERTY SWIFT_BUILDTREE_EXPORTS ${VARIANT_NAME} )
2081
- else ()
2082
- set_property (GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${VARIANT_NAME} )
2083
- endif ()
2148
+ swift_is_installing_component (
2149
+ "${SWIFTLIB_INSTALL_IN_COMPONENT} "
2150
+ is_installing )
2151
+
2152
+ # Add the arch-specific library targets to the global exports.
2153
+ foreach (arch ${SWIFT_SDK_${sdk}_ARCHITECTURES} )
2154
+ set (_variant_name "${name} -${SWIFT_SDK_${sdk} _LIB_SUBDIR}-${arch} " )
2155
+ if (NOT TARGET "${_variant_name} " )
2156
+ continue ()
2157
+ endif ()
2158
+
2159
+ if (is_installing )
2160
+ set_property (GLOBAL APPEND
2161
+ PROPERTY SWIFT_EXPORTS ${_variant_name} )
2162
+ else ()
2163
+ set_property (GLOBAL APPEND
2164
+ PROPERTY SWIFT_BUILDTREE_EXPORTS ${_variant_name} )
2165
+ endif ()
2166
+ endforeach ()
2167
+
2168
+ # Add the swiftmodule-only targets to the lipo target depdencies.
2169
+ foreach (arch ${SWIFT_SDK_${sdk}_MODULE_ARCHITECTURES} )
2170
+ set (_variant_name "${name} -${SWIFT_SDK_${sdk} _LIB_SUBDIR}-${arch} " )
2171
+ if (NOT TARGET "${_variant_name} " )
2172
+ continue ()
2173
+ endif ()
2174
+
2175
+ add_dependencies ("${lipo_target} " "${_variant_name} " )
2176
+ endforeach ()
2084
2177
2085
2178
# If we built static variants of the library, create a lipo target for
2086
2179
# them.
@@ -2091,10 +2184,18 @@ function(add_swift_target_library name)
2091
2184
list (APPEND THIN_INPUT_TARGETS_STATIC "${TARGET} -static" )
2092
2185
endforeach ()
2093
2186
2187
+ if (SWIFTLIB_INSTALL_WITH_SHARED )
2188
+ set (install_subdir "swift" )
2189
+ set (universal_subdir ${SWIFTLIB_DIR} )
2190
+ else ()
2191
+ set (install_subdir "swift_static" )
2192
+ set (universal_subdir ${SWIFTSTATICLIB_DIR} )
2193
+ endif ()
2194
+
2094
2195
set (lipo_target_static
2095
2196
"${name} -${SWIFT_SDK_${sdk} _LIB_SUBDIR}-static" )
2096
2197
set (UNIVERSAL_LIBRARY_NAME
2097
- "${SWIFTSTATICLIB_DIR } /${SWIFT_SDK_${sdk} _LIB_SUBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX} " )
2198
+ "${universal_subdir } /${SWIFT_SDK_${sdk} _LIB_SUBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX} " )
2098
2199
_add_swift_lipo_target (SDK
2099
2200
${sdk}
2100
2201
TARGET
@@ -2103,7 +2204,7 @@ function(add_swift_target_library name)
2103
2204
"${UNIVERSAL_LIBRARY_NAME} "
2104
2205
${THIN_INPUT_TARGETS_STATIC} )
2105
2206
swift_install_in_component (FILES "${UNIVERSAL_LIBRARY_NAME} "
2106
- DESTINATION "lib${LLVM_LIBDIR_SUFFIX} /swift_static /${resource_dir_sdk_subdir} "
2207
+ DESTINATION "lib${LLVM_LIBDIR_SUFFIX} /${install_subdir} /${resource_dir_sdk_subdir} "
2107
2208
PERMISSIONS
2108
2209
OWNER_READ OWNER_WRITE
2109
2210
GROUP_READ
0 commit comments