diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake index a075445b5df29..e23204f937e7a 100644 --- a/cmake/modules/AddSwift.cmake +++ b/cmake/modules/AddSwift.cmake @@ -1536,34 +1536,21 @@ function(add_swift_library name) # library itself. if(SWIFTLIB_HAS_SWIFT_CONTENT AND NOT SWIFTLIB_IS_STDLIB_CORE) list(APPEND SWIFTLIB_SWIFT_MODULE_DEPENDS Core) - endif() - if((NOT "${SWIFT_BUILD_STDLIB}") AND - (NOT "${SWIFTLIB_SWIFT_MODULE_DEPENDS}" STREQUAL "")) - list(REMOVE_ITEM SWIFTLIB_SWIFT_MODULE_DEPENDS - Core) - endif() - - if(SWIFTLIB_HAS_SWIFT_CONTENT AND NOT SWIFTLIB_IS_STDLIB_CORE) - # All Swift code depends on the SwiftOnoneSupport in non-optimized mode, - # except for the standard library itself. - is_build_type_optimized("${SWIFT_STDLIB_BUILD_TYPE}" optimized) - if(NOT optimized) - list(APPEND SWIFTLIB_SWIFT_MODULE_DEPENDS SwiftOnoneSupport) + # swiftSwiftOnoneSupport does not depend on itself, obviously. + if(NOT ${name} STREQUAL swiftSwiftOnoneSupport) + # All Swift code depends on the SwiftOnoneSupport in non-optimized mode, + # except for the standard library itself. + is_build_type_optimized("${SWIFT_STDLIB_BUILD_TYPE}" optimized) + if(NOT optimized) + list(APPEND SWIFTLIB_SWIFT_MODULE_DEPENDS SwiftOnoneSupport) + endif() endif() endif() if((NOT "${SWIFT_BUILD_STDLIB}") AND - (NOT "${SWIFTLIB_SWIFT_MODULE_DEPENDS}" STREQUAL "")) - list(REMOVE_ITEM SWIFTLIB_SWIFT_MODULE_DEPENDS - SwiftOnoneSupport) - endif() - - # swiftSwiftOnoneSupport does not depend on itself, - # obviously. - if("${name}" STREQUAL "swiftSwiftOnoneSupport") - list(REMOVE_ITEM SWIFTLIB_SWIFT_MODULE_DEPENDS - SwiftOnoneSupport) + (NOT "${SWIFTLIB_SWIFT_MODULE_DEPENDS}" STREQUAL "")) + list(REMOVE_ITEM SWIFTLIB_SWIFT_MODULE_DEPENDS Core SwiftOnoneSupport) endif() translate_flags(SWIFTLIB "${SWIFTLIB_options}") @@ -1606,6 +1593,98 @@ function(add_swift_library name) set(THIN_INPUT_TARGETS) + # Collect architecture agnostic SDK module dependencies + set(swiftlib_module_depends_flattened ${SWIFTLIB_SWIFT_MODULE_DEPENDS}) + if(${sdk} STREQUAL OSX) + list(APPEND swiftlib_module_depends_flattened + ${SWIFTLIB_SWIFT_MODULE_DEPENDS_OSX}) + elseif(${sdk} STREQUAL IOS OR ${sdk} STREQUAL IOS_SIMULATOR) + list(APPEND swiftlib_module_depends_flattened + ${SWIFTLIB_SWIFT_MODULE_DEPENDS_IOS}) + elseif(${sdk} STREQUAL TVOS OR ${sdk} STREQUAL TVOS_SIMULATOR) + list(APPEND swiftlib_module_depends_flattened + ${SWIFTLIB_SWIFT_MODULE_DEPENDS_TVOS}) + elseif(${sdk} STREQUAL WATCHOS OR ${sdk} STREQUAL WATCHOS_SIMULATOR) + list(APPEND swiftlib_module_depends_flattened + ${SWIFTLIB_SWIFT_MODULE_DEPENDS_WATCHOS}) + elseif(${sdk} STREQUAL FREEBSD) + list(APPEND swiftlib_module_depends_flattened + ${SWIFTLIB_SWIFT_MODULE_DEPENDS_FREEBSD}) + elseif(${sdk} STREQUAL LINUX OR ${sdk} STREQUAL ANDROID) + list(APPEND swiftlib_module_depends_flattened + ${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX}) + elseif(${sdk} STREQUAL CYGWIN) + list(APPEND swiftlib_module_depends_flattened + ${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN}) + elseif(${sdk} STREQUAL HAIKU) + list(APPEND swiftlib_module_depends_flattened + ${SWIFTLIB_SWIFT_MODULE_DEPENDS_HAIKU}) + endif() + + # Collect architecture agnostic SDK framework dependencies + set(swiftlib_framework_depends_flattened ${SWIFTLIB_FRAMEWORK_DEPENDS}) + if(${sdk} STREQUAL OSX) + list(APPEND swiftlib_framework_depends_flattened + ${SWIFTLIB_FRAMEWORK_DEPENDS_OSX}) + elseif(${sdk} STREQUAL IOS OR ${sdk} STREQUAL IOS_SIMULATOR OR + ${sdk} STREQUAL TVOS OR ${sdk} STREQUAL TVOS_SIMULATOR) + list(APPEND swiftlib_framework_depends_flattened + ${SWIFTLIB_FRAMEWORK_DEPENDS_IOS_TVOS}) + endif() + + # Collect architecutre agnostic compiler flags + set(swiftlib_swift_compile_flags_all ${SWIFTLIB_SWIFT_COMPILE_FLAGS}) + if(${sdk} STREQUAL OSX) + list(APPEND swiftlib_swift_compile_flags_all + ${SWIFTLIB_SWIFT_COMPILE_FLAGS_OSX}) + elseif(${sdk} STREQUAL IOS OR ${sdk} STREQUAL IOS_SIMULATOR) + list(APPEND swiftlib_swift_compile_flags_all + ${SWIFTLIB_SWIFT_COMPILE_FLAGS_IOS}) + elseif(${sdk} STREQUAL TVOS OR ${sdk} STREQUAL TVOS_SIMULATOR) + list(APPEND swiftlib_swift_compile_flags_all + ${SWIFTLIB_SWIFT_COMPILE_FLAGS_TVOS}) + elseif(${sdk} STREQUAL WATCHOS OR ${sdk} STREQUAL WATCHOS_SIMULATOR) + list(APPEND swiftlib_swift_compile_flags_all + ${SWIFTLIB_SWIFT_COMPILE_FLAGS_WATCHOS}) + elseif(${sdk} STREQUAL WINDOWS) + # FIXME(SR2005) static and shared are not mutually exclusive; however + # since we do a single build of the sources, this doesn't work for + # building both simultaneously. Effectively, only shared builds are + # supported on windows currently. + if(SWIFTLIB_SHARED) + list(APPEND swiftlib_swift_compile_flags_all -D_USRDLL) + if(SWIFTLIB_IS_STDLIB_CORE) + list(APPEND swiftlib_swift_compile_flags_all -DswiftCore_EXPORTS) + endif() + elseif(SWIFTLIB_STATIC) + list(APPEND swiftlib_swift_compile_flags_all -D_LIB) + endif() + endif() + + + # Collect architecture agnostic SDK linker flags + set(swiftlib_link_flags_all ${SWIFTLIB_LINK_FLAGS}) + if(${sdk} STREQUAL IOS_SIMULATOR) + if(${name} STREQUAL swiftMediaPlayer) + # message("DISABLING AUTOLINK FOR swiftMediaPlayer") + list(APPEND swiftlib_link_flags_all "-Xlinker" "-ignore_auto_link") + endif() + endif() + + # We unconditionally removed "-z,defs" from CMAKE_SHARED_LINKER_FLAGS in + # swift_common_standalone_build_config_llvm within + # SwiftSharedCMakeConfig.cmake, where it was added by a call to + # HandleLLVMOptions. + # + # Rather than applying it to all targets and libraries, we here add it + # back to supported targets and libraries only. This is needed for ELF + # targets only; however, RemoteMirror needs to build with undefined + # symbols. + if(${SWIFT_SDK_${sdk}_OBJECT_FORMAT} STREQUAL ELF AND + NOT ${name} STREQUAL swiftRemoteMirror) + list(APPEND swiftlib_link_flags_all "-Wl,-z,defs") + endif() + # For each architecture supported by this SDK foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES}) # Configure variables for this subdirectory. @@ -1624,33 +1703,6 @@ function(add_swift_library name) endif() endforeach() - set(swiftlib_module_depends_flattened ${SWIFTLIB_SWIFT_MODULE_DEPENDS}) - if("${sdk}" STREQUAL "OSX") - list(APPEND swiftlib_module_depends_flattened - ${SWIFTLIB_SWIFT_MODULE_DEPENDS_OSX}) - elseif("${sdk}" STREQUAL "IOS" OR "${sdk}" STREQUAL "IOS_SIMULATOR") - list(APPEND swiftlib_module_depends_flattened - ${SWIFTLIB_SWIFT_MODULE_DEPENDS_IOS}) - elseif("${sdk}" STREQUAL "TVOS" OR "${sdk}" STREQUAL "TVOS_SIMULATOR") - list(APPEND swiftlib_module_depends_flattened - ${SWIFTLIB_SWIFT_MODULE_DEPENDS_TVOS}) - elseif("${sdk}" STREQUAL "WATCHOS" OR "${sdk}" STREQUAL "WATCHOS_SIMULATOR") - list(APPEND swiftlib_module_depends_flattened - ${SWIFTLIB_SWIFT_MODULE_DEPENDS_WATCHOS}) - elseif("${sdk}" STREQUAL "FREEBSD") - list(APPEND swiftlib_module_depends_flattened - ${SWIFTLIB_SWIFT_MODULE_DEPENDS_FREEBSD}) - elseif("${sdk}" STREQUAL "LINUX" OR "${sdk}" STREQUAL "ANDROID") - list(APPEND swiftlib_module_depends_flattened - ${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX}) - elseif("${sdk}" STREQUAL "CYGWIN") - list(APPEND swiftlib_module_depends_flattened - ${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN}) - elseif("${sdk}" STREQUAL "HAIKU") - list(APPEND swiftlib_module_depends_flattened - ${SWIFTLIB_SWIFT_MODULE_DEPENDS_HAIKU}) - endif() - # Swift compiles depend on swift modules, while links depend on # linked libraries. Find targets for both of these here. set(swiftlib_module_dependency_targets) @@ -1692,69 +1744,10 @@ function(add_swift_library name) endif() endforeach() - set(swiftlib_framework_depends_flattened ${SWIFTLIB_FRAMEWORK_DEPENDS}) - if("${sdk}" STREQUAL "OSX") - list(APPEND swiftlib_framework_depends_flattened - ${SWIFTLIB_FRAMEWORK_DEPENDS_OSX}) - elseif("${sdk}" STREQUAL "IOS" OR "${sdk}" STREQUAL "IOS_SIMULATOR" OR "${sdk}" STREQUAL "TVOS" OR "${sdk}" STREQUAL "TVOS_SIMULATOR") - list(APPEND swiftlib_framework_depends_flattened - ${SWIFTLIB_FRAMEWORK_DEPENDS_IOS_TVOS}) - endif() - - # Collect compiler flags - set(swiftlib_swift_compile_flags_all ${SWIFTLIB_SWIFT_COMPILE_FLAGS}) - if("${sdk}" STREQUAL "OSX") - list(APPEND swiftlib_swift_compile_flags_all - ${SWIFTLIB_SWIFT_COMPILE_FLAGS_OSX}) - elseif("${sdk}" STREQUAL "IOS" OR "${sdk}" STREQUAL "IOS_SIMULATOR") - list(APPEND swiftlib_swift_compile_flags_all - ${SWIFTLIB_SWIFT_COMPILE_FLAGS_IOS}) - elseif("${sdk}" STREQUAL "TVOS" OR "${sdk}" STREQUAL "TVOS_SIMULATOR") - list(APPEND swiftlib_swift_compile_flags_all - ${SWIFTLIB_SWIFT_COMPILE_FLAGS_TVOS}) - elseif("${sdk}" STREQUAL "WATCHOS" OR "${sdk}" STREQUAL "WATCHOS_SIMULATOR") - list(APPEND swiftlib_swift_compile_flags_all - ${SWIFTLIB_SWIFT_COMPILE_FLAGS_WATCHOS}) - elseif("${sdk}" STREQUAL "WINDOWS") - # FIXME(SR2005) static and shared are not mutually exclusive; however - # since we do a single build of the sources, this doesn't work for - # building both simultaneously. Effectively, only shared builds are - # supported on windows currently. - if(SWIFTLIB_SHARED) - list(APPEND swiftlib_swift_compile_flags_all -D_USRDLL) - if(SWIFTLIB_IS_STDLIB_CORE) - list(APPEND swiftlib_swift_compile_flags_all -DswiftCore_EXPORTS) - endif() - elseif(SWIFTLIB_STATIC) - list(APPEND swiftlib_swift_compile_flags_all -D_LIB) - endif() - endif() - # Add PrivateFrameworks, rdar://28466433 - set(swiftlib_link_flags_all ${SWIFTLIB_LINK_FLAGS}) if(SWIFTLIB_IS_SDK_OVERLAY) - list(APPEND swiftlib_swift_compile_flags_all "-Fsystem" "${SWIFT_SDK_${sdk}_ARCH_${arch}_PATH}/System/Library/PrivateFrameworks/") + set(swiftlib_swift_compile_private_frameworks_flag "-Fsystem" "${SWIFT_SDK_${sdk}_ARCH_${arch}_PATH}/System/Library/PrivateFrameworks/") endif() - - if("${sdk}" STREQUAL "IOS_SIMULATOR") - if("${name}" STREQUAL "swiftMediaPlayer") - message("DISABLING AUTOLINK FOR swiftMediaPlayer") - list(APPEND swiftlib_link_flags_all "-Xlinker" "-ignore_auto_link") - endif() - endif() - - # We unconditionally removed "-z,defs" from CMAKE_SHARED_LINKER_FLAGS in - # swift_common_standalone_build_config_llvm within SwiftSharedCMakeConfig.cmake, - # where it was added by a call to HandleLLVMOptions. - # - # Rather than applying it to all targets and libraries, we here add it back to - # supported targets and libraries only. - # This is needed for ELF targets only; however, RemoteMirror needs to build - # with undefined symbols. - if("${SWIFT_SDK_${LFLAGS_SDK}_OBJECT_FORMAT}" STREQUAL "ELF" - AND NOT "${name}" STREQUAL "swiftRemoteMirror") - list(APPEND swiftlib_link_flags_all "-Wl,-z,defs") - endif() # Add this library variant. _add_swift_library_single( @@ -1774,7 +1767,7 @@ function(add_swift_library name) LLVM_COMPONENT_DEPENDS ${SWIFTLIB_LLVM_COMPONENT_DEPENDS} FILE_DEPENDS ${SWIFTLIB_FILE_DEPENDS} ${swiftlib_module_dependency_targets} C_COMPILE_FLAGS ${SWIFTLIB_C_COMPILE_FLAGS} - SWIFT_COMPILE_FLAGS ${swiftlib_swift_compile_flags_all} + SWIFT_COMPILE_FLAGS ${swiftlib_swift_compile_flags_all} ${swiftlib_swift_compile_private_frameworks_flag} LINK_FLAGS ${swiftlib_link_flags_all} PRIVATE_LINK_LIBRARIES ${swiftlib_private_link_libraries_targets} INCORPORATE_OBJECT_LIBRARIES ${SWIFTLIB_INCORPORATE_OBJECT_LIBRARIES} @@ -1863,32 +1856,30 @@ function(add_swift_library name) set(resource_dir_sdk_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}") precondition(resource_dir_sdk_subdir) - if(SWIFTLIB_TARGET_LIBRARY) - if(SWIFTLIB_SHARED) - set(resource_dir "swift") - set(file_permissions - OWNER_READ OWNER_WRITE OWNER_EXECUTE - GROUP_READ GROUP_EXECUTE - WORLD_READ WORLD_EXECUTE) - else() - set(resource_dir "swift_static") - set(file_permissions - OWNER_READ OWNER_WRITE - GROUP_READ - WORLD_READ) - endif() + if(SWIFTLIB_SHARED) + set(resource_dir "swift") + set(file_permissions + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE) + else() + set(resource_dir "swift_static") + set(file_permissions + OWNER_READ OWNER_WRITE + GROUP_READ + WORLD_READ) + endif() - swift_install_in_component("${SWIFTLIB_INSTALL_IN_COMPONENT}" - FILES "${UNIVERSAL_LIBRARY_NAME}" - DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${resource_dir}/${resource_dir_sdk_subdir}" - PERMISSIONS ${file_permissions}) - swift_is_installing_component("${SWIFTLIB_INSTALL_IN_COMPONENT}" is_installing) + swift_install_in_component("${SWIFTLIB_INSTALL_IN_COMPONENT}" + FILES "${UNIVERSAL_LIBRARY_NAME}" + DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${resource_dir}/${resource_dir_sdk_subdir}" + PERMISSIONS ${file_permissions}) + swift_is_installing_component("${SWIFTLIB_INSTALL_IN_COMPONENT}" is_installing) - if(NOT is_installing) - set_property(GLOBAL APPEND PROPERTY SWIFT_BUILDTREE_EXPORTS ${VARIANT_NAME}) - else() - set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${VARIANT_NAME}) - endif() + if(NOT is_installing) + set_property(GLOBAL APPEND PROPERTY SWIFT_BUILDTREE_EXPORTS ${VARIANT_NAME}) + else() + set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${VARIANT_NAME}) endif() # If we built static variants of the library, create a lipo target for @@ -1922,26 +1913,24 @@ function(add_swift_library name) # Add Swift standard library targets as dependencies to the top-level # convenience target. - if(SWIFTLIB_TARGET_LIBRARY) - set(FILTERED_UNITTESTS - swiftStdlibCollectionUnittest - swiftStdlibUnicodeUnittest) - - foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES}) - set(VARIANT_SUFFIX "-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}") - if(TARGET "swift-stdlib${VARIANT_SUFFIX}" AND - TARGET "swift-test-stdlib${VARIANT_SUFFIX}") - add_dependencies("swift-stdlib${VARIANT_SUFFIX}" + set(FILTERED_UNITTESTS + swiftStdlibCollectionUnittest + swiftStdlibUnicodeUnittest) + + foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES}) + set(VARIANT_SUFFIX "-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}") + if(TARGET "swift-stdlib${VARIANT_SUFFIX}" AND + TARGET "swift-test-stdlib${VARIANT_SUFFIX}") + add_dependencies("swift-stdlib${VARIANT_SUFFIX}" + ${lipo_target} + ${lipo_target_static}) + if(NOT "${name}" IN_LIST FILTERED_UNITTESTS) + add_dependencies("swift-test-stdlib${VARIANT_SUFFIX}" ${lipo_target} ${lipo_target_static}) - if(NOT "${name}" IN_LIST FILTERED_UNITTESTS) - add_dependencies("swift-test-stdlib${VARIANT_SUFFIX}" - ${lipo_target} - ${lipo_target_static}) - endif() endif() - endforeach() - endif() + endif() + endforeach() endif() endforeach() else()