Skip to content

Commit 44830d7

Browse files
committed
Overlays: Add Glibc Linux SDK overlay build
Adding a new glibc overlay for Linux builds. We will eventually need one for Musl, and if someone really wants to, LLVM and cosmopolitan libcs are also out there.
1 parent 28a6317 commit 44830d7

File tree

5 files changed

+97
-3
lines changed

5 files changed

+97
-3
lines changed

Runtimes/Overlay/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,11 @@ endif()
9999
add_subdirectory(clang)
100100
if(ANDROID)
101101
add_subdirectory(Android)
102-
endif()
103-
if(WIN32)
102+
elseif(WIN32)
104103
add_subdirectory(Windows)
104+
elseif(LINUX)
105+
defaulted_set(SwiftOverlay_LINUX_LIBC STRING "Select Linux libc flavor. Options are: glibc")
106+
add_subdirectory("Linux/${SwiftOverlay_LINUX_LIBC}")
105107
endif()
106108

107109
if(SwiftOverlay_ENABLE_CXX_INTEROP)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
add_subdirectory(clang)
2+
3+
gyb_expand(Glibc.swift.gyb Glibc.swift)
4+
gyb_expand(tgmath.swift.gyb tgmath.swift)
5+
6+
add_library(swiftGlibc
7+
Glibc.swift
8+
POSIXError.swift
9+
Platform.swift
10+
TiocConstants.swift
11+
tgmath.swift)
12+
13+
target_link_libraries(swiftGlibc
14+
PRIVATE
15+
swiftCore
16+
SwiftGlibcClangOverlay)
17+
18+
set_target_properties(swiftGlibc PROPERTIES
19+
Swift_MODULE_NAME Glibc)
20+
21+
target_compile_options(swiftGlibc PRIVATE
22+
"SHELL:-Xcc -fno-omit-frame-pointer"
23+
"SHELL:-Xfrontend -empty-abi-descriptor"
24+
"SHELL:-Xfrontend -prespecialize-generic-metadata"
25+
"SHELL:-Xfrontend -require-explicit-availability=ignore"
26+
"SHELL:-library-level api")
27+
28+
install(TARGETS swiftGlibc
29+
EXPORT SwiftOverlayTargets
30+
ARCHIVE DESTINATION "${SwiftOverlay_INSTALL_LIBDIR}"
31+
LIBRARY DESTINATION "${SwiftOverlay_INSTALL_LIBDIR}"
32+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
33+
emit_swift_interface(swiftGlibc)
34+
install_swift_interface(swiftGlibc)
35+
embed_manifest(swiftGlibc)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
gyb_expand(glibc.modulemap.gyb glibc.modulemap
2+
FLAGS -DCMAKE_SDK="LINUX")
3+
gyb_expand(SwiftGlibc.h.gyb SwiftGlibc.h)
4+
5+
file(CONFIGURE
6+
OUTPUT glibc-overlay.yml
7+
CONTENT [==[
8+
---
9+
version: 0
10+
case-sensitive: false
11+
use-external-names: false
12+
roots:
13+
- name: "/usr/include"
14+
type: directory
15+
contents:
16+
- name: module.modulemap
17+
type: file
18+
external-contents: "@CMAKE_CURRENT_BINARY_DIR@/glibc.modulemap"
19+
- name: SwiftGlibc.h
20+
type: file
21+
external-contents: "@CMAKE_CURRENT_BINARY_DIR@/SwiftGlibc.h"
22+
]==]
23+
ESCAPE_QUOTES @ONLY NEWLINE_STYLE LF)
24+
25+
add_library(SwiftGlibcClangOverlay INTERFACE
26+
SwiftGlibc.h
27+
glibc.modulemap)
28+
target_compile_options(SwiftGlibcClangOverlay INTERFACE
29+
"$<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:Swift>:SHELL:-vfsoverlay ${CMAKE_CURRENT_BINARY_DIR}/glibc-overlay.yml>>")
30+
31+
install(
32+
FILES
33+
"${CMAKE_CURRENT_BINARY_DIR}/glibc.modulemap"
34+
"${CMAKE_CURRENT_BINARY_DIR}/SwiftGlibc.h"
35+
DESTINATION
36+
"${CMAKE_INSTALL_LIBDIR}/swift/${SwiftOverlay_PLATFORM_SUBDIR}/${SwiftOverlay_ARCH_SUBDIR}")

Runtimes/Overlay/cmake/modules/DefaultSettings.cmake

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,14 @@ if(APPLE)
3030
elseif(CMAKE_SYSTEM_NAME STREQUAL "WASM")
3131
set(SwiftOverlay_ENABLE_REFLECTION_default OFF)
3232
set(SwiftOverlay_ENABLE_CXX_INTEROP_default OFF)
33-
elseif(LINUX OR ANDROID OR BSD)
33+
elseif(ANDROID OR BSD)
3434
set(SwiftOverlay_ENABLE_REFLECTION_default OFF)
3535
set(SwiftOverlay_ENABLE_CXX_INTEROP_default OFF)
36+
elseif(LINUX)
37+
# TODO: Enable once we have them building
38+
set(SwiftOverlay_ENABLE_REFLECTION_default OFF)
39+
set(SwiftOverlay_ENABLE_CXX_INTEROP_default OFF)
40+
set(SwiftOverlay_LINUX_LIBC_default "glibc")
3641
elseif(WIN32)
3742
set(SwiftOverlay_ENABLE_REFLECTION_default ON)
3843
set(SwiftOverlay_ENABLE_CXX_INTEROP_default OFF)

Runtimes/Resync.cmake

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,22 @@ copy_files(public/Platform Overlay/Android/Math
150150
FILES
151151
Math.swift)
152152

153+
# Linux Glibc Overlay
154+
message(STATUS "Glibc modulemaps[${StdlibSources}/Platform] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Linux/glibc/clang")
155+
copy_files(public/Platform Overlay/Linux/glibc/clang
156+
FILES
157+
glibc.modulemap.gyb
158+
SwiftGlibc.h.gyb)
159+
160+
message(STATUS "Glibc [${StdlibSources}/Platform] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Linux/glibc")
161+
copy_files(public/Platform Overlay/Linux/glibc
162+
FILES
163+
Glibc.swift.gyb
164+
POSIXError.swift
165+
Platform.swift
166+
TiocConstants.swift
167+
tgmath.swift.gyb)
168+
153169
# Windows Overlay
154170
message(STATUS "WinSDK[${StdlibSources}/public/Windows] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/WinSDK")
155171
copy_files(public/Windows Overlay/Windows/WinSDK FILES WinSDK.swift)

0 commit comments

Comments
 (0)