From 5f4a15575daa457babac68d5abbb516275c07046 Mon Sep 17 00:00:00 2001 From: Butta Date: Thu, 23 Feb 2023 14:16:38 +0530 Subject: [PATCH] install: place the libraries in architecture-specific directories on ELF platforms This is needed for apple/swift#63782, which changes the Unix toolchain to look for libraries in architecture-specific directories. --- CMakeLists.txt | 10 ++++++++-- Sources/BlocksRuntime/CMakeLists.txt | 4 ++-- Sources/Tools/plutil/CMakeLists.txt | 2 +- Sources/UUID/CMakeLists.txt | 8 ++------ cmake/modules/SwiftSupport.cmake | 10 +++++++--- 5 files changed, 20 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bb1099078..b4f5f2ebb2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,6 +59,12 @@ set(CMAKE_THREAD_PREFER_PTHREAD TRUE) set(THREADS_PREFER_PTHREAD_FLAG OFF) find_package(Threads REQUIRED) +set(SWIFT_INSTALL_SUBDIR "$") +if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|Windows") + get_swift_host_arch(swift_arch) + set(SWIFT_INSTALL_SUBDIR "${SWIFT_INSTALL_SUBDIR}/${swift_arch}") +endif() + set(SAVED_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) set(BUILD_SHARED_LIBS NO) add_subdirectory(CoreFoundation EXCLUDE_FROM_ALL) @@ -99,13 +105,13 @@ if(NOT BUILD_SHARED_LIBS) endif() install(TARGETS CoreFoundation CFXMLInterface - DESTINATION lib/swift_static/$) + DESTINATION lib/swift_static/${SWIFT_INSTALL_SUBDIR}) if(BUILD_NETWORKING) set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS CFURLSessionInterface) install(TARGETS CFURLSessionInterface - DESTINATION lib/swift_static/$) + DESTINATION lib/swift_static/${SWIFT_INSTALL_SUBDIR}) endif() endif() diff --git a/Sources/BlocksRuntime/CMakeLists.txt b/Sources/BlocksRuntime/CMakeLists.txt index 057302dd43..402f72ea9c 100644 --- a/Sources/BlocksRuntime/CMakeLists.txt +++ b/Sources/BlocksRuntime/CMakeLists.txt @@ -11,5 +11,5 @@ set_target_properties(BlocksRuntime PROPERTIES add_library(BlocksRuntime::BlocksRuntime ALIAS BlocksRuntime) install(TARGETS BlocksRuntime - ARCHIVE DESTINATION lib/swift$<$>:_static>/$ - LIBRARY DESTINATION lib/swift$<$>:_static>/$) + ARCHIVE DESTINATION lib/swift$<$>:_static>/${SWIFT_INSTALL_SUBDIR} + LIBRARY DESTINATION lib/swift$<$>:_static>/${SWIFT_INSTALL_SUBDIR}) diff --git a/Sources/Tools/plutil/CMakeLists.txt b/Sources/Tools/plutil/CMakeLists.txt index b1c843506a..b4120db18c 100644 --- a/Sources/Tools/plutil/CMakeLists.txt +++ b/Sources/Tools/plutil/CMakeLists.txt @@ -28,7 +28,7 @@ if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|Windows") endif() set_target_properties(plutil PROPERTIES - INSTALL_RPATH "$ORIGIN/../lib/swift/$") + INSTALL_RPATH "$ORIGIN/../lib/swift/${SWIFT_INSTALL_SUBDIR}") set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS plutil) diff --git a/Sources/UUID/CMakeLists.txt b/Sources/UUID/CMakeLists.txt index fea52c7396..c439604b30 100644 --- a/Sources/UUID/CMakeLists.txt +++ b/Sources/UUID/CMakeLists.txt @@ -23,12 +23,8 @@ set_target_properties(uuid PROPERTIES if(NOT BUILD_SHARED_LIBS) set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS uuid) - # get_swift_host_arch(swift_arch) - - # TODO(drexin): should be installed in architecture specific folder, once - # the layout is fixed for non-Darwin platforms install(TARGETS uuid - ARCHIVE DESTINATION lib/swift_static/$ - LIBRARY DESTINATION lib/swift_static/$ + ARCHIVE DESTINATION lib/swift_static/${SWIFT_INSTALL_SUBDIR} + LIBRARY DESTINATION lib/swift_static/${SWIFT_INSTALL_SUBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() diff --git a/cmake/modules/SwiftSupport.cmake b/cmake/modules/SwiftSupport.cmake index ffb24527eb..309aa7d5af 100644 --- a/cmake/modules/SwiftSupport.cmake +++ b/cmake/modules/SwiftSupport.cmake @@ -67,15 +67,19 @@ function(_install_target module) set(swift swift) endif() + get_swift_host_arch(swift_arch) + set(install_subdir "${swift_os}") + if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|Windows") + set(install_subdir "${install_subdir}/${swift_arch}") + endif() install(TARGETS ${module} - ARCHIVE DESTINATION lib/${swift}/${swift_os} - LIBRARY DESTINATION lib/${swift}/${swift_os} + ARCHIVE DESTINATION lib/${swift}/${install_subdir} + LIBRARY DESTINATION lib/${swift}/${install_subdir} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) if(type STREQUAL EXECUTABLE) return() endif() - get_swift_host_arch(swift_arch) get_target_property(module_name ${module} Swift_MODULE_NAME) if(NOT module_name) set(module_name ${module})