Skip to content

Commit daca8f4

Browse files
committed
[stdlib] Fixed for Cygwin
1 parent 1c58315 commit daca8f4

22 files changed

+86
-40
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -764,7 +764,7 @@ function(_add_swift_library_single target name)
764764
elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "CYGWIN")
765765
set_target_properties("${target}"
766766
PROPERTIES
767-
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/windows")
767+
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/cygwin")
768768
endif()
769769

770770
set_target_properties("${target}" PROPERTIES BUILD_WITH_INSTALL_RPATH YES)
@@ -1107,6 +1107,9 @@ endfunction()
11071107
# SWIFT_MODULE_DEPENDS_LINUX
11081108
# Swift modules this library depends on when built for Linux.
11091109
#
1110+
# SWIFT_MODULE_DEPENDS_CYGWIN
1111+
# Swift modules this library depends on when built for Cygwin.
1112+
#
11101113
# FRAMEWORK_DEPENDS
11111114
# System frameworks this library depends on.
11121115
#
@@ -1171,7 +1174,7 @@ function(add_swift_library name)
11711174
cmake_parse_arguments(SWIFTLIB
11721175
"${SWIFTLIB_options}"
11731176
"INSTALL_IN_COMPONENT;DEPLOYMENT_VERSION_IOS"
1174-
"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;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"
1177+
"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;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"
11751178
${ARGN})
11761179
set(SWIFTLIB_SOURCES ${SWIFTLIB_UNPARSED_ARGUMENTS})
11771180

@@ -1298,6 +1301,9 @@ function(add_swift_library name)
12981301
elseif("${sdk}" STREQUAL "LINUX" OR "${sdk}" STREQUAL "ANDROID")
12991302
list(APPEND swiftlib_module_depends_flattened
13001303
${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX})
1304+
elseif("${sdk}" STREQUAL "CYGWIN")
1305+
list(APPEND swiftlib_module_depends_flattened
1306+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN})
13011307
endif()
13021308

13031309
set(swiftlib_module_dependency_targets)

stdlib/private/StdlibUnittest/CMakeLists.txt

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

stdlib/private/StdlibUnittest/RaceTest.swift

Lines changed: 1 addition & 1 deletion
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) || os(FreeBSD) || os(PS4) || os(Android)
43+
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN
4444
import Glibc
4545
#endif
4646

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: 6 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

@@ -1412,6 +1412,7 @@ public enum OSVersion : CustomStringConvertible {
14121412
case freeBSD
14131413
case android
14141414
case ps4
1415+
case windows
14151416

14161417
public var description: String {
14171418
switch self {
@@ -1437,6 +1438,8 @@ public enum OSVersion : CustomStringConvertible {
14371438
return "PS4"
14381439
case .android:
14391440
return "Android"
1441+
case .windows:
1442+
return "Windows"
14401443
}
14411444
}
14421445
}
@@ -1475,6 +1478,8 @@ func _getOSVersion() -> OSVersion {
14751478
return .ps4
14761479
#elseif os(Android)
14771480
return .android
1481+
#elseif os(Windows)
1482+
return .windows
14781483
#else
14791484
let productVersion = _stdlib_getSystemVersionPlistProperty("ProductVersion")!
14801485
let (major, minor, bugFix) = _parseDottedVersionTriple(productVersion)

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: 10 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,12 +97,21 @@ public func _stdlib_select(
9797
let readAddr = readfds.baseAddress
9898
let writeAddr = writefds.baseAddress
9999
let errorAddr = errorfds.baseAddress
100+
#if CYGWIN
101+
func asFdSetPtr(
102+
_ p: UnsafeMutablePointer<UInt>?
103+
) -> UnsafeMutablePointer<_types_fd_set>? {
104+
return UnsafeMutableRawPointer(p)?
105+
.assumingMemoryBound(to: _types_fd_set.self)
106+
}
107+
#else
100108
func asFdSetPtr(
101109
_ p: UnsafeMutablePointer<UInt>?
102110
) -> UnsafeMutablePointer<fd_set>? {
103111
return UnsafeMutableRawPointer(p)?
104112
.assumingMemoryBound(to: fd_set.self)
105113
}
114+
#endif
106115
return select(
107116
_stdlib_FD_SETSIZE,
108117
asFdSetPtr(readAddr),

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
47+
var mutex: UnsafeMutablePointer<pthread_mutex_t?>? = nil
48+
var cond: UnsafeMutablePointer<pthread_cond_t?>? = nil
49+
#else
4650
var mutex: UnsafeMutablePointer<pthread_mutex_t>? = nil
4751
var cond: UnsafeMutablePointer<pthread_cond_t>? = nil
52+
#endif
4853

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

0 commit comments

Comments
 (0)