Skip to content

Commit f43b97e

Browse files
tinysun212Han Sangjin
authored andcommitted
[stdlib] Fixed for Cygwin
- CYGWIN symbol is used to distinguish Cygwin environment from other OS and other environment in Windows. - Added windows and windowsCygnus to OSVersion in StdlibUnittest
1 parent 5d5334a commit f43b97e

25 files changed

+144
-42
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,7 @@ function(_add_swift_library_single target name)
812812
elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "CYGWIN")
813813
set_target_properties("${target}"
814814
PROPERTIES
815-
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/windows")
815+
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/cygwin")
816816
endif()
817817

818818
set_target_properties("${target}" PROPERTIES BUILD_WITH_INSTALL_RPATH YES)
@@ -1156,6 +1156,9 @@ endfunction()
11561156
# SWIFT_MODULE_DEPENDS_LINUX
11571157
# Swift modules this library depends on when built for Linux.
11581158
#
1159+
# SWIFT_MODULE_DEPENDS_CYGWIN
1160+
# Swift modules this library depends on when built for Cygwin.
1161+
#
11591162
# FRAMEWORK_DEPENDS
11601163
# System frameworks this library depends on.
11611164
#
@@ -1220,7 +1223,7 @@ function(add_swift_library name)
12201223
cmake_parse_arguments(SWIFTLIB
12211224
"${SWIFTLIB_options}"
12221225
"INSTALL_IN_COMPONENT;DEPLOYMENT_VERSION_IOS"
1223-
"DEPENDS;LINK_LIBRARIES;SWIFT_MODULE_DEPENDS;SWIFT_MODULE_DEPENDS_OSX;SWIFT_MODULE_DEPENDS_IOS;SWIFT_MODULE_DEPENDS_TVOS;SWIFT_MODULE_DEPENDS_WATCHOS;SWIFT_MODULE_DEPENDS_FREEBSD;SWIFT_MODULE_DEPENDS_LINUX;FRAMEWORK_DEPENDS;FRAMEWORK_DEPENDS_WEAK;FRAMEWORK_DEPENDS_OSX;FRAMEWORK_DEPENDS_IOS_TVOS;LLVM_COMPONENT_DEPENDS;FILE_DEPENDS;TARGET_SDKS;C_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS_OSX;SWIFT_COMPILE_FLAGS_IOS;SWIFT_COMPILE_FLAGS_TVOS;SWIFT_COMPILE_FLAGS_WATCHOS;LINK_FLAGS;PRIVATE_LINK_LIBRARIES;INTERFACE_LINK_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES"
1226+
"DEPENDS;LINK_LIBRARIES;SWIFT_MODULE_DEPENDS;SWIFT_MODULE_DEPENDS_OSX;SWIFT_MODULE_DEPENDS_IOS;SWIFT_MODULE_DEPENDS_TVOS;SWIFT_MODULE_DEPENDS_WATCHOS;SWIFT_MODULE_DEPENDS_FREEBSD;SWIFT_MODULE_DEPENDS_LINUX;SWIFT_MODULE_DEPENDS_CYGWIN;FRAMEWORK_DEPENDS;FRAMEWORK_DEPENDS_WEAK;FRAMEWORK_DEPENDS_OSX;FRAMEWORK_DEPENDS_IOS_TVOS;LLVM_COMPONENT_DEPENDS;FILE_DEPENDS;TARGET_SDKS;C_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS_OSX;SWIFT_COMPILE_FLAGS_IOS;SWIFT_COMPILE_FLAGS_TVOS;SWIFT_COMPILE_FLAGS_WATCHOS;LINK_FLAGS;PRIVATE_LINK_LIBRARIES;INTERFACE_LINK_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES"
12241227
${ARGN})
12251228
set(SWIFTLIB_SOURCES ${SWIFTLIB_UNPARSED_ARGUMENTS})
12261229

@@ -1351,6 +1354,9 @@ function(add_swift_library name)
13511354
elseif("${sdk}" STREQUAL "LINUX" OR "${sdk}" STREQUAL "ANDROID")
13521355
list(APPEND swiftlib_module_depends_flattened
13531356
${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX})
1357+
elseif("${sdk}" STREQUAL "CYGWIN")
1358+
list(APPEND swiftlib_module_depends_flattened
1359+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN})
13541360
endif()
13551361

