Skip to content

Commit 1b4a886

Browse files
[embedded] Build the _Builtin_float overlay in embedded Swift mode
Add embedded targets for the _Builtin_float overlay. rdar://123951443
1 parent c72e57e commit 1b4a886

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

stdlib/public/ClangOverlays/CMakeLists.txt

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
if(NOT DEFINED SWIFT_BUILD_CLANG_OVERLAYS_SKIP_BUILTIN_FLOAT OR NOT SWIFT_BUILD_CLANG_OVERLAYS_SKIP_BUILTIN_FLOAT)
2+
set(BUILTIN_FLOAT_SOURCES
3+
linker-support/magic-symbols-for-install-name.c
4+
)
5+
6+
set(BUILTIN_FLOAT_GYB_SOURCES
7+
float.swift.gyb
8+
)
9+
210
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
311
set(BUILTIN_FLOAT_SWIFT_FLAGS -Xfrontend -module-abi-name -Xfrontend Darwin)
412
else()
@@ -9,10 +17,10 @@ if(NOT DEFINED SWIFT_BUILD_CLANG_OVERLAYS_SKIP_BUILTIN_FLOAT OR NOT SWIFT_BUILD_
917
${SWIFT_STDLIB_LIBRARY_BUILD_TYPES}
1018
IS_SDK_OVERLAY
1119

12-
linker-support/magic-symbols-for-install-name.c
20+
${BUILTIN_FLOAT_SOURCES}
1321

1422
GYB_SOURCES
15-
float.swift.gyb
23+
${BUILTIN_FLOAT_GYB_SOURCES}
1624

1725
SWIFT_COMPILE_FLAGS
1826
${SWIFT_RUNTIME_SWIFT_COMPILE_FLAGS}
@@ -25,3 +33,46 @@ if(NOT DEFINED SWIFT_BUILD_CLANG_OVERLAYS_SKIP_BUILTIN_FLOAT OR NOT SWIFT_BUILD_
2533
INSTALL_IN_COMPONENT stdlib
2634
MACCATALYST_BUILD_FLAVOR zippered)
2735
endif()
36+
37+
# Embedded clang overlays - embedded libraries are built as .swiftmodule only,
38+
# i.e. there is no .o or .a file produced (no binary code is actually produced)
39+
# and only users of a library are going to actually compile any needed code.
40+
if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
41+
add_custom_target(embedded-builtin_float)
42+
add_dependencies(embedded-libraries embedded-builtin_float)
43+
44+
foreach(entry ${EMBEDDED_STDLIB_TARGET_TRIPLES})
45+
string(REGEX REPLACE "[ \t]+" ";" list "${entry}")
46+
list(GET list 0 arch)
47+
list(GET list 1 mod)
48+
list(GET list 2 triple)
49+
50+
set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}")
51+
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
52+
set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}")
53+
set(SWIFT_SDK_embedded_PATH ${SWIFT_SDK_OSX_PATH})
54+
set(SWIFT_SDK_embedded_ARCH_${arch}_PATH ${SWIFT_SDK_OSX_PATH})
55+
set(SWIFT_SDK_embedded_USE_ISYSROOT TRUE)
56+
add_swift_target_library_single(
57+
embedded-builtin_float-${mod}
58+
swift_Builtin_float
59+
ONLY_SWIFTMODULE
60+
IS_FRAGILE
61+
62+
${BUILTIN_FLOAT_SOURCES}
63+
GYB_SOURCES
64+
${BUILTIN_FLOAT_GYB_SOURCES}
65+
66+
SWIFT_COMPILE_FLAGS
67+
${BUILTIN_FLOAT_SWIFT_FLAGS}
68+
-Xcc -ffreestanding -enable-experimental-feature Embedded
69+
70+
MODULE_DIR "${CMAKE_BINARY_DIR}/lib/swift/embedded"
71+
SDK "embedded"
72+
ARCHITECTURE "${arch}"
73+
DEPENDS embedded-stdlib-${mod}
74+
INSTALL_IN_COMPONENT stdlib
75+
)
76+
add_dependencies(embedded-builtin_float embedded-builtin_float-${mod})
77+
endforeach()
78+
endif()

stdlib/public/ClangOverlays/float.swift.gyb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public let FLT_RADIX = Double.radix
1818

1919
%for type, prefix in [('Float', 'FLT'), ('Double', 'DBL'), ('Float80', 'LDBL')]:
2020
% if type == "Float80":
21-
#if !os(Android) && !os(WASI) && !os(Windows) && (arch(i386) || arch(x86_64))
21+
#if !os(Android) && !os(WASI) && !os(Windows) && !$Embedded && (arch(i386) || arch(x86_64))
2222
% end
2323
// Where does the 1 come from? C counts the usually-implicit leading
2424
// significand bit, but Swift does not. Neither is really right or wrong.

0 commit comments

Comments
 (0)