Skip to content

Commit 9a04225

Browse files
authored
Merge pull request #19491 from compnerd/simplify-add-library
[CMake] Simplify add_swift_library
2 parents e0e75ea + 7974e39 commit 9a04225

File tree

1 file changed

+141
-152
lines changed

1 file changed

+141
-152
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 141 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,34 +1541,21 @@ function(add_swift_library name)
15411541
# library itself.
15421542
if(SWIFTLIB_HAS_SWIFT_CONTENT AND NOT SWIFTLIB_IS_STDLIB_CORE)
15431543
list(APPEND SWIFTLIB_SWIFT_MODULE_DEPENDS Core)
1544-
endif()
15451544

1546-
if((NOT "${SWIFT_BUILD_STDLIB}") AND
1547-
(NOT "${SWIFTLIB_SWIFT_MODULE_DEPENDS}" STREQUAL ""))
1548-
list(REMOVE_ITEM SWIFTLIB_SWIFT_MODULE_DEPENDS
1549-
Core)
1550-
endif()
1551-
1552-
if(SWIFTLIB_HAS_SWIFT_CONTENT AND NOT SWIFTLIB_IS_STDLIB_CORE)
1553-
# All Swift code depends on the SwiftOnoneSupport in non-optimized mode,
1554-
# except for the standard library itself.
1555-
is_build_type_optimized("${SWIFT_STDLIB_BUILD_TYPE}" optimized)
1556-
if(NOT optimized)
1557-
list(APPEND SWIFTLIB_SWIFT_MODULE_DEPENDS SwiftOnoneSupport)
1545+
# swiftSwiftOnoneSupport does not depend on itself, obviously.
1546+
if(NOT ${name} STREQUAL swiftSwiftOnoneSupport)
1547+
# All Swift code depends on the SwiftOnoneSupport in non-optimized mode,
1548+
# except for the standard library itself.
1549+
is_build_type_optimized("${SWIFT_STDLIB_BUILD_TYPE}" optimized)
1550+
if(NOT optimized)
1551+
list(APPEND SWIFTLIB_SWIFT_MODULE_DEPENDS SwiftOnoneSupport)
1552+
endif()
15581553
endif()
15591554
endif()
15601555

15611556
if((NOT "${SWIFT_BUILD_STDLIB}") AND
1562-
(NOT "${SWIFTLIB_SWIFT_MODULE_DEPENDS}" STREQUAL ""))
1563-
list(REMOVE_ITEM SWIFTLIB_SWIFT_MODULE_DEPENDS
1564-
SwiftOnoneSupport)
1565-
endif()
1566-
1567-
# swiftSwiftOnoneSupport does not depend on itself,
1568-
# obviously.
1569-
if("${name}" STREQUAL "swiftSwiftOnoneSupport")
1570-
list(REMOVE_ITEM SWIFTLIB_SWIFT_MODULE_DEPENDS
1571-
SwiftOnoneSupport)
1557+
(NOT "${SWIFTLIB_SWIFT_MODULE_DEPENDS}" STREQUAL ""))
1558+
list(REMOVE_ITEM SWIFTLIB_SWIFT_MODULE_DEPENDS Core SwiftOnoneSupport)
15721559
endif()
15731560

15741561
translate_flags(SWIFTLIB "${SWIFTLIB_options}")
@@ -1611,6 +1598,98 @@ function(add_swift_library name)
16111598

16121599
set(THIN_INPUT_TARGETS)
16131600