13561362
set(swiftlib_module_dependency_targets)

stdlib/private/StdlibUnittest/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ add_swift_library(swiftStdlibUnittest ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_STD
3838
SWIFT_MODULE_DEPENDS_WATCHOS Darwin Foundation
3939
SWIFT_MODULE_DEPENDS_LINUX Glibc
4040
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
41+
SWIFT_MODULE_DEPENDS_CYGWIN Glibc
4142
SWIFT_COMPILE_FLAGS ${swift_stdlib_unittest_compile_flags}
4243
TARGET_SDKS ALL_POSIX_PLATFORMS
4344
INSTALL_IN_COMPONENT stdlib-experimental)

stdlib/private/StdlibUnittest/RaceTest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import SwiftPrivateLibcExtras
4141
import SwiftPrivatePthreadExtras
4242
#if os(OSX) || os(iOS)
4343
import Darwin
44-
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android)
44+
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN
4545
import Glibc
4646
#endif
4747

stdlib/private/StdlibUnittest/StdlibCoreExtras.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import SwiftPrivate
1414
import SwiftPrivateLibcExtras
1515
#if os(OSX) || os(iOS)
1616
import Darwin
17-
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android)
17+
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN
1818
import Glibc
1919
#endif
2020

stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import SwiftPrivateLibcExtras
2020

2121
#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
2222
import Darwin
23-
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android)
23+
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN
2424
import Glibc
2525
#endif
2626

