Skip to content

Commit c82d167

Browse files
Add WASI platform conditions for libc imports and word size (#776)
* Add `import WASILibc` statements to libc import chains * Declare wasm32 arch as 32-bit environment * Switch to _pointerBitWidth for architecture checks This change switches the architecture checks in Data.swift to use the _pointerBitWidth instead of the arch() checks for consistency with newer platforms.
1 parent 22b8e46 commit c82d167

21 files changed

+49
-6
lines changed

Sources/FoundationEssentials/Calendar/Calendar.swift

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

2325
#if FOUNDATION_FRAMEWORK

Sources/FoundationEssentials/Calendar/Calendar_Gregorian.swift

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

2325

Sources/FoundationEssentials/Data/Data+Reading.swift

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import Glibc
2525
#elseif os(Windows)
2626
import CRT
2727
import WinSDK
28+
#elseif os(WASI)
29+
import WASILibc
2830
#endif
2931

3032
func _fgetxattr(_ fd: Int32, _ name: UnsafePointer<CChar>!, _ value: UnsafeMutableRawPointer!, _ size: Int, _ position: UInt32, _ options: Int32) -> Int {

Sources/FoundationEssentials/Data/Data+Writing.swift

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import Glibc
2727
#elseif os(Windows)
2828
import CRT
2929
import WinSDK
30+
#elseif os(WASI)
31+
import WASILibc
3032
#endif
3133

3234
#if !NO_FILESYSTEM

Sources/FoundationEssentials/Data/Data.swift

+8-6
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ import Glibc
7676
import Musl
7777
#elseif canImport(ucrt)
7878
import ucrt
79+
#elseif canImport(WASILibc)
80+
import WASILibc
7981
#endif
8082

8183
#if os(Windows)
@@ -580,11 +582,11 @@ public struct Data : Equatable, Hashable, RandomAccessCollection, MutableCollect
580582
@usableFromInline
581583
@frozen
582584
internal struct InlineData : Sendable {
583-
#if arch(x86_64) || arch(arm64) || arch(s390x) || arch(powerpc64) || arch(powerpc64le)
585+
#if _pointerBitWidth(_64)
584586
@usableFromInline typealias Buffer = (UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8,
585587
UInt8, UInt8, UInt8, UInt8, UInt8, UInt8) //len //enum
586588
@usableFromInline var bytes: Buffer
587-
#elseif arch(i386) || arch(arm) || arch(arm64_32)
589+
#elseif _pointerBitWidth(_32)
588590
@usableFromInline typealias Buffer = (UInt8, UInt8, UInt8, UInt8,
589591
UInt8, UInt8) //len //enum
590592
@usableFromInline var bytes: Buffer
@@ -615,9 +617,9 @@ public struct Data : Equatable, Hashable, RandomAccessCollection, MutableCollect
615617
@inlinable // This is @inlinable as a trivial initializer.
616618
init(count: Int = 0) {
617619
assert(count <= MemoryLayout<Buffer>.size)
618-
#if arch(x86_64) || arch(arm64) || arch(s390x) || arch(powerpc64) || arch(powerpc64le)
620+
#if _pointerBitWidth(_64)
619621
bytes = (UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0))
620-
#elseif arch(i386) || arch(arm) || arch(arm64_32)
622+
#elseif _pointerBitWidth(_32)
621623
bytes = (UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0))
622624
#else
623625
#error ("Unsupported architecture: initialization for Buffer is required for this architecture")
@@ -802,9 +804,9 @@ public struct Data : Equatable, Hashable, RandomAccessCollection, MutableCollect
802804
}
803805
}
804806

805-
#if arch(x86_64) || arch(arm64) || arch(s390x) || arch(powerpc64) || arch(powerpc64le)
807+
#if _pointerBitWidth(_64)
806808
@usableFromInline internal typealias HalfInt = Int32
807-
#elseif arch(i386) || arch(arm) || arch(arm64_32)
809+
#elseif _pointerBitWidth(_32)
808810
@usableFromInline internal typealias HalfInt = Int16
809811
#else
810812
#error ("Unsupported architecture: a definition of half of the pointer sized Int needs to be defined for this architecture")