1601+
# Collect architecture agnostic SDK module dependencies
1602+
set(swiftlib_module_depends_flattened ${SWIFTLIB_SWIFT_MODULE_DEPENDS})
1603+
if(${sdk} STREQUAL OSX)
1604+
list(APPEND swiftlib_module_depends_flattened
1605+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_OSX})
1606+
elseif(${sdk} STREQUAL IOS OR ${sdk} STREQUAL IOS_SIMULATOR)
1607+
list(APPEND swiftlib_module_depends_flattened
1608+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_IOS})
1609+
elseif(${sdk} STREQUAL TVOS OR ${sdk} STREQUAL TVOS_SIMULATOR)
1610+
list(APPEND swiftlib_module_depends_flattened
1611+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_TVOS})
1612+
elseif(${sdk} STREQUAL WATCHOS OR ${sdk} STREQUAL WATCHOS_SIMULATOR)
1613+
list(APPEND swiftlib_module_depends_flattened
1614+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_WATCHOS})
1615+
elseif(${sdk} STREQUAL FREEBSD)
1616+
list(APPEND swiftlib_module_depends_flattened
1617+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_FREEBSD})
1618+
elseif(${sdk} STREQUAL LINUX OR ${sdk} STREQUAL ANDROID)
1619+
list(APPEND swiftlib_module_depends_flattened
1620+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX})
1621+
elseif(${sdk} STREQUAL CYGWIN)
1622+
list(APPEND swiftlib_module_depends_flattened
1623+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN})
1624+
elseif(${sdk} STREQUAL HAIKU)
1625+
list(APPEND swiftlib_module_depends_flattened
1626+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_HAIKU})
1627+
endif()
1628+
1629+
# Collect architecture agnostic SDK framework dependencies
1630+
set(swiftlib_framework_depends_flattened ${SWIFTLIB_FRAMEWORK_DEPENDS})
1631+
if(${sdk} STREQUAL OSX)
1632+
list(APPEND swiftlib_framework_depends_flattened
1633+
${SWIFTLIB_FRAMEWORK_DEPENDS_OSX})
1634+
elseif(${sdk} STREQUAL IOS OR ${sdk} STREQUAL IOS_SIMULATOR OR
1635+
${sdk} STREQUAL TVOS OR ${sdk} STREQUAL TVOS_SIMULATOR)
1636+
list(APPEND swiftlib_framework_depends_flattened
1637+
${SWIFTLIB_FRAMEWORK_DEPENDS_IOS_TVOS})
1638+
endif()
1639+
1640+
# Collect architecutre agnostic compiler flags
1641+
set(swiftlib_swift_compile_flags_all ${SWIFTLIB_SWIFT_COMPILE_FLAGS})
1642+
if(${sdk} STREQUAL OSX)
1643+
list(APPEND swiftlib_swift_compile_flags_all
1644+
${SWIFTLIB_SWIFT_COMPILE_FLAGS_OSX})
1645+
elseif(${sdk} STREQUAL IOS OR ${sdk} STREQUAL IOS_SIMULATOR)
1646+
list(APPEND swiftlib_swift_compile_flags_all
1647+
${SWIFTLIB_SWIFT_COMPILE_FLAGS_IOS})
1648+
elseif(${sdk} STREQUAL TVOS OR ${sdk} STREQUAL TVOS_SIMULATOR)
1649+
list(APPEND swiftlib_swift_compile_flags_all
1650+
${SWIFTLIB_SWIFT_COMPILE_FLAGS_TVOS})
1651+
elseif(${sdk} STREQUAL WATCHOS OR ${sdk} STREQUAL WATCHOS_SIMULATOR)
1652+
list(APPEND swiftlib_swift_compile_flags_all
1653+
${SWIFTLIB_SWIFT_COMPILE_FLAGS_WATCHOS})
1654+
elseif(${sdk} STREQUAL WINDOWS)
1655+
# FIXME(SR2005) static and shared are not mutually exclusive; however
1656+
# since we do a single build of the sources, this doesn't work for
1657+
# building both simultaneously. Effectively, only shared builds are
1658+
# supported on windows currently.
1659+
if(SWIFTLIB_SHARED)
1660+
list(APPEND swiftlib_swift_compile_flags_all -D_USRDLL)
1661+
if(SWIFTLIB_IS_STDLIB_CORE)
1662+
list(APPEND swiftlib_swift_compile_flags_all -DswiftCore_EXPORTS)
1663+
endif()
1664+
elseif(SWIFTLIB_STATIC)
1665+
list(APPEND swiftlib_swift_compile_flags_all -D_LIB)
1666+
endif()
1667+
endif()
1668+
1669+
1670+
# Collect architecture agnostic SDK linker flags
1671+
set(swiftlib_link_flags_all ${SWIFTLIB_LINK_FLAGS})
1672+
if(${sdk} STREQUAL IOS_SIMULATOR)
1673+
if(${name} STREQUAL swiftMediaPlayer)
1674+
# message("DISABLING AUTOLINK FOR swiftMediaPlayer")
1675+
list(APPEND swiftlib_link_flags_all "-Xlinker" "-ignore_auto_link")
1676+
endif()
1677+
endif()
1678+
1679+
# We unconditionally removed "-z,defs" from CMAKE_SHARED_LINKER_FLAGS in
1680+
# swift_common_standalone_build_config_llvm within
1681+
# SwiftSharedCMakeConfig.cmake, where it was added by a call to
1682+
# HandleLLVMOptions.
1683+
#
1684+
# Rather than applying it to all targets and libraries, we here add it
1685+
# back to supported targets and libraries only. This is needed for ELF
1686+
# targets only; however, RemoteMirror needs to build with undefined
1687+
# symbols.
1688+
if(${SWIFT_SDK_${sdk}_OBJECT_FORMAT} STREQUAL ELF AND
1689+
NOT ${name} STREQUAL swiftRemoteMirror)
1690+
list(APPEND swiftlib_link_flags_all "-Wl,-z,defs")
1691+
endif()
1692+
16141693
# For each architecture supported by this SDK
16151694
foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES})
16161695
# Configure variables for this subdirectory.
@@ -1629,33 +1708,6 @@ function(add_swift_library name)
16291708
endif()
16301709
endforeach()
16311710