@@ -1426,6 +1426,8 @@ public enum OSVersion : CustomStringConvertible {
14261426
case freeBSD
14271427
case android
14281428
case ps4
1429+
case windowsCygnus
1430+
case windows
14291431

14301432
public var description: String {
14311433
switch self {
@@ -1451,6 +1453,10 @@ public enum OSVersion : CustomStringConvertible {
14511453
return "PS4"
14521454
case .android:
14531455
return "Android"
1456+
case .windowsCygnus:
1457+
return "Cygwin"
1458+
case .windows:
1459+
return "Windows"
14541460
}
14551461
}
14561462
}
@@ -1489,6 +1495,10 @@ func _getOSVersion() -> OSVersion {
14891495
return .ps4
14901496
#elseif os(Android)
14911497
return .android
1498+
#elseif os(Windows) && CYGWIN
1499+
return .windowsCygnus
1500+
#elseif os(Windows)
1501+
return .windows
14921502
#else
14931503
let productVersion = _stdlib_getSystemVersionPlistProperty("ProductVersion")!
14941504
let (major, minor, bugFix) = _parseDottedVersionTriple(productVersion)
@@ -1567,6 +1577,10 @@ public enum TestRunPredicate : CustomStringConvertible {
15671577

15681578
case androidAny(reason: String)
15691579

1580+
case windowsAny(reason: String)
1581+
1582+
case windowsCygnusAny(reason: String)
1583+
15701584
case objCRuntime(/*reason:*/ String)
15711585
case nativeRuntime(/*reason:*/ String)
15721586

@@ -1653,6 +1667,12 @@ public enum TestRunPredicate : CustomStringConvertible {
16531667
case .ps4Any(reason: let reason):
16541668
return "ps4Any(*, reason: \(reason))"
16551669

1670+
case .windowsAny(reason: let reason):
1671+
return "windowsAny(*, reason: \(reason))"
1672+
1673+
case .windowsCygnusAny(reason: let reason):
1674+
return "windowsCygnusAny(*, reason: \(reason))"
1675+
16561676
case .objCRuntime(let reason):
16571677
return "Objective-C runtime, reason: \(reason))"
16581678
case .nativeRuntime(let reason):
@@ -1918,6 +1938,24 @@ public enum TestRunPredicate : CustomStringConvertible {
19181938
return false
19191939
}
19201940

1941+
case .windowsAny:
1942+
switch _getRunningOSVersion() {
1943+
case .windowsCygnus:
1944+
return true
1945+
case .windows:
1946+
return true
1947+
default:
1948+
return false
1949+
}
1950+
1951+
case .windowsCygnusAny:
1952+
switch _getRunningOSVersion() {
1953+
case .windowsCygnus:
1954+
return true
1955+
default:
1956+
return false
1957+
}
1958+
19211959
case .objCRuntime:
19221960
#if _runtime(_ObjC)
19231961
return true

stdlib/private/SwiftPrivateLibcExtras/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ add_swift_library(swiftSwiftPrivateLibcExtras ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES
1313
SWIFT_MODULE_DEPENDS_WATCHOS Darwin
1414
SWIFT_MODULE_DEPENDS_LINUX Glibc
1515
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
16+
SWIFT_MODULE_DEPENDS_CYGWIN Glibc
1617
INSTALL_IN_COMPONENT stdlib-experimental)

stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import SwiftPrivate
1414
#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
1515
import Darwin
16-
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android)
16+
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN
1717
import Glibc
1818
#endif
1919

@@ -264,9 +264,19 @@ public enum ProcessTerminationStatus : CustomStringConvertible {
264264

265265
public func posixWaitpid(_ pid: pid_t) -> ProcessTerminationStatus {
266266
var status: CInt = 0
267+
#if CYGWIN
268+
withUnsafeMutablePointer(to: &status) {
269+
statusPtr in
270+
let statusPtrWrapper = __wait_status_ptr_t(__int_ptr: statusPtr)
271+
if waitpid(pid, statusPtrWrapper, 0) < 0 {
272+
preconditionFailure("waitpid() failed")
273+
}
274+
}
275+
#else
267276
if waitpid(pid, &status, 0) < 0 {
268277
preconditionFailure("waitpid() failed")
269278
}
279+
#endif
270280
if (WIFEXITED(status)) {
271281
return .exit(Int(WEXITSTATUS(status)))
272282
}
@@ -290,6 +300,8 @@ internal func _getEnviron() -> UnsafeMutablePointer<UnsafeMutablePointer<CChar>?
290300
return environ
291301
#elseif os(Android)
292302
return environ
303+
#elseif CYGWIN
304+
return environ
293305
#else
294306
return __environ
295307
#endif

stdlib/private/SwiftPrivateLibcExtras/SwiftPrivateLibcExtras.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import SwiftPrivate
1414
#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
1515
import Darwin
16-
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android)
16+
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN
1717
import Glibc
1818
#endif
1919

@@ -97,6 +97,9 @@ public func _stdlib_select(
9797
let readAddr = readfds.baseAddress
9898
let writeAddr = writefds.baseAddress
9999
let errorAddr = errorfds.baseAddress
100+
#if CYGWIN
101+
typealias fd_set = _types_fd_set
102+
#endif
100103
func asFdSetPtr(
101104
_ p: UnsafeMutablePointer<UInt>?
102105
) -> UnsafeMutablePointer<fd_set>? {

stdlib/private/SwiftPrivatePthreadExtras/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ add_swift_library(swiftSwiftPrivatePthreadExtras ${SWIFT_STDLIB_LIBRARY_BUILD_TY
1010
SWIFT_MODULE_DEPENDS_WATCHOS Darwin
1111
SWIFT_MODULE_DEPENDS_LINUX Glibc
1212
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
13+
SWIFT_MODULE_DEPENDS_CYGWIN Glibc
1314
SWIFT_COMPILE_FLAGS ${STDLIB_SIL_SERIALIZE_ALL}
1415
TARGET_SDKS ALL_POSIX_PLATFORMS
1516
INSTALL_IN_COMPONENT stdlib-experimental)

stdlib/private/SwiftPrivatePthreadExtras/PthreadBarriers.swift

Lines changed: 6 additions & 1 deletion
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) || os(FreeBSD) || os(PS4) || os(Android)
15+
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN
1616
import Glibc
1717
#endif
1818

@@ -43,8 +43,13 @@ public var _stdlib_PTHREAD_BARRIER_SERIAL_THREAD: CInt {
4343
}
4444

4545
public struct _stdlib_pthread_barrier_t {
46+
#if CYGWIN || os(FreeBSD)
47+
var mutex: UnsafeMutablePointer<pthread_mutex_t?>?
48+
var cond: UnsafeMutablePointer<pthread_cond_t?>?
49+
#else
4650
var mutex: UnsafeMutablePointer<pthread_mutex_t>?
4751
var cond: UnsafeMutablePointer<pthread_cond_t>?
52+
#endif
4853

4954
/// The number of threads to synchronize.
5055
var count: CUnsignedInt = 0

0 commit comments

Comments
 (0)