Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 2 additions & 20 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,6 @@ if(FOUNDATION_SWIFTPM_DEPS)
return()
endif()

if(NOT SWIFT_SYSTEM_NAME)
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
set(SWIFT_SYSTEM_NAME macosx)
else()
set(SWIFT_SYSTEM_NAME "$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
endif()
endif()

# Don't enable WMO on Windows due to linker failures
if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
# Enable whole module optimization for release builds & incremental for debug builds
Expand Down Expand Up @@ -138,18 +130,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL Linux)
"$<$<COMPILE_LANGUAGE:C,CXX>:-fno-omit-frame-pointer>")
endif()

# Precompute module triple for installation
if(NOT SwiftFoundation_MODULE_TRIPLE)
set(module_triple_command "${CMAKE_Swift_COMPILER}" -print-target-info)
if(CMAKE_Swift_COMPILER_TARGET)
list(APPEND module_triple_command -target ${CMAKE_Swift_COMPILER_TARGET})
endif()
execute_process(COMMAND ${module_triple_command} OUTPUT_VARIABLE target_info_json)
string(JSON module_triple GET "${target_info_json}" "target" "moduleTriple")
set(SwiftFoundation_MODULE_TRIPLE "${module_triple}" CACHE STRING "swift module triple used for installed swiftmodule and swiftinterface files")
mark_as_advanced(SwiftFoundation_MODULE_TRIPLE)
endif()

# System dependencies

# We know libdispatch is always unavailable on WASI
Expand Down Expand Up @@ -256,6 +236,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
"-D_GNU_SOURCE")
endif()

option(SwiftFoundation_INSTALL_ARCH_SUBDIR "Install libraries under an architecture subdirectory" NO)

include(GNUInstallDirs)
include(FoundationSwiftSupport)

Expand Down
4 changes: 2 additions & 2 deletions Sources/CoreFoundation/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ install(DIRECTORY

if(NOT BUILD_SHARED_LIBS)
install(TARGETS CoreFoundation
ARCHIVE DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME}
LIBRARY DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME}
ARCHIVE DESTINATION lib/swift_static/${SwiftFoundation_PLATFORM}$<$<BOOL:${SwiftFoundation_INSTALL_ARCH_SUBDIR}>:/${SwiftFoundation_ARCH}>
LIBRARY DESTINATION lib/swift_static/${SwiftFoundation_PLATFORM}$<$<BOOL:${SwiftFoundation_INSTALL_ARCH_SUBDIR}>:/${SwiftFoundation_ARCH}>
RUNTIME DESTINATION bin)
endif()
4 changes: 2 additions & 2 deletions Sources/_CFURLSessionInterface/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ target_link_libraries(_CFURLSessionInterface PRIVATE
if(NOT BUILD_SHARED_LIBS)
set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS _CFURLSessionInterface)
install(TARGETS _CFURLSessionInterface
ARCHIVE DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME}
LIBRARY DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME}
ARCHIVE DESTINATION lib/swift_static/${SwiftFoundation_PLATFORM}$<$<BOOL:${SwiftFoundation_INSTALL_ARCH_SUBDIR}>:/${SwiftFoundation_ARCH}>
LIBRARY DESTINATION lib/swift_static/${SwiftFoundation_PLATFORM}$<$<BOOL:${SwiftFoundation_INSTALL_ARCH_SUBDIR}>:/${SwiftFoundation_ARCH}>
RUNTIME DESTINATION bin)
endif()
4 changes: 2 additions & 2 deletions Sources/_CFXMLInterface/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ endif()
if(NOT BUILD_SHARED_LIBS)
set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS _CFXMLInterface)
install(TARGETS _CFXMLInterface
ARCHIVE DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME}
LIBRARY DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME}
ARCHIVE DESTINATION lib/swift_static/${SwiftFoundation_PLATFORM}$<$<BOOL:${SwiftFoundation_INSTALL_ARCH_SUBDIR}>:/${SwiftFoundation_ARCH}>
LIBRARY DESTINATION lib/swift_static/${SwiftFoundation_PLATFORM}$<$<BOOL:${SwiftFoundation_INSTALL_ARCH_SUBDIR}>:/${SwiftFoundation_ARCH}>
RUNTIME DESTINATION bin)
endif()
2 changes: 1 addition & 1 deletion Sources/plutil/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ target_link_libraries(plutil PRIVATE
Foundation)