1632-
set(swiftlib_module_depends_flattened ${SWIFTLIB_SWIFT_MODULE_DEPENDS})
1633-
if("${sdk}" STREQUAL "OSX")
1634-
list(APPEND swiftlib_module_depends_flattened
1635-
${SWIFTLIB_SWIFT_MODULE_DEPENDS_OSX})
1636-
elseif("${sdk}" STREQUAL "IOS" OR "${sdk}" STREQUAL "IOS_SIMULATOR")
1637-
list(APPEND swiftlib_module_depends_flattened
1638-
${SWIFTLIB_SWIFT_MODULE_DEPENDS_IOS})
1639-
elseif("${sdk}" STREQUAL "TVOS" OR "${sdk}" STREQUAL "TVOS_SIMULATOR")
1640-
list(APPEND swiftlib_module_depends_flattened
1641-
${SWIFTLIB_SWIFT_MODULE_DEPENDS_TVOS})
1642-
elseif("${sdk}" STREQUAL "WATCHOS" OR "${sdk}" STREQUAL "WATCHOS_SIMULATOR")
1643-
list(APPEND swiftlib_module_depends_flattened
1644-
${SWIFTLIB_SWIFT_MODULE_DEPENDS_WATCHOS})
1645-
elseif("${sdk}" STREQUAL "FREEBSD")
1646-
list(APPEND swiftlib_module_depends_flattened
1647-
${SWIFTLIB_SWIFT_MODULE_DEPENDS_FREEBSD})
1648-
elseif("${sdk}" STREQUAL "LINUX" OR "${sdk}" STREQUAL "ANDROID")
1649-
list(APPEND swiftlib_module_depends_flattened
1650-
${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX})
1651-
elseif("${sdk}" STREQUAL "CYGWIN")
1652-
list(APPEND swiftlib_module_depends_flattened
1653-
${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN})
1654-
elseif("${sdk}" STREQUAL "HAIKU")
1655-
list(APPEND swiftlib_module_depends_flattened
1656-
${SWIFTLIB_SWIFT_MODULE_DEPENDS_HAIKU})
1657-
endif()
1658-
16591711
# Swift compiles depend on swift modules, while links depend on
16601712
# linked libraries. Find targets for both of these here.
16611713
set(swiftlib_module_dependency_targets)
@@ -1697,69 +1749,10 @@ function(add_swift_library name)
16971749
endif()
16981750
endforeach()
16991751

