From 5fbe1218d84a575f5a950cab05e73a6c23f3188d Mon Sep 17 00:00:00 2001 From: Vlad Gorloff Date: Sat, 22 Jun 2019 13:51:46 +0200 Subject: [PATCH 1/2] Fixes wrong paths to so-files which cause missed files error in "ninja install". Disables "lipo / fat binary" routines to avoid build error for Android builds. --- cmake/modules/AddSwift.cmake | 65 ++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake index 0a24fcd7cf88f..c96aaaf7b36e7 100644 --- a/cmake/modules/AddSwift.cmake +++ b/cmake/modules/AddSwift.cmake @@ -2006,7 +2006,7 @@ function(add_swift_target_library name) endif() endif() - if(NOT SWIFTLIB_OBJECT_LIBRARY) + if(NOT SWIFTLIB_OBJECT_LIBRARY AND NOT sdk STREQUAL ANDROID) # Add dependencies on the (not-yet-created) custom lipo target. foreach(DEP ${SWIFTLIB_LINK_LIBRARIES}) if (NOT "${DEP}" STREQUAL "icucore") @@ -2081,15 +2081,17 @@ function(add_swift_target_library name) if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin" AND SWIFTLIB_SHARED) set(codesign_arg CODESIGN) endif() - precondition(THIN_INPUT_TARGETS) - _add_swift_lipo_target(SDK - ${sdk} - TARGET - ${lipo_target} - OUTPUT - ${UNIVERSAL_LIBRARY_NAME} - ${codesign_arg} - ${THIN_INPUT_TARGETS}) + if(NOT "${sdk}" STREQUAL "ANDROID") + precondition(THIN_INPUT_TARGETS) + _add_swift_lipo_target(SDK + ${sdk} + TARGET + ${lipo_target} + OUTPUT + ${UNIVERSAL_LIBRARY_NAME} + ${codesign_arg} + ${THIN_INPUT_TARGETS}) + endif() # Cache universal libraries for dependency purposes set(UNIVERSAL_LIBRARY_NAMES_${SWIFT_SDK_${sdk}_LIB_SUBDIR} @@ -2128,6 +2130,17 @@ function(add_swift_target_library name) ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${resource_dir}/${resource_dir_sdk_subdir}/${SWIFT_PRIMARY_VARIANT_ARCH}" COMPONENT "${SWIFTLIB_INSTALL_IN_COMPONENT}" PERMISSIONS ${file_permissions}) + elseif(sdk STREQUAL ANDROID) + foreach(arch ${SWIFT_SDK_ANDROID_ARCHITECTURES}) + if(SWIFTLIB_SHARED) + set(UNIVERSAL_LIBRARY_NAME "${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}/${CMAKE_SHARED_LIBRARY_PREFIX}${name}.so") + endif() + swift_install_in_component(FILES "${UNIVERSAL_LIBRARY_NAME}" + DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${resource_dir}/${resource_dir_sdk_subdir}/${arch}" + COMPONENT "${SWIFTLIB_INSTALL_IN_COMPONENT}" + PERMISSIONS ${file_permissions} + "${optional_arg}") + endforeach() else() swift_install_in_component(FILES "${UNIVERSAL_LIBRARY_NAME}" DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${resource_dir}/${resource_dir_sdk_subdir}" @@ -2198,21 +2211,23 @@ function(add_swift_target_library name) "${name}-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-static") set(UNIVERSAL_LIBRARY_NAME "${universal_subdir}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX}") - _add_swift_lipo_target(SDK - ${sdk} - TARGET - ${lipo_target_static} - OUTPUT - "${UNIVERSAL_LIBRARY_NAME}" - ${THIN_INPUT_TARGETS_STATIC}) - swift_install_in_component(FILES "${UNIVERSAL_LIBRARY_NAME}" - DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${install_subdir}/${resource_dir_sdk_subdir}" - PERMISSIONS - OWNER_READ OWNER_WRITE - GROUP_READ - WORLD_READ - COMPONENT "${SWIFTLIB_INSTALL_IN_COMPONENT}" - "${optional_arg}") + if(NOT "${sdk}" STREQUAL "ANDROID") + _add_swift_lipo_target(SDK + ${sdk} + TARGET + ${lipo_target_static} + OUTPUT + "${UNIVERSAL_LIBRARY_NAME}" + ${THIN_INPUT_TARGETS_STATIC}) + swift_install_in_component(FILES "${UNIVERSAL_LIBRARY_NAME}" + DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${install_subdir}/${resource_dir_sdk_subdir}" + PERMISSIONS + OWNER_READ OWNER_WRITE + GROUP_READ + WORLD_READ + COMPONENT "${SWIFTLIB_INSTALL_IN_COMPONENT}" + "${optional_arg}") + endif() endif() # Add Swift standard library targets as dependencies to the top-level From a09a5eb80e89d20b219b4351670a2c995f8b6ca5 Mon Sep 17 00:00:00 2001 From: Vlad Gorloff Date: Tue, 25 Jun 2019 12:39:31 +0200 Subject: [PATCH 2/2] Changes requested in PR review. --- cmake/modules/AddSwift.cmake | 61 +++++++++++++++--------------------- 1 file changed, 26 insertions(+), 35 deletions(-) diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake index c96aaaf7b36e7..c1bfc9e582673 100644 --- a/cmake/modules/AddSwift.cmake +++ b/cmake/modules/AddSwift.cmake @@ -630,13 +630,6 @@ function(_add_swift_lipo_target) CUSTOM_TARGET_NAME "${LIPO_TARGET}" OUTPUT "${LIPO_OUTPUT}" DEPENDS ${source_targets}) - else() - # We don't know how to create fat binaries for other platforms. - add_custom_command_target(unused_var - COMMAND "${CMAKE_COMMAND}" "-E" "copy" "${source_binaries}" "${LIPO_OUTPUT}" - CUSTOM_TARGET_NAME "${LIPO_TARGET}" - OUTPUT "${LIPO_OUTPUT}" - DEPENDS ${source_targets}) endif() endfunction() @@ -2006,7 +1999,7 @@ function(add_swift_target_library name) endif() endif() - if(NOT SWIFTLIB_OBJECT_LIBRARY AND NOT sdk STREQUAL ANDROID) + if(NOT SWIFTLIB_OBJECT_LIBRARY AND sdk IN_LIST SWIFT_APPLE_PLATFORMS) # Add dependencies on the (not-yet-created) custom lipo target. foreach(DEP ${SWIFTLIB_LINK_LIBRARIES}) if (NOT "${DEP}" STREQUAL "icucore") @@ -2081,16 +2074,16 @@ function(add_swift_target_library name) if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin" AND SWIFTLIB_SHARED) set(codesign_arg CODESIGN) endif() - if(NOT "${sdk}" STREQUAL "ANDROID") - precondition(THIN_INPUT_TARGETS) - _add_swift_lipo_target(SDK - ${sdk} - TARGET - ${lipo_target} - OUTPUT - ${UNIVERSAL_LIBRARY_NAME} - ${codesign_arg} - ${THIN_INPUT_TARGETS}) + if(sdk IN_LIST SWIFT_APPLE_PLATFORMS) + precondition(THIN_INPUT_TARGETS) + _add_swift_lipo_target(SDK + ${sdk} + TARGET + ${lipo_target} + OUTPUT + ${UNIVERSAL_LIBRARY_NAME} + ${codesign_arg} + ${THIN_INPUT_TARGETS}) endif() # Cache universal libraries for dependency purposes @@ -2211,23 +2204,21 @@ function(add_swift_target_library name) "${name}-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-static") set(UNIVERSAL_LIBRARY_NAME "${universal_subdir}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX}") - if(NOT "${sdk}" STREQUAL "ANDROID") - _add_swift_lipo_target(SDK - ${sdk} - TARGET - ${lipo_target_static} - OUTPUT - "${UNIVERSAL_LIBRARY_NAME}" - ${THIN_INPUT_TARGETS_STATIC}) - swift_install_in_component(FILES "${UNIVERSAL_LIBRARY_NAME}" - DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${install_subdir}/${resource_dir_sdk_subdir}" - PERMISSIONS - OWNER_READ OWNER_WRITE - GROUP_READ - WORLD_READ - COMPONENT "${SWIFTLIB_INSTALL_IN_COMPONENT}" - "${optional_arg}") - endif() + _add_swift_lipo_target(SDK + ${sdk} + TARGET + ${lipo_target_static} + OUTPUT + "${UNIVERSAL_LIBRARY_NAME}" + ${THIN_INPUT_TARGETS_STATIC}) + swift_install_in_component(FILES "${UNIVERSAL_LIBRARY_NAME}" + DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${install_subdir}/${resource_dir_sdk_subdir}" + PERMISSIONS + OWNER_READ OWNER_WRITE + GROUP_READ + WORLD_READ + COMPONENT "${SWIFTLIB_INSTALL_IN_COMPONENT}" + "${optional_arg}") endif() # Add Swift standard library targets as dependencies to the top-level