Sources/FoundationEssentials/Date.swift

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import Bionic
1818
import Glibc
1919
#elseif canImport(WinSDK)
2020
import WinSDK
21+
#elseif os(WASI)
22+
import WASILibc
2123
#endif
2224

2325
#if !FOUNDATION_FRAMEWORK

Sources/FoundationEssentials/Decimal/Decimal+Math.swift

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

2325
private let powerOfTen: [Decimal.VariableLengthInteger] = [

Sources/FoundationEssentials/Error/CocoaError+FilePath.swift

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import Glibc
2222
#elseif os(Windows)
2323
import CRT
2424
import WinSDK
25+
#elseif os(WASI)
26+
import WASILibc
2527
#endif
2628

2729
extension CocoaError.Code {

Sources/FoundationEssentials/Error/ErrorCodes+POSIX.swift

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#elseif os(Windows)
2020
import CRT
2121
import WinSDK
22+
#elseif os(WASI)
23+
import WASILibc
2224
#endif
2325

2426
#if FOUNDATION_FRAMEWORK

Sources/FoundationEssentials/FileManager/FileManager+Basics.swift

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import Glibc
1919
#elseif os(Windows)
2020
import CRT
2121
import WinSDK
22+
#elseif os(WASI)
23+
import WASILibc
2224
#endif
2325

2426
#if os(Windows)

Sources/FoundationEssentials/FileManager/FileManager+Directories.swift

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import Glibc
2626
#elseif os(Windows)
2727
import CRT
2828
import WinSDK
29+
#elseif os(WASI)
30+
import WASILibc
2931
#endif
3032

3133
internal import _FoundationCShims

Sources/FoundationEssentials/FileManager/FileManager+Files.swift

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ internal import _FoundationCShims
2626
#elseif os(Windows)
2727
import CRT
2828
import WinSDK
29+
#elseif os(WASI)
30+
internal import _FoundationCShims
31+
import WASILibc
2932
#endif
3033

3134
extension Date {

Sources/FoundationEssentials/FileManager/FileManager+SymbolicLinks.swift

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import Glibc
2121
import CRT
2222
import WinSDK
2323
internal import _FoundationCShims
24+
#elseif os(WASI)
25+
import WASILibc
2426
#endif
2527

2628
extension _FileManagerImpl {

Sources/FoundationEssentials/FileManager/FileManager+Utilities.swift

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ internal import _FoundationCShims
3131
#elseif os(Windows)
3232
import CRT
3333
import WinSDK
34+
#elseif os(WASI)
35+
import WASILibc
3436
#endif
3537

3638
#if os(Windows)

Sources/FoundationEssentials/FileManager/FileOperations.swift

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import Glibc
1919
#elseif os(Windows)
2020
import CRT
2121
import WinSDK
22+
#elseif os(WASI)
23+
import WASILibc
2224
#endif
2325

2426
#if FOUNDATION_FRAMEWORK

Sources/FoundationEssentials/Formatting/BinaryInteger+NumericStringRepresentation.swift

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

2325
// MARK: - BinaryInteger + Numeric string representation

Sources/FoundationEssentials/ProcessInfo/ProcessInfo.swift

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import unistd
2121
import Glibc
2222
#elseif os(Windows)
2323
import WinSDK
24+
#elseif os(WASI)
25+
import WASILibc
2426
#endif
2527

2628
#if !NO_PROCESS

Sources/FoundationEssentials/PropertyList/OpenStepPlist.swift

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

2123
#if canImport(CRT)

Sources/FoundationEssentials/String/String+Path.swift

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

2325
internal import _FoundationCShims

Sources/FoundationInternationalization/Calendar/Calendar_ICU.swift

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import Glibc
2222
import CRT
2323
#elseif canImport(Darwin)
2424
import Darwin
25+
#elseif os(WASI)
26+
import WASILibc
2527
#endif
2628

2729
internal import _FoundationICU

Sources/FoundationInternationalization/Formatting/Duration+Formatting.swift

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import Android
2222
import Glibc
2323
#elseif os(Windows)
2424
import CRT
25+
#elseif os(WASI)
26+
import WASILibc
2527
#endif
2628

2729
@available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)

0 commit comments

Comments
 (0)