1700-
set(swiftlib_framework_depends_flattened ${SWIFTLIB_FRAMEWORK_DEPENDS})
1701-
if("${sdk}" STREQUAL "OSX")
1702-
list(APPEND swiftlib_framework_depends_flattened
1703-
${SWIFTLIB_FRAMEWORK_DEPENDS_OSX})
1704-
elseif("${sdk}" STREQUAL "IOS" OR "${sdk}" STREQUAL "IOS_SIMULATOR" OR "${sdk}" STREQUAL "TVOS" OR "${sdk}" STREQUAL "TVOS_SIMULATOR")
1705-
list(APPEND swiftlib_framework_depends_flattened
1706-
${SWIFTLIB_FRAMEWORK_DEPENDS_IOS_TVOS})
1707-
endif()
1708-
1709-
# Collect compiler flags
1710-
set(swiftlib_swift_compile_flags_all ${SWIFTLIB_SWIFT_COMPILE_FLAGS})
1711-
if("${sdk}" STREQUAL "OSX")
1712-
list(APPEND swiftlib_swift_compile_flags_all
1713-
${SWIFTLIB_SWIFT_COMPILE_FLAGS_OSX})
1714-
elseif("${sdk}" STREQUAL "IOS" OR "${sdk}" STREQUAL "IOS_SIMULATOR")
1715-
list(APPEND swiftlib_swift_compile_flags_all
1716-
${SWIFTLIB_SWIFT_COMPILE_FLAGS_IOS})
1717-
elseif("${sdk}" STREQUAL "TVOS" OR "${sdk}" STREQUAL "TVOS_SIMULATOR")
1718-
list(APPEND swiftlib_swift_compile_flags_all
1719-
${SWIFTLIB_SWIFT_COMPILE_FLAGS_TVOS})
1720-
elseif("${sdk}" STREQUAL "WATCHOS" OR "${sdk}" STREQUAL "WATCHOS_SIMULATOR")
1721-
list(APPEND swiftlib_swift_compile_flags_all
1722-
${SWIFTLIB_SWIFT_COMPILE_FLAGS_WATCHOS})
1723-
elseif("${sdk}" STREQUAL "WINDOWS")
1724-
# FIXME(SR2005) static and shared are not mutually exclusive; however
1725-
# since we do a single build of the sources, this doesn't work for
1726-
# building both simultaneously. Effectively, only shared builds are
1727-
# supported on windows currently.
1728-
if(SWIFTLIB_SHARED)
1729-
list(APPEND swiftlib_swift_compile_flags_all -D_USRDLL)
1730-
if(SWIFTLIB_IS_STDLIB_CORE)
1731-
list(APPEND swiftlib_swift_compile_flags_all -DswiftCore_EXPORTS)
1732-
endif()
1733-
elseif(SWIFTLIB_STATIC)
1734-
list(APPEND swiftlib_swift_compile_flags_all -D_LIB)
1735-
endif()
1736-
endif()
1737-
17381752
# Add PrivateFrameworks, rdar://28466433
1739-
set(swiftlib_link_flags_all ${SWIFTLIB_LINK_FLAGS})
17401753
if(SWIFTLIB_IS_SDK_OVERLAY)
1741-
list(APPEND swiftlib_swift_compile_flags_all "-Fsystem" "${SWIFT_SDK_${sdk}_ARCH_${arch}_PATH}/System/Library/PrivateFrameworks/")
1754+
set(swiftlib_swift_compile_private_frameworks_flag "-Fsystem" "${SWIFT_SDK_${sdk}_ARCH_${arch}_PATH}/System/Library/PrivateFrameworks/")
17421755
endif()
1743-
1744-
if("${sdk}" STREQUAL "IOS_SIMULATOR")
1745-
if("${name}" STREQUAL "swiftMediaPlayer")
1746-
message("DISABLING AUTOLINK FOR swiftMediaPlayer")
1747-
list(APPEND swiftlib_link_flags_all "-Xlinker" "-ignore_auto_link")
1748-
endif()
1749-
endif()
1750-
1751-
# We unconditionally removed "-z,defs" from CMAKE_SHARED_LINKER_FLAGS in
1752-
# swift_common_standalone_build_config_llvm within SwiftSharedCMakeConfig.cmake,
1753-
# where it was added by a call to HandleLLVMOptions.
1754-
#
1755-
# Rather than applying it to all targets and libraries, we here add it back to
1756-
# supported targets and libraries only.
1757-
# This is needed for ELF targets only; however, RemoteMirror needs to build
1758-
# with undefined symbols.
1759-
if("${SWIFT_SDK_${LFLAGS_SDK}_OBJECT_FORMAT}" STREQUAL "ELF"
1760-
AND NOT "${name}" STREQUAL "swiftRemoteMirror")
1761-
list(APPEND swiftlib_link_flags_all "-Wl,-z,defs")
1762-
endif()
17631756

