Skip to content
Merged
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
74 changes: 38 additions & 36 deletions Runtimes/Core/cmake/modules/PlatformInfo.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -43,47 +43,49 @@ if(NOT SwiftCore_ARCH_SUBDIR)
message(CONFIGURE_LOG "Swift Arch: ${arch}")
endif()

# Note: *moduleTriple* doesn't have an "x" on the end of "macos"; just to be
# safe, we support both cases here.
set(availability_platform_macos "macOS")
set(availaiblity_platform_macosx "macOS")
set(availability_platform_ios "iOS")
set(availability_platform_watchos "watchOS")
set(availability_platform_tvos "tvOS")
set(availability_platform_xros "visionOS")
set(availability_platform_bridgeos "bridgeOS")
if(APPLE)
# Note: *moduleTriple* doesn't have an "x" on the end of "macos"; just to be
# safe, we support both cases here.
set(availability_platform_macos "macOS")
set(availaiblity_platform_macosx "macOS")
set(availability_platform_ios "iOS")
set(availability_platform_watchos "watchOS")
set(availability_platform_tvos "tvOS")
set(availability_platform_xros "visionOS")
set(availability_platform_bridgeos "bridgeOS")

if(NOT SwiftCore_SWIFT_AVAILABILITY_PLATFORM)
if(SwiftCore_MODULE_TRIPLE MATCHES ".*-([^-]+)-simulator$")
set(platform "${CMAKE_MATCH_1}")
elseif(SwiftCore_MODULE_TRIPLE MATCHES ".*-([^-]+)-msvc$")
set(platform "${CMAKE_MATCH_1}")
elseif(SwiftCore_MODULE_TRIPLE MATCHES ".*-([^-]+)$")
set(platform "${CMAKE_MATCH_1}")
else()
message(WARNING "Unable to extract platform name from triple ${SwiftCore_MODULE_TRIPLE}")
endif()
if(NOT SwiftCore_SWIFT_AVAILABILITY_PLATFORM)
if(SwiftCore_MODULE_TRIPLE MATCHES ".*-([^-]+)-simulator$")
set(platform "${CMAKE_MATCH_1}")
elseif(SwiftCore_MODULE_TRIPLE MATCHES ".*-([^-]+)-msvc$")
set(platform "${CMAKE_MATCH_1}")
elseif(SwiftCore_MODULE_TRIPLE MATCHES ".*-([^-]+)$")
set(platform "${CMAKE_MATCH_1}")
else()
message(WARNING "Unable to extract platform name from triple ${SwiftCore_MODULE_TRIPLE}")
endif()

if(availability_platform_${platform})
set(SwiftCore_SWIFT_AVAILABILITY_PLATFORM "${availability_platform_${platform}}")
else()
set(SwiftCore_SWIFT_AVAILABILITY_PLATFORM "unknown")
message(WARNING "Unknown platform ${platform} for availability")
if(availability_platform_${platform})
set(SwiftCore_SWIFT_AVAILABILITY_PLATFORM "${availability_platform_${platform}}")
else()
set(SwiftCore_SWIFT_AVAILABILITY_PLATFORM "unknown")
message(WARNING "Unknown platform ${platform} for availability")
endif()
endif()
endif()

set(SwiftCore_VARIANT_AVAILABILITY_PLATFORM "none")
if(SwiftCore_VARIANT_MODULE_TRIPLE)
if(SwiftCore_VARIANT_MODULE_TRIPLE MATCHES ".*-([^-]+)$")
set(platform "${CMAKE_MATCH_1}")
else()
message(FATAL_ERROR "Unable to extract platform name from triple ${SwiftCore_VARIANT_MODULE_TRIPLE}")
endif()
set(SwiftCore_VARIANT_AVAILABILITY_PLATFORM "none")
if(SwiftCore_VARIANT_MODULE_TRIPLE)
if(SwiftCore_VARIANT_MODULE_TRIPLE MATCHES ".*-([^-]+)$")
set(platform "${CMAKE_MATCH_1}")
else()
message(FATAL_ERROR "Unable to extract platform name from triple ${SwiftCore_VARIANT_MODULE_TRIPLE}")
endif()

if(availability_platform_${platform})
set(SwiftCore_VARIANT_AVAILABILITY_PLATFORM "${availability_platform_${platform}}")
else()
message(WARNING "Unknown platform ${platform} for variant availability")
if(availability_platform_${platform})
set(SwiftCore_VARIANT_AVAILABILITY_PLATFORM "${availability_platform_${platform}}")
else()
message(WARNING "Unknown platform ${platform} for variant availability")
endif()
endif()
endif()

Expand Down
13 changes: 10 additions & 3 deletions Runtimes/Overlay/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ add_compile_definitions(
$<$<BOOL:${SwiftOverlay_ENABLE_BACKDEPLOYMENT_SUPPORT}>:SWIFT_STDLIB_SUPPORT_BACK_DEPLOYMENT>)

