Skip to content

Commit a1e0e5f

Browse files
committed
android: add Android to list of possible target OSes, stdlib now compiles
1 parent 2d8f6e8 commit a1e0e5f

File tree

10 files changed

+53
-19
lines changed

10 files changed

+53
-19
lines changed

lib/Basic/LangOptions.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ const std::vector<std::string> LangOptions::SupportedOSBuildConfigArguments = {
2828
"tvOS",
2929
"watchOS",
3030
"iOS",
31-
"Linux"
31+
"Linux",
32+
"Android"
3233
};
3334

3435
const std::vector<std::string> LangOptions::SupportedArchBuildConfigArguments = {
@@ -96,6 +97,8 @@ std::pair<bool, bool> LangOptions::setTarget(llvm::Triple triple) {
9697
addTargetConfigOption("os", "watchOS");
9798
else if (triple.isiOS())
9899
addTargetConfigOption("os", "iOS");
100+
else if (triple.isAndroid())
101+
addTargetConfigOption("os", "Android");
99102
else if (triple.isOSLinux())
100103
addTargetConfigOption("os", "Linux");
101104
else {

stdlib/private/StdlibUnittest/RaceTest.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import SwiftPrivate
4040
import SwiftPrivatePthreadExtras
4141
#if os(OSX) || os(iOS)
4242
import Darwin
43-
#elseif os(Linux)
43+
#elseif os(Linux) || os(Android)
4444
import Glibc
4545
#endif
4646

stdlib/private/StdlibUnittest/StdlibCoreExtras.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import SwiftPrivate
1414
import SwiftPrivateDarwinExtras
1515
#if os(OSX) || os(iOS)
1616
import Darwin
17-
#elseif os(Linux)
17+
#elseif os(Linux) || os(Android)
1818
import Glibc
1919
#endif
2020

stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb

+18-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import SwiftPrivateDarwinExtras
1616

1717
#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
1818
import Darwin
19-
#elseif os(Linux)
19+
#elseif os(Linux) || os(Android)
2020
import Glibc
2121
#endif
2222

@@ -985,6 +985,7 @@ public enum OSVersion : CustomStringConvertible {
985985
case TVOSSimulator
986986
case watchOSSimulator
987987
case Linux
988+
case Android
988989

989990
public var description: String {
990991
switch self {
@@ -1004,6 +1005,8 @@ public enum OSVersion : CustomStringConvertible {
10041005
return "watchOSSimulator"
10051006
case Linux:
10061007
return "Linux"
1008+
case Android:
1009+
return "Android"
10071010
}
10081011
}
10091012
}
@@ -1036,6 +1039,8 @@ func _getOSVersion() -> OSVersion {
10361039
return .watchOSSimulator
10371040
#elseif os(Linux)
10381041
return .Linux
1042+
#elseif os(Android)
1043+
return .Android
10391044
#else
10401045
let productName = _stdlib_getSystemVersionPlistProperty("ProductName")!
10411046
let productVersion = _stdlib_getSystemVersionPlistProperty("ProductVersion")!
@@ -1106,6 +1111,7 @@ public enum TestRunPredicate : CustomStringConvertible {
11061111
case watchOSSimulatorAny(/*reason:*/ String)
11071112

11081113
case LinuxAny(reason: String)
1114+
case AndroidAny(reason: String)
11091115

11101116
public var description: String {
11111117
switch self {
@@ -1174,6 +1180,9 @@ public enum TestRunPredicate : CustomStringConvertible {
11741180

11751181
case LinuxAny(reason: let reason):
11761182
return "LinuxAny(*, reason: \(reason))"
1183+
1184+
case AndroidAny(reason: let reason):
1185+
return "AndroidAny(*, reason: \(reason))"
11771186
}
11781187
}
11791188

@@ -1405,6 +1414,14 @@ public enum TestRunPredicate : CustomStringConvertible {
14051414
default:
14061415
return false
14071416
}
1417+
1418+
case AndroidAny:
1419+
switch _getRunningOSVersion() {
1420+
case .Android:
1421+
return true
1422+
default:
1423+
return false
1424+
}
14081425
}
14091426
}
14101427
}

stdlib/private/SwiftPrivateDarwinExtras/Subprocess.swift

+11-1
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@
1313
import SwiftPrivate
1414
#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
1515
import Darwin
16-
#elseif os(Linux)
16+
#elseif os(Linux) || os(Android)
1717
import Glibc
1818
#endif
1919

20+
#if !os(Android)
21+
2022
// swift_posix_spawn isn't available in the public watchOS SDK, we sneak by the
2123
// unavailable attribute declaration here of the APIs that we need.
2224

@@ -47,6 +49,8 @@ func swift_posix_spawn(
4749
_ argv: UnsafePointer<UnsafeMutablePointer<Int8>>,
4850
_ envp: UnsafePointer<UnsafeMutablePointer<Int8>>) -> CInt
4951

52+
#endif
53+
5054
/// Calls POSIX `pipe()`.
5155
func posixPipe() -> (readFD: CInt, writeFD: CInt) {
5256
var fds: [CInt] = [ -1, -1 ]
@@ -64,6 +68,9 @@ func posixPipe() -> (readFD: CInt, writeFD: CInt) {
6468
/// stderr.
6569
public func spawnChild(args: [String])
6670
-> (pid: pid_t, stdinFD: CInt, stdoutFD: CInt, stderrFD: CInt) {
71+
#if os(Android)
72+
preconditionFailure("posix_spawn doesn't exist on Android")
73+
#else
6774
var fileActions = posix_spawn_file_actions_t()
6875
if swift_posix_spawn_file_actions_init(&fileActions) != 0 {
6976
preconditionFailure("swift_posix_spawn_file_actions_init() failed")
@@ -138,6 +145,7 @@ public func spawnChild(args: [String])
138145
}
139146

140147
return (pid, childStdin.writeFD, childStdout.readFD, childStderr.readFD)
148+
#endif
141149
}
142150

143151
internal func _readAll(fd: CInt) -> String {
@@ -232,6 +240,8 @@ func _NSGetEnviron() -> UnsafeMutablePointer<UnsafeMutablePointer<UnsafeMutableP
232240
internal func _getEnviron() -> UnsafeMutablePointer<UnsafeMutablePointer<CChar>> {
233241
#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
234242
return _NSGetEnviron().memory
243+
#elseif os(Android)
244+
return environ
235245
#else
236246
return __environ
237247
#endif

stdlib/private/SwiftPrivateDarwinExtras/SwiftPrivateDarwinExtras.swift

+5-1
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@
1313
import SwiftPrivate
1414
#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
1515
import Darwin
16-
#elseif os(Linux)
16+
#elseif os(Linux) || os(Android)
1717
import Glibc
1818
#endif
1919

2020
public func _stdlib_mkstemps(inout template: String, _ suffixlen: CInt) -> CInt {
21+
#if os(Android)
22+
preconditionFailure("mkstemps doesn't work on Android")
23+
#else
2124
var utf8 = template.nulTerminatedUTF8
2225
let (fd, fileName) = utf8.withUnsafeMutableBufferPointer {
2326
(utf8) -> (CInt, String) in
@@ -27,6 +30,7 @@ public func _stdlib_mkstemps(inout template: String, _ suffixlen: CInt) -> CInt
2730
}
2831
template = fileName
2932
return fd
33+
#endif
3034
}
3135

3236
public var _stdlib_FD_SETSIZE: CInt {

stdlib/private/SwiftPrivatePthreadExtras/PthreadBarriers.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
1414
import Darwin
15-
#elseif os(Linux)
15+
#elseif os(Linux) || os(Android)
1616
import Glibc
1717
#endif
1818

stdlib/private/SwiftPrivatePthreadExtras/SwiftPrivatePthreadExtras.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
1919
import Darwin
20-
#elseif os(Linux)
20+
#elseif os(Linux) || os(Android)
2121
import Glibc
2222
#endif
2323

stdlib/public/Bionic/Glibc.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818

1919
public var errno: Int32 {
2020
get {
21-
return __errno_location().memory
21+
return __errno().memory
2222
}
2323
set(val) {
24-
return __errno_location().memory = val
24+
return __errno().memory = val
2525
}
2626
}
2727

@@ -61,7 +61,7 @@ public var S_ISVTX: mode_t { return mode_t(0o001000) }
6161
// signal.h
6262
//===----------------------------------------------------------------------===//
6363

64-
#if os(Linux)
64+
#if os(Android)
6565
public var SIG_DFL: __sighandler_t? { return nil }
6666
public var SIG_IGN: __sighandler_t {
6767
return unsafeBitCast(1, __sighandler_t.self)

stdlib/public/Bionic/module.map

+8-8
Original file line numberDiff line numberDiff line change
@@ -345,10 +345,10 @@ module SwiftBionic [system] {
345345
header "SYSROOT/usr/include/termios.h"
346346
export *
347347
}
348-
module ulimit {
349-
header "SYSROOT/usr/include/ulimit.h"
350-
export *
351-
}
348+
//module ulimit {
349+
// header "SYSROOT/usr/include/ulimit.h"
350+
// export *
351+
//}
352352
module unistd {
353353
header "SYSROOT/usr/include/unistd.h"
354354
export *
@@ -361,10 +361,10 @@ module SwiftBionic [system] {
361361
// header "SYSROOT/usr/include/utmpx.h"
362362
// export *
363363
//}
364-
module wait {
365-
header "SYSROOT/usr/include/wait.h"
366-
export *
367-
}
364+
//module wait {
365+
// header "SYSROOT/usr/include/wait.h"
366+
// export *
367+
//}
368368
//module wordexp {
369369
// header "SYSROOT/usr/include/wordexp.h"
370370
// export *

0 commit comments

Comments
 (0)