Skip to content

Commit a13f749

Browse files
committed
[android] add an android NDK Swift overlay module, and use it instead of Glibc
1 parent cdc0892 commit a13f749

29 files changed

+249
-19
lines changed

lib/ClangImporter/ClangIncludePaths.cpp

+19-12
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ static bool shouldInjectLibcModulemap(const llvm::Triple &triple) {
185185

186186
static SmallVector<std::pair<std::string, std::string>, 2>
187187
getLibcFileMapping(ASTContext &ctx, StringRef modulemapFileName,
188-
std::optional<StringRef> maybeHeaderFileName,
188+
std::optional<ArrayRef<StringRef>> maybeHeaderFileNames,
189189
const llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> &vfs) {
190190
const llvm::Triple &triple = ctx.LangOpts.Target;
191191
if (!shouldInjectLibcModulemap(triple))
@@ -227,18 +227,20 @@ getLibcFileMapping(ASTContext &ctx, StringRef modulemapFileName,
227227
SmallVector<std::pair<std::string, std::string>, 2> vfsMappings{
228228
{std::string(injectedModuleMapPath), std::string(actualModuleMapPath)}};
229229

230-
if (maybeHeaderFileName) {
231-
// TODO: remove the SwiftGlibc.h header and reference all Glibc headers
232-
// directly from the modulemap.
233-
Path actualHeaderPath = actualModuleMapPath;
234-
llvm::sys::path::remove_filename(actualHeaderPath);
235-
llvm::sys::path::append(actualHeaderPath, maybeHeaderFileName.value());
230+
if (maybeHeaderFileNames) {
231+
for (const auto &filename : *maybeHeaderFileNames) {
232+
// TODO: remove the SwiftGlibc.h header and reference all Glibc headers
233+
// directly from the modulemap.
234+
Path actualHeaderPath = actualModuleMapPath;
235+
llvm::sys::path::remove_filename(actualHeaderPath);
236+
llvm::sys::path::append(actualHeaderPath, filename);
236237

237-
Path injectedHeaderPath(libcDir);
238-
llvm::sys::path::append(injectedHeaderPath, maybeHeaderFileName.value());
238+
Path injectedHeaderPath(libcDir);
239+
llvm::sys::path::append(injectedHeaderPath, filename);
239240

240-
vfsMappings.push_back(
241-
{std::string(injectedHeaderPath), std::string(actualHeaderPath)});
241+
vfsMappings.push_back(
242+
{std::string(injectedHeaderPath), std::string(actualHeaderPath)});
243+
}
242244
}
243245

244246
return vfsMappings;
@@ -534,8 +536,13 @@ ClangInvocationFileMapping swift::getClangInvocationFileMapping(
534536
// WASI Mappings
535537
libcFileMapping =
536538
getLibcFileMapping(ctx, "wasi-libc.modulemap", std::nullopt, vfs);
539+
} else if (triple.isAndroid()) {
540+
// Android uses the android-specific module map that overlays the NDK.
541+
StringRef headerFiles[] = {"SwiftAndroidNDK.h", "SwiftBionic.h"};
542+
libcFileMapping =
543+
getLibcFileMapping(ctx, "android.modulemap", headerFiles, vfs);
537544
} else {
538-
// Android/BSD/Linux Mappings
545+
// BSD/Linux Mappings
539546
libcFileMapping = getLibcFileMapping(ctx, "glibc.modulemap",
540547
StringRef("SwiftGlibc.h"), vfs);
541548
}

stdlib/cmake/modules/AddSwiftStdlib.cmake

+13-2
Original file line numberDiff line numberDiff line change
@@ -1739,6 +1739,9 @@ endfunction()
17391739
# SWIFT_MODULE_DEPENDS_WASI
17401740
# Swift modules this library depends on when built for WASI.
17411741
#
1742+
# SWIFT_MODULE_DEPENDS_ANDROID
1743+
# Swift modules this library depends on when built for Android.
1744+
#
17421745
# FRAMEWORK_DEPENDS
17431746
# System frameworks this library depends on.
17441747
#
@@ -1862,6 +1865,7 @@ function(add_swift_target_library name)
18621865
SWIFT_COMPILE_FLAGS_XROS
18631866
SWIFT_COMPILE_FLAGS_LINUX
18641867
SWIFT_MODULE_DEPENDS
1868+
SWIFT_MODULE_DEPENDS_ANDROID
18651869
SWIFT_MODULE_DEPENDS_CYGWIN
18661870
SWIFT_MODULE_DEPENDS_FREEBSD
18671871
SWIFT_MODULE_DEPENDS_FREESTANDING
@@ -2061,9 +2065,12 @@ function(add_swift_target_library name)
20612065
elseif(sdk STREQUAL "OPENBSD")
20622066
list(APPEND swiftlib_module_depends_flattened
20632067
${SWIFTLIB_SWIFT_MODULE_DEPENDS_OPENBSD})
2064-
elseif(sdk STREQUAL "LINUX" OR sdk STREQUAL "ANDROID")
2068+
elseif(sdk STREQUAL "LINUX")
20652069
list(APPEND swiftlib_module_depends_flattened
20662070
${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX})
2071+
elseif(sdk STREQUAL "ANDROID")
2072+
list(APPEND swiftlib_module_depends_flattened
2073+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_ANDROID})
20672074
elseif(sdk STREQUAL "CYGWIN")
20682075
list(APPEND swiftlib_module_depends_flattened
20692076
${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN})
@@ -2861,6 +2868,7 @@ function(add_swift_target_executable name)
28612868
DEPENDS
28622869
LINK_LIBRARIES
28632870
SWIFT_MODULE_DEPENDS
2871+
SWIFT_MODULE_DEPENDS_ANDROID
28642872
SWIFT_MODULE_DEPENDS_CYGWIN
28652873
SWIFT_MODULE_DEPENDS_FREEBSD
28662874
SWIFT_MODULE_DEPENDS_FREESTANDING
@@ -2962,9 +2970,12 @@ function(add_swift_target_executable name)
29622970
elseif(sdk STREQUAL "OPENBSD")
29632971
list(APPEND swiftexe_module_depends_flattened
29642972
${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_OPENBSD})
2965-
elseif(sdk STREQUAL "LINUX" OR sdk STREQUAL "ANDROID")
2973+
elseif(sdk STREQUAL "LINUX")
29662974
list(APPEND swiftexe_module_depends_flattened
29672975
${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_LINUX})
2976+
elseif(sdk STREQUAL "ANDROID")
2977+
list(APPEND swiftexe_module_depends_flattened
2978+
${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_ANDROID})
29682979
elseif(sdk STREQUAL "CYGWIN")
29692980
list(APPEND swiftexe_module_depends_flattened
29702981
${SWIFTEXE_TARGET_SWIFT_MODULE_DEPENDS_CYGWIN})

stdlib/private/RuntimeUnittest/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ add_swift_target_library(swiftRuntimeUnittest ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES
88
ExclusivityTests.cpp
99

1010
SWIFT_MODULE_DEPENDS StdlibUnittest
11+
SWIFT_MODULE_DEPENDS_ANDROID Android
1112
SWIFT_MODULE_DEPENDS_LINUX Glibc
1213
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
1314
SWIFT_MODULE_DEPENDS_OPENBSD Glibc

stdlib/private/StdlibCollectionUnittest/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ add_swift_target_library(swiftStdlibCollectionUnittest ${SWIFT_STDLIB_LIBRARY_BU
1919
WriteBackMutableSlice.swift
2020

2121
SWIFT_MODULE_DEPENDS StdlibUnittest
22+
SWIFT_MODULE_DEPENDS_ANDROID Android
2223
SWIFT_MODULE_DEPENDS_LINUX Glibc
2324
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
2425
SWIFT_MODULE_DEPENDS_OPENBSD Glibc

stdlib/private/StdlibUnicodeUnittest/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ add_swift_target_library(swiftStdlibUnicodeUnittest ${SWIFT_STDLIB_LIBRARY_BUILD
1010
WordBreaking.swift
1111

1212
SWIFT_MODULE_DEPENDS StdlibUnittest
13+
SWIFT_MODULE_DEPENDS_ANDROID Android
1314
SWIFT_MODULE_DEPENDS_LINUX Glibc
1415
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
1516
SWIFT_MODULE_DEPENDS_OPENBSD Glibc

stdlib/private/StdlibUnittest/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ add_swift_target_library(swiftStdlibUnittest ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES}
6262
SWIFT_MODULE_DEPENDS_XROS ${swift_stdlib_unittest_darwin_dependencies}
6363
SWIFT_MODULE_DEPENDS_MACCATALYST ${swift_stdlib_unittest_darwin_dependencies}
6464
SWIFT_MODULE_DEPENDS_FREESTANDING "${SWIFT_FREESTANDING_TEST_DEPENDENCIES}"
65+
SWIFT_MODULE_DEPENDS_ANDROID Android
6566
SWIFT_MODULE_DEPENDS_LINUX Glibc
6667
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
6768
SWIFT_MODULE_DEPENDS_OPENBSD Glibc

stdlib/private/StdlibUnittest/RaceTest.swift

+2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ import Darwin
4545
import Glibc
4646
#elseif canImport(Musl)
4747
import Musl
48+
#elseif canImport(Android)
49+
import Android
4850
#elseif os(WASI)
4951
import WASILibc
5052
#elseif os(Windows)

stdlib/private/StdlibUnittest/StdlibCoreExtras.swift

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import Darwin
1818
import Glibc
1919
#elseif canImport(Musl)
2020
import Musl
21+
#elseif canImport(Android)
22+
import Android
2123
#elseif os(WASI)
2224
import WASILibc
2325
#elseif os(Windows)

stdlib/private/StdlibUnittest/StdlibUnittest.swift

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import Darwin
2424
import Glibc
2525
#elseif canImport(Musl)
2626
import Musl
27+
#elseif canImport(Android)
28+
import Android
2729
#elseif os(WASI)
2830
import WASILibc
2931
#elseif os(Windows)

stdlib/private/SwiftPrivate/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ add_swift_target_library(swiftSwiftPrivate ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} I
2727
SWIFT_MODULE_DEPENDS_WATCHOS ${swift_swiftprivate_darwin_depencencies}
2828
SWIFT_MODULE_DEPENDS_MACCATALYST ${swift_swiftprivate_darwin_depencencies}
2929
SWIFT_MODULE_DEPENDS_FREESTANDING "${SWIFT_FREESTANDING_TEST_DEPENDENCIES}"
30+
SWIFT_MODULE_DEPENDS_ANDROID Android
3031
SWIFT_MODULE_DEPENDS_LINUX Glibc
3132
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
3233
SWIFT_MODULE_DEPENDS_OPENBSD Glibc

stdlib/private/SwiftPrivate/IO.swift

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import Darwin
2323
import Glibc
2424
#elseif canImport(Musl)
2525
import Musl
26+
#elseif canImport(Android)
27+
import Android
2628
#elseif canImport(WASILibc)
2729
import WASILibc
2830
#endif

stdlib/private/SwiftPrivateLibcExtras/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ add_swift_target_library(swiftSwiftPrivateLibcExtras ${SWIFT_STDLIB_LIBRARY_BUIL
3838
SWIFT_MODULE_DEPENDS_XROS ${swift_private_libc_extras_darwin_depencencies}
3939
SWIFT_MODULE_DEPENDS_MACCATALYST ${swift_private_libc_extras_darwin_depencencies}
4040
SWIFT_MODULE_DEPENDS_FREESTANDING "${SWIFT_FREESTANDING_TEST_DEPENDENCIES}"
41+
SWIFT_MODULE_DEPENDS_ANDROID Android
4142
SWIFT_MODULE_DEPENDS_LINUX Glibc
4243
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
4344
SWIFT_MODULE_DEPENDS_OPENBSD Glibc

stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import Darwin
1717
import Glibc
1818
#elseif canImport(Musl)
1919
import Musl
20+
#elseif canImport(Android)
21+
import Android
2022
#elseif os(WASI)
2123
import WASILibc
2224
#elseif os(Windows)

stdlib/private/SwiftPrivateLibcExtras/SwiftPrivateLibcExtras.swift

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import Darwin
1717
import Glibc
1818
#elseif canImport(Musl)
1919
import Musl
20+
#elseif canImport(Android)
21+
import Android
2022
#elseif os(WASI)
2123
import WASILibc
2224
#elseif os(Windows)

stdlib/private/SwiftPrivateThreadExtras/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ add_swift_target_library(swiftSwiftPrivateThreadExtras ${SWIFT_STDLIB_LIBRARY_BU
1919
SWIFT_MODULE_DEPENDS_XROS ${swift_private_thread_extras_darwin_depencencies}
2020
SWIFT_MODULE_DEPENDS_MACCATALYST ${swift_private_thread_extras_darwin_depencencies}
2121
SWIFT_MODULE_DEPENDS_FREESTANDING "${SWIFT_FREESTANDING_TEST_DEPENDENCIES}"
22+
SWIFT_MODULE_DEPENDS_ANDROID Android
2223
SWIFT_MODULE_DEPENDS_LINUX Glibc
2324
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
2425
SWIFT_MODULE_DEPENDS_OPENBSD Glibc

stdlib/private/SwiftPrivateThreadExtras/SwiftPrivateThreadExtras.swift

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import Darwin
2121
import Glibc
2222
#elseif canImport(Musl)
2323
import Musl
24+
#elseif canImport(Android)
25+
import Android
2426
#elseif os(WASI)
2527
import WASILibc
2628
#elseif os(Windows)

stdlib/private/SwiftPrivateThreadExtras/ThreadBarriers.swift

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import Darwin
1616
import Glibc
1717
#elseif canImport(Musl)
1818
import Musl
19+
#elseif canImport(Android)
20+
import Android
1921
#elseif os(WASI)
2022
import WASILibc
2123
#elseif os(Windows)

stdlib/private/SwiftReflectionTest/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ if (SWIFT_INCLUDE_TESTS AND SWIFT_BUILD_DYNAMIC_STDLIB)
1414
SWIFT_MODULE_DEPENDS_TVOS ${swift_reflection_test_darwin_depencencies}
1515
SWIFT_MODULE_DEPENDS_WATCHOS ${swift_reflection_test_darwin_depencencies}
1616
SWIFT_MODULE_DEPENDS_XROS ${swift_reflection_test_darwin_depencencies}
17+
SWIFT_MODULE_DEPENDS_ANDROID Android
1718
SWIFT_MODULE_DEPENDS_LINUX Glibc
1819
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
1920
SWIFT_MODULE_DEPENDS_OPENBSD Glibc

stdlib/private/SwiftReflectionTest/SwiftReflectionTest.swift

+2
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ import SwiftShims
131131
import Glibc
132132
#elseif canImport(Musl)
133133
import Musl
134+
#elseif canImport(Android)
135+
import Android
134136
#endif
135137

136138
let rtldDefault: UnsafeMutableRawPointer? = nil

stdlib/public/Concurrency/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ add_swift_target_library(swift_Concurrency ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} I
156156
${SWIFT_RUNTIME_CONCURRENCY_C_SOURCES}
157157
${SWIFT_RUNTIME_CONCURRENCY_SWIFT_SOURCES}
158158

159+
SWIFT_MODULE_DEPENDS_ANDROID Android
159160
SWIFT_MODULE_DEPENDS_LINUX Glibc
160161
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
161162
SWIFT_MODULE_DEPENDS_OPENBSD Glibc

stdlib/public/Differentiation/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ add_swift_target_library(swift_Differentiation ${SWIFT_STDLIB_LIBRARY_BUILD_TYPE
4242
SWIFT_MODULE_DEPENDS_TVOS ${swiftDifferentiationDarwinDependencies}
4343
SWIFT_MODULE_DEPENDS_WATCHOS ${swiftDifferentiationDarwinDependencies}
4444
SWIFT_MODULE_DEPENDS_XROS ${swiftDifferentiationDarwinDependencies}
45+
SWIFT_MODULE_DEPENDS_ANDROID Android
4546
SWIFT_MODULE_DEPENDS_LINUX Glibc
4647
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
4748
SWIFT_MODULE_DEPENDS_OPENBSD Glibc

stdlib/public/Differentiation/TgmathDerivatives.swift.gyb

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ import Swift
1818
import Darwin.C.tgmath
1919
#elseif canImport(Musl)
2020
import Musl
21-
#elseif os(Linux) || os(FreeBSD) || os(OpenBSD) || os(PS4) || os(Android) || os(Cygwin) || os(Haiku)
21+
#elseif os(Linux) || os(FreeBSD) || os(OpenBSD) || os(PS4) || os(Cygwin) || os(Haiku)
2222
import Glibc
2323
#elseif os(WASI)
2424
import WASILibc
2525
#elseif os(Windows)
2626
import CRT
27+
#elseif os(Android)
28+
import Android
2729
#else
2830
#error("Unsupported platform")
2931
#endif

stdlib/public/Distributed/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ add_swift_target_library(swiftDistributed ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS
3434
SWIFT_MODULE_DEPENDS_OSX ${swift_distributed_darwin_depencencies}
3535
SWIFT_MODULE_DEPENDS_TVOS ${swift_distributed_darwin_depencencies}
3636
SWIFT_MODULE_DEPENDS_WATCHOS ${swift_distributed_darwin_depencencies}
37+
SWIFT_MODULE_DEPENDS_ANDROID Android
3738
SWIFT_MODULE_DEPENDS_LINUX Glibc
3839
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
3940
SWIFT_MODULE_DEPENDS_OPENBSD Glibc

stdlib/public/Distributed/LocalTestingDistributedActorSystem.swift

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import Darwin
1818
import Glibc
1919
#elseif canImport(Musl)
2020
import Musl
21+
#elseif canImport(Android)
22+
import Android
2123
#elseif os(Windows)
2224
import WinSDK
2325
#endif

stdlib/public/Platform/Android.swift

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See https://swift.org/LICENSE.txt for license information
9+
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
@_exported import SwiftAndroid // Clang module
14+
15+
@available(swift, deprecated: 3.0, message: "Please use 'Double.pi' or '.pi' to get the value of correct type and avoid casting.")
16+
public let M_PI = Double.pi
17+
@available(swift, deprecated: 3.0, message: "Please use 'Double.pi / 2' or '.pi / 2' to get the value of correct type and avoid casting.")
18+
public let M_PI_2 = Double.pi / 2
19+
@available(swift, deprecated: 3.0, message: "Please use 'Double.pi / 4' or '.pi / 4' to get the value of correct type and avoid casting.")
20+
public let M_PI_4 = Double.pi / 4
21+
22+
@available(swift, deprecated: 3.0, message: "Please use 2.squareRoot()'.")
23+
public let M_SQRT2 = 2.squareRoot()
24+
25+
@available(swift, deprecated: 3.0, message: "Please use 0.5.squareRoot()'.")
26+
public let M_SQRT1_2 = 0.5.squareRoot()
27+
28+
@available(swift, deprecated: 3.0, message: "Please use 'T.radix' to get the radix of a FloatingPoint type 'T'.")
29+
public let FLT_RADIX = Double.radix
30+
31+
// Where does the 1 come from? C counts the usually-implicit leading
32+
// significand bit, but Swift does not. Neither is really right or wrong.
33+
@available(swift, deprecated: 3.0, message: "Please use 'Float.significandBitCount + 1'.")
34+
public let FLT_MANT_DIG = Float.significandBitCount + 1
35+
36+
// Where does the 1 come from? C models floating-point numbers as having a
37+
// significand in [0.5, 1), but Swift (following IEEE 754) considers the
38+
// significand to be in [1, 2). This rationale applies to FLT_MIN_EXP
39+
// as well.
40+
@available(swift, deprecated: 3.0, message: "Please use 'Float.greatestFiniteMagnitude.exponent + 1'.")
41+
public let FLT_MAX_EXP = Float.greatestFiniteMagnitude.exponent + 1
42+
43+
@available(swift, deprecated: 3.0, message: "Please use 'Float.leastNormalMagnitude.exponent + 1'.")
44+
public let FLT_MIN_EXP = Float.leastNormalMagnitude.exponent + 1
45+
46+
@available(swift, deprecated: 3.0, message: "Please use 'Float.greatestFiniteMagnitude' or '.greatestFiniteMagnitude'.")
47+
public let FLT_MAX = Float.greatestFiniteMagnitude
48+
49+
@available(swift, deprecated: 3.0, message: "Please use 'Float.ulpOfOne' or '.ulpOfOne'.")
50+
public let FLT_EPSILON = Float.ulpOfOne
51+
52+
@available(swift, deprecated: 3.0, message: "Please use 'Float.leastNormalMagnitude' or '.leastNormalMagnitude'.")
53+
public let FLT_MIN = Float.leastNormalMagnitude
54+
55+
@available(swift, deprecated: 3.0, message: "Please use 'Float.leastNonzeroMagnitude' or '.leastNonzeroMagnitude'.")
56+
public let FLT_TRUE_MIN = Float.leastNonzeroMagnitude
57+
58+
59+
// Where does the 1 come from? C counts the usually-implicit leading
60+
// significand bit, but Swift does not. Neither is really right or wrong.
61+
@available(swift, deprecated: 3.0, message: "Please use 'Double.significandBitCount + 1'.")
62+
public let DBL_MANT_DIG = Double.significandBitCount + 1
63+
64+
// Where does the 1 come from? C models floating-point numbers as having a
65+
// significand in [0.5, 1), but Swift (following IEEE 754) considers the
66+
// significand to be in [1, 2). This rationale applies to DBL_MIN_EXP
67+
// as well.
68+
@available(swift, deprecated: 3.0, message: "Please use 'Double.greatestFiniteMagnitude.exponent + 1'.")
69+
public let DBL_MAX_EXP = Double.greatestFiniteMagnitude.exponent + 1
70+
71+
@available(swift, deprecated: 3.0, message: "Please use 'Double.leastNormalMagnitude.exponent + 1'.")
72+
public let DBL_MIN_EXP = Double.leastNormalMagnitude.exponent + 1
73+
74+
@available(swift, deprecated: 3.0, message: "Please use 'Double.greatestFiniteMagnitude' or '.greatestFiniteMagnitude'.")
75+
public let DBL_MAX = Double.greatestFiniteMagnitude
76+
77+
@available(swift, deprecated: 3.0, message: "Please use 'Double.ulpOfOne' or '.ulpOfOne'.")
78+
public let DBL_EPSILON = Double.ulpOfOne
79+
80+
@available(swift, deprecated: 3.0, message: "Please use 'Double.leastNormalMagnitude' or '.leastNormalMagnitude'.")
81+
public let DBL_MIN = Double.leastNormalMagnitude
82+
83+
@available(swift, deprecated: 3.0, message: "Please use 'Double.leastNonzeroMagnitude' or '.leastNonzeroMagnitude'.")
84+
public let DBL_TRUE_MIN = Double.leastNonzeroMagnitude
85+
86+
public let M_LN2 = SwiftAndroid.M_LN2
87+
public let M_LOG10E = SwiftAndroid.M_LOG10E
88+
public let M_2_SQRTPI = SwiftAndroid.M_2_SQRTPI

0 commit comments

Comments
 (0)