Skip to content

Commit a8dec7f

Browse files
committed
[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 5a24741 commit a8dec7f

25 files changed

+131
-40
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -886,7 +886,7 @@ function(_add_swift_library_single target name)
886886
elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "CYGWIN")
887887
set_target_properties("${target}"
888888
PROPERTIES
889-
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/windows")
889+
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/cygwin")
890890
endif()
891891

892892
set_target_properties("${target}" PROPERTIES BUILD_WITH_INSTALL_RPATH YES)
@@ -1256,6 +1256,9 @@ endfunction()
12561256
# SWIFT_MODULE_DEPENDS_LINUX
12571257
# Swift modules this library depends on when built for Linux.
12581258
#
1259+
# SWIFT_MODULE_DEPENDS_CYGWIN
1260+
# Swift modules this library depends on when built for Cygwin.
1261+
#
12591262
# FRAMEWORK_DEPENDS
12601263
# System frameworks this library depends on.
12611264
#
@@ -1329,7 +1332,7 @@ function(add_swift_library name)
13291332
cmake_parse_arguments(SWIFTLIB
13301333
"${SWIFTLIB_options}"
13311334
"INSTALL_IN_COMPONENT;DEPLOYMENT_VERSION_OSX;DEPLOYMENT_VERSION_IOS;DEPLOYMENT_VERSION_TVOS;DEPLOYMENT_VERSION_WATCHOS"
1332-
"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;INCORPORATE_OBJECT_LIBRARIES_SHARED_ONLY"
1335+
"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;INCORPORATE_OBJECT_LIBRARIES_SHARED_ONLY"
13331336
${ARGN})
13341337
set(SWIFTLIB_SOURCES ${SWIFTLIB_UNPARSED_ARGUMENTS})
13351338

@@ -1462,6 +1465,9 @@ function(add_swift_library name)
14621465
elseif("${sdk}" STREQUAL "LINUX" OR "${sdk}" STREQUAL "ANDROID")
14631466
list(APPEND swiftlib_module_depends_flattened
14641467
${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX})
1468+
elseif("${sdk}" STREQUAL "CYGWIN")
1469+
list(APPEND swiftlib_module_depends_flattened
1470+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN})
14651471
endif()
14661472

14671473
# Swift compiles depend on swift modules, while links depend on

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

@@ -1429,6 +1429,8 @@ public enum OSVersion : CustomStringConvertible {
14291429
case freeBSD
14301430
case android
14311431
case ps4
1432+
case windowsCygnus
1433+
case windows
14321434

14331435
public var description: String {
14341436
switch self {
@@ -1454,6 +1456,10 @@ public enum OSVersion : CustomStringConvertible {
14541456
return "PS4"
14551457
case .android:
14561458
return "Android"
1459+
case .windowsCygnus:
1460+
return "Cygwin"
1461+
case .windows:
1462+
return "Windows"
14571463
}
14581464
}
14591465
}
@@ -1492,6 +1498,10 @@ func _getOSVersion() -> OSVersion {
14921498
return .ps4
14931499
#elseif os(Android)
14941500
return .android
1501+
#elseif os(Windows) && CYGWIN
1502+
return .windowsCygnus
1503+
#elseif os(Windows)
1504+
return .windows
14951505
#else
14961506
let productVersion = _stdlib_getSystemVersionPlistProperty("ProductVersion")!
14971507
let (major, minor, bugFix) = _parseDottedVersionTriple(productVersion)
@@ -1570,6 +1580,10 @@ public enum TestRunPredicate : CustomStringConvertible {
15701580

15711581
case androidAny(reason: String)
15721582

1583+
case windowsAny(reason: String)
1584+
1585+
case windowsCygnusAny(reason: String)
1586+
15731587
case objCRuntime(/*reason:*/ String)
15741588
case nativeRuntime(/*reason:*/ String)
15751589

@@ -1656,6 +1670,12 @@ public enum TestRunPredicate : CustomStringConvertible {
16561670
case .ps4Any(reason: let reason):
16571671
return "ps4Any(*, reason: \(reason))"
16581672

1673+
case .windowsAny(reason: let reason):
1674+
return "windowsAny(*, reason: \(reason))"
1675+
1676+
case .windowsCygnusAny(reason: let reason):
1677+
return "windowsCygnusAny(*, reason: \(reason))"
1678+
16591679
case .objCRuntime(let reason):
16601680
return "Objective-C runtime, reason: \(reason))"
16611681
case .nativeRuntime(let reason):
@@ -1921,6 +1941,24 @@ public enum TestRunPredicate : CustomStringConvertible {
19211941
return false
19221942
}
19231943

1944+
case .windowsAny:
1945+
switch _getRunningOSVersion() {
1946+
case .windowsCygnus:
1947+
return true
1948+
case .windows:
1949+
return true
1950+
default:
1951+
return false
1952+
}
1953+
1954+
case .windowsCygnusAny:
1955+
switch _getRunningOSVersion() {
1956+
case .windowsCygnus:
1957+
return true
1958+
default:
1959+
return false
1960+
}
1961+
19241962
case .objCRuntime:
19251963
#if _runtime(_ObjC)
19261964
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: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ public func _stdlib_select(
9999
let readAddr = readfds.baseAddress
100100
let writeAddr = writefds.baseAddress
101101
let errorAddr = errorfds.baseAddress
102+
#if CYGWIN
103+
typealias fd_set = _types_fd_set
104+
#endif
102105
func asFdSetPtr(
103106
_ p: UnsafeMutablePointer<UInt>?
104107
) -> 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: 1 addition & 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

0 commit comments

Comments
 (0)