set_target_properties(plutil PROPERTIES
INSTALL_RPATH "$ORIGIN/../lib/swift/${SWIFT_SYSTEM_NAME}")
INSTALL_RPATH "$ORIGIN/../lib/swift/${SwiftFoundation_PLATFORM}$<$<BOOL:${SwiftFoundation_INSTALL_ARCH_SUBDIR}>:/${SwiftFoundation_ARCH}>")

set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS plutil)
install(TARGETS plutil
Expand Down
41 changes: 36 additions & 5 deletions cmake/modules/FoundationSwiftSupport.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,39 @@
##
##===----------------------------------------------------------------------===##

if(NOT SwiftFoundation_MODULE_TRIPLE OR NOT SwiftFoundation_ARCH OR NOT SwiftFoundation_PLATFORM)
# Get the target information from the Swift compiler.
set(module_triple_command "${CMAKE_Swift_COMPILER}" -print-target-info)
if(CMAKE_Swift_COMPILER_TARGET)
list(APPEND module_triple_command -target ${CMAKE_Swift_COMPILER_TARGET})
endif()
execute_process(COMMAND ${module_triple_command} OUTPUT_VARIABLE target_info_json)
endif()

if(NOT SwiftFoundation_MODULE_TRIPLE)
string(JSON module_triple GET "${target_info_json}" "target" "moduleTriple")
set(SwiftFoundation_MODULE_TRIPLE "${module_triple}" CACHE STRING "Triple used to install swiftmodule files")
mark_as_advanced(SwiftFoundation_MODULE_TRIPLE)
message(CONFIGURE_LOG "Swift module triple: ${module_triple}")
endif()

if(NOT SwiftFoundation_ARCH)
# Use the -print-target-info command to get the architecture.
string(JSON module_arch GET "${target_info_json}" "target" "arch")
set(SwiftFoundation_ARCH "${module_arch}" CACHE STRING "Arch folder name used to install libraries")
mark_as_advanced(SwiftFoundation_ARCH)
message(CONFIGURE_LOG "Swift arch: ${SwiftFoundation_ARCH}")
endif()

if(NOT SwiftFoundation_PLATFORM)
# Use the -print-target-info command to get the platform.
string(JSON swift_platform GET "${target_info_json}" "target" "platform")
set(SwiftFoundation_PLATFORM "${swift_platform}" CACHE STRING "Platform folder name used to install libraries")
mark_as_advanced(SwiftFoundation_PLATFORM)
message(CONFIGURE_LOG "Swift platform: ${SwiftFoundation_PLATFORM}")
endif()

function(_foundation_install_target module)
set(swift_os ${SWIFT_SYSTEM_NAME})
get_target_property(type ${module} TYPE)

if(type STREQUAL STATIC_LIBRARY)
Expand All @@ -23,8 +54,8 @@ function(_foundation_install_target module)
endif()

install(TARGETS ${module}
ARCHIVE DESTINATION lib/${swift}/${swift_os}
LIBRARY DESTINATION lib/${swift}/${swift_os}
ARCHIVE DESTINATION lib/${swift}/${SwiftFoundation_PLATFORM}$<$<BOOL:${SwiftFoundation_INSTALL_ARCH_SUBDIR}>:/${SwiftFoundation_ARCH}>
LIBRARY DESTINATION lib/${swift}/${SwiftFoundation_PLATFORM}$<$<BOOL:${SwiftFoundation_INSTALL_ARCH_SUBDIR}>:/${SwiftFoundation_ARCH}>
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
if(type STREQUAL EXECUTABLE)
return()
Expand All @@ -36,10 +67,10 @@ function(_foundation_install_target module)
endif()

install(FILES $<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftdoc
DESTINATION lib/${swift}/${swift_os}/${module_name}.swiftmodule
DESTINATION lib/${swift}/${SwiftFoundation_PLATFORM}/${module_name}.swiftmodule
RENAME ${SwiftFoundation_MODULE_TRIPLE}.swiftdoc)
install(FILES $<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftmodule
DESTINATION lib/${swift}/${swift_os}/${module_name}.swiftmodule
DESTINATION lib/${swift}/${SwiftFoundation_PLATFORM}/${module_name}.swiftmodule
RENAME ${SwiftFoundation_MODULE_TRIPLE}.swiftmodule)

endfunction()