add_compile_options(
$<$<COMPILE_LANGUAGE:Swift>:-explicit-module-build>
$<$<COMPILE_LANGUAGE:Swift>:-nostdlibimport>
$<$<COMPILE_LANGUAGE:Swift>:-strict-memory-safety>
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xfrontend -enable-lexical-lifetimes=false>"
Expand All @@ -91,12 +90,20 @@ add_link_options($<$<PLATFORM_ID:Linux>:LINKER:-z,defs>)

include(ExperimentalFeatures)

if(NOT LINUX)
# explicit module builds crash the Swift compiler when building the Glibc
# platform overlay https://github.com/swiftlang/swift/issues/84740
add_compile_options($<$<COMPILE_LANGUAGE:Swift>:-explicit-module-build>)
endif()

add_subdirectory(clang)
if(ANDROID)
add_subdirectory(Android)
endif()
if(WIN32)
elseif(WIN32)
add_subdirectory(Windows)
elseif(LINUX)
defaulted_set(SwiftOverlay_LINUX_LIBC STRING "Select Linux libc flavor. Options are: glibc")
add_subdirectory("Linux/${SwiftOverlay_LINUX_LIBC}")
endif()

if(SwiftOverlay_ENABLE_CXX_INTEROP)
Expand Down
35 changes: 35 additions & 0 deletions Runtimes/Overlay/Linux/glibc/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
add_subdirectory(clang)

gyb_expand(Glibc.swift.gyb Glibc.swift)
gyb_expand(tgmath.swift.gyb tgmath.swift)

add_library(swiftGlibc
Glibc.swift
POSIXError.swift
Platform.swift
TiocConstants.swift
tgmath.swift)

target_link_libraries(swiftGlibc
PRIVATE
swiftCore
SwiftGlibcClangOverlay)

set_target_properties(swiftGlibc PROPERTIES
Swift_MODULE_NAME Glibc)

target_compile_options(swiftGlibc PRIVATE
"SHELL:-Xcc -fno-omit-frame-pointer"
"SHELL:-Xfrontend -empty-abi-descriptor"
"SHELL:-Xfrontend -prespecialize-generic-metadata"
"SHELL:-Xfrontend -require-explicit-availability=ignore"
"SHELL:-library-level api")

install(TARGETS swiftGlibc
EXPORT SwiftOverlayTargets
ARCHIVE DESTINATION "${SwiftOverlay_INSTALL_LIBDIR}"
LIBRARY DESTINATION "${SwiftOverlay_INSTALL_LIBDIR}"
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
emit_swift_interface(swiftGlibc)
install_swift_interface(swiftGlibc)
embed_manifest(swiftGlibc)
36 changes: 36 additions & 0 deletions Runtimes/Overlay/Linux/glibc/clang/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
gyb_expand(glibc.modulemap.gyb glibc.modulemap
FLAGS -DCMAKE_SDK="LINUX")
gyb_expand(SwiftGlibc.h.gyb SwiftGlibc.h)

file(CONFIGURE
OUTPUT glibc-overlay.yml
CONTENT [==[
---
version: 0
case-sensitive: false
use-external-names: false
roots:
- name: "/usr/include"
type: directory
contents:
- name: module.modulemap
type: file
external-contents: "@CMAKE_CURRENT_BINARY_DIR@/glibc.modulemap"
- name: SwiftGlibc.h
type: file
external-contents: "@CMAKE_CURRENT_BINARY_DIR@/SwiftGlibc.h"
]==]
ESCAPE_QUOTES @ONLY NEWLINE_STYLE LF)

add_library(SwiftGlibcClangOverlay INTERFACE
SwiftGlibc.h
glibc.modulemap)
target_compile_options(SwiftGlibcClangOverlay INTERFACE
"$<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:Swift>:SHELL:-vfsoverlay ${CMAKE_CURRENT_BINARY_DIR}/glibc-overlay.yml>>")

install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/glibc.modulemap"
"${CMAKE_CURRENT_BINARY_DIR}/SwiftGlibc.h"
DESTINATION
"${CMAKE_INSTALL_LIBDIR}/swift/${SwiftOverlay_PLATFORM_SUBDIR}/${SwiftOverlay_ARCH_SUBDIR}")
7 changes: 6 additions & 1 deletion Runtimes/Overlay/cmake/modules/DefaultSettings.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,14 @@ if(APPLE)
elseif(CMAKE_SYSTEM_NAME STREQUAL "WASM")
set(SwiftOverlay_ENABLE_REFLECTION_default OFF)
set(SwiftOverlay_ENABLE_CXX_INTEROP_default OFF)
elseif(LINUX OR ANDROID OR BSD)
elseif(ANDROID OR BSD)
set(SwiftOverlay_ENABLE_REFLECTION_default OFF)
set(SwiftOverlay_ENABLE_CXX_INTEROP_default OFF)
elseif(LINUX)
# TODO: Enable once we have them building
set(SwiftOverlay_ENABLE_REFLECTION_default OFF)
set(SwiftOverlay_ENABLE_CXX_INTEROP_default OFF)
set(SwiftOverlay_LINUX_LIBC_default "glibc")
elseif(WIN32)
set(SwiftOverlay_ENABLE_REFLECTION_default ON)
set(SwiftOverlay_ENABLE_CXX_INTEROP_default OFF)
Expand Down
16 changes: 16 additions & 0 deletions Runtimes/Resync.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,22 @@ copy_files(public/Platform Overlay/Android/Math
FILES
Math.swift)

# Linux Glibc Overlay
message(STATUS "Glibc modulemaps[${StdlibSources}/Platform] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Linux/glibc/clang")
copy_files(public/Platform Overlay/Linux/glibc/clang
FILES
glibc.modulemap.gyb
SwiftGlibc.h.gyb)

message(STATUS "Glibc [${StdlibSources}/Platform] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Linux/glibc")
copy_files(public/Platform Overlay/Linux/glibc
FILES
Glibc.swift.gyb
POSIXError.swift
Platform.swift
TiocConstants.swift
tgmath.swift.gyb)

# Windows Overlay
message(STATUS "WinSDK[${StdlibSources}/public/Windows] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/WinSDK")
copy_files(public/Windows Overlay/Windows/WinSDK FILES WinSDK.swift)
Expand Down