17641757
# Add this library variant.
17651758
_add_swift_library_single(
@@ -1779,7 +1772,7 @@ function(add_swift_library name)
17791772
LLVM_COMPONENT_DEPENDS ${SWIFTLIB_LLVM_COMPONENT_DEPENDS}
17801773
FILE_DEPENDS ${SWIFTLIB_FILE_DEPENDS} ${swiftlib_module_dependency_targets}
17811774
C_COMPILE_FLAGS ${SWIFTLIB_C_COMPILE_FLAGS}
1782-
SWIFT_COMPILE_FLAGS ${swiftlib_swift_compile_flags_all}
1775+
SWIFT_COMPILE_FLAGS ${swiftlib_swift_compile_flags_all} ${swiftlib_swift_compile_private_frameworks_flag}
17831776
LINK_FLAGS ${swiftlib_link_flags_all}
17841777
PRIVATE_LINK_LIBRARIES ${swiftlib_private_link_libraries_targets}
17851778
INCORPORATE_OBJECT_LIBRARIES ${SWIFTLIB_INCORPORATE_OBJECT_LIBRARIES}
@@ -1868,32 +1861,30 @@ function(add_swift_library name)
18681861
set(resource_dir_sdk_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
18691862
precondition(resource_dir_sdk_subdir)
18701863

1871-
if(SWIFTLIB_TARGET_LIBRARY)
1872-
if(SWIFTLIB_SHARED)
1873-
set(resource_dir "swift")
1874-
set(file_permissions
1875-
OWNER_READ OWNER_WRITE OWNER_EXECUTE
1876-
GROUP_READ GROUP_EXECUTE
1877-
WORLD_READ WORLD_EXECUTE)
1878-
else()
1879-
set(resource_dir "swift_static")
1880-
set(file_permissions
1881-
OWNER_READ OWNER_WRITE
1882-
GROUP_READ
1883-
WORLD_READ)
1884-
endif()
1864+
if(SWIFTLIB_SHARED)
1865+
set(resource_dir "swift")
1866+
set(file_permissions
1867+
OWNER_READ OWNER_WRITE OWNER_EXECUTE
1868+
GROUP_READ GROUP_EXECUTE
1869+
WORLD_READ WORLD_EXECUTE)
1870+
else()
1871+
set(resource_dir "swift_static")
1872+
set(file_permissions
1873+
OWNER_READ OWNER_WRITE
1874+
GROUP_READ
1875+
WORLD_READ)
1876+
endif()
18851877

1886-
swift_install_in_component("${SWIFTLIB_INSTALL_IN_COMPONENT}"
1887-
FILES "${UNIVERSAL_LIBRARY_NAME}"
1888-
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${resource_dir}/${resource_dir_sdk_subdir}"
1889-
PERMISSIONS ${file_permissions})
1890-
swift_is_installing_component("${SWIFTLIB_INSTALL_IN_COMPONENT}" is_installing)
1878+
swift_install_in_component("${SWIFTLIB_INSTALL_IN_COMPONENT}"
1879+
FILES "${UNIVERSAL_LIBRARY_NAME}"
1880+
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${resource_dir}/${resource_dir_sdk_subdir}"
1881+
PERMISSIONS ${file_permissions})
1882+
swift_is_installing_component("${SWIFTLIB_INSTALL_IN_COMPONENT}" is_installing)
18911883

1892-
if(NOT is_installing)
1893-
set_property(GLOBAL APPEND PROPERTY SWIFT_BUILDTREE_EXPORTS ${VARIANT_NAME})
1894-
else()
1895-
set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${VARIANT_NAME})
1896-
endif()
1884+
if(NOT is_installing)
1885+
set_property(GLOBAL APPEND PROPERTY SWIFT_BUILDTREE_EXPORTS ${VARIANT_NAME})
1886+
else()
1887+
set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${VARIANT_NAME})
18971888
endif()
18981889

18991890
# If we built static variants of the library, create a lipo target for
@@ -1927,26 +1918,24 @@ function(add_swift_library name)
19271918

19281919
# Add Swift standard library targets as dependencies to the top-level
19291920
# convenience target.
1930-
if(SWIFTLIB_TARGET_LIBRARY)
1931-
set(FILTERED_UNITTESTS
1932-
swiftStdlibCollectionUnittest
1933-
swiftStdlibUnicodeUnittest)
1934-
1935-
foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES})
1936-
set(VARIANT_SUFFIX "-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
1937-
if(TARGET "swift-stdlib${VARIANT_SUFFIX}" AND
1938-
TARGET "swift-test-stdlib${VARIANT_SUFFIX}")
1939-
add_dependencies("swift-stdlib${VARIANT_SUFFIX}"
1921+
set(FILTERED_UNITTESTS
1922+
swiftStdlibCollectionUnittest
1923+
swiftStdlibUnicodeUnittest)
1924+
1925+
foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES})
1926+
set(VARIANT_SUFFIX "-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
1927+
if(TARGET "swift-stdlib${VARIANT_SUFFIX}" AND
1928+
TARGET "swift-test-stdlib${VARIANT_SUFFIX}")
1929+
add_dependencies("swift-stdlib${VARIANT_SUFFIX}"
1930+
${lipo_target}
1931+
${lipo_target_static})
1932+
if(NOT "${name}" IN_LIST FILTERED_UNITTESTS)
1933+
add_dependencies("swift-test-stdlib${VARIANT_SUFFIX}"
19401934
${lipo_target}
19411935
${lipo_target_static})
1942-
if(NOT "${name}" IN_LIST FILTERED_UNITTESTS)
1943-
add_dependencies("swift-test-stdlib${VARIANT_SUFFIX}"
1944-
${lipo_target}
1945-
${lipo_target_static})
1946-
endif()
19471936
endif()
1948-
endforeach()
1949-
endif()
1937+
endif()
1938+
endforeach()
19501939
endif()
19511940
endforeach()
19521941
else()

0 commit comments

Comments
 (0)