From 0a0d76a57202e9043c786923143c5d879fe26af5 Mon Sep 17 00:00:00 2001 From: seabaylea Date: Wed, 13 Jan 2016 16:17:23 +0000 Subject: [PATCH] Enable Dispatch overlay on Linux --- CMakeLists.txt | 35 +++++++++++++------ stdlib/public/CMakeLists.txt | 4 +++ stdlib/public/Dispatch/CMakeLists.txt | 14 ++++++++ .../Dispatch.mm => Dispatch/Dispatch.cpp} | 9 +++-- .../public/{SDK => }/Dispatch/Dispatch.swift | 12 +++++++ stdlib/public/SDK/CMakeLists.txt | 1 - stdlib/public/SDK/Dispatch/CMakeLists.txt | 5 --- utils/build-script-impl | 2 ++ 8 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 stdlib/public/Dispatch/CMakeLists.txt rename stdlib/public/{SDK/Dispatch/Dispatch.mm => Dispatch/Dispatch.cpp} (97%) rename stdlib/public/{SDK => }/Dispatch/Dispatch.swift (96%) delete mode 100644 stdlib/public/SDK/Dispatch/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 4435e1d2c6a53..dd895e423dbdc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,9 +37,13 @@ option(SWIFT_BUILD_STDLIB TRUE) option(SWIFT_BUILD_SDK_OVERLAY - "Build Swift SDK overlay" + "Build Swift SDK overlay (Darwin only)" TRUE) +option(SWIFT_BUILD_DISPATCH_OVERLAY + "Build Swift Grand Central Dispatch overlay (on Linux; on Darwin, controlled by SWIFT_BUILD_SDK_OVERLAY)" + FALSE) + option(SWIFT_BUILD_STATIC_STDLIB "Build static variants of the Swift standard library and SDK overlay" FALSE) @@ -590,11 +594,19 @@ message(STATUS " Build type: ${CMAKE_BUILD_TYPE}") message(STATUS " Assertions: ${LLVM_ENABLE_ASSERTIONS}") message(STATUS "") -message(STATUS "Building Swift standard library and SDK overlays for SDKs: ${SWIFT_SDKS}") +message(STATUS "Building Swift standard library for SDKs: ${SWIFT_SDKS}") message(STATUS " Build type: ${SWIFT_STDLIB_BUILD_TYPE}") message(STATUS " Assertions: ${SWIFT_STDLIB_ASSERTIONS}") message(STATUS "") +message(STATUS "Building Swift overlays for SDKs: ${SWIFT_SDKS}") +if("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "LINUX") + message(STATUS " libdispatch overlay: ${SWIFT_BUILD_DISPATCH_OVERLAY}") +else() + message(STATUS " SDK overlays: ${SWIFT_BUILD_SDK_OVERLAY}") +endif() +message(STATUS "") + message(STATUS "Building Swift runtime with:") message(STATUS " Dtrace: ${SWIFT_RUNTIME_ENABLE_DTRACE}") message(STATUS " Leak Detection Checker Entrypoints: ${SWIFT_RUNTIME_ENABLE_LEAK_CHECKER}") @@ -618,18 +630,19 @@ endif() # # Set up global CMake variables for API notes. # +if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") + set(SWIFT_API_NOTES_PATH "${SWIFT_SOURCE_DIR}/apinotes") + if(NOT EXISTS "${SWIFT_API_NOTES_PATH}/Foundation.apinotes") + message(FATAL_ERROR "API notes are not available in ${SWIFT_API_NOTES_PATH}") + endif() -set(SWIFT_API_NOTES_PATH "${SWIFT_SOURCE_DIR}/apinotes") -if(NOT EXISTS "${SWIFT_API_NOTES_PATH}/Foundation.apinotes") - message(FATAL_ERROR "API notes are not available in ${SWIFT_API_NOTES_PATH}") + file(GLOB SWIFT_API_NOTES_INPUT_FILES "${SWIFT_API_NOTES_PATH}/*.apinotes") + foreach(file ${SWIFT_API_NOTES_INPUT_FILES}) + get_filename_component(name "${file}" NAME_WE) + list(APPEND SWIFT_API_NOTES_INPUTS ${name}) + endforeach() endif() -file(GLOB SWIFT_API_NOTES_INPUT_FILES "${SWIFT_API_NOTES_PATH}/*.apinotes") -foreach(file ${SWIFT_API_NOTES_INPUT_FILES}) - get_filename_component(name "${file}" NAME_WE) - list(APPEND SWIFT_API_NOTES_INPUTS ${name}) -endforeach() - # Add all of the subdirectories, where we actually do work. if(SWIFT_BUILD_TOOLS) add_subdirectory(include) diff --git a/stdlib/public/CMakeLists.txt b/stdlib/public/CMakeLists.txt index 29aae6e5def59..6372d741a4bda 100644 --- a/stdlib/public/CMakeLists.txt +++ b/stdlib/public/CMakeLists.txt @@ -24,9 +24,13 @@ endif() if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") if(SWIFT_BUILD_SDK_OVERLAY) add_subdirectory(SDK) + add_subdirectory(Dispatch) endif() endif() if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") add_subdirectory(Glibc) + if(SWIFT_BUILD_DISPATCH_OVERLAY) + add_subdirectory(Dispatch) + endif() endif() diff --git a/stdlib/public/Dispatch/CMakeLists.txt b/stdlib/public/Dispatch/CMakeLists.txt new file mode 100644 index 0000000000000..523c7c107f248 --- /dev/null +++ b/stdlib/public/Dispatch/CMakeLists.txt @@ -0,0 +1,14 @@ +if("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "LINUX") + add_swift_library(swiftDispatch IS_SDK_OVERLAY + Dispatch.cpp + Dispatch.swift + + LINK_FLAGS "-ldispatch") +else() + add_swift_library(swiftDispatch IS_SDK_OVERLAY + Dispatch.cpp + Dispatch.swift + + SWIFT_MODULE_DEPENDS ObjectiveC) +endif() + diff --git a/stdlib/public/SDK/Dispatch/Dispatch.mm b/stdlib/public/Dispatch/Dispatch.cpp similarity index 97% rename from stdlib/public/SDK/Dispatch/Dispatch.mm rename to stdlib/public/Dispatch/Dispatch.cpp index a8cbf16120366..8b78405816e79 100644 --- a/stdlib/public/SDK/Dispatch/Dispatch.mm +++ b/stdlib/public/Dispatch/Dispatch.cpp @@ -33,12 +33,15 @@ SOURCE(DATA_ADD) SOURCE(DATA_OR) -SOURCE(MACH_SEND) -SOURCE(MACH_RECV) -SOURCE(MEMORYPRESSURE) SOURCE(PROC) SOURCE(READ) SOURCE(SIGNAL) SOURCE(TIMER) SOURCE(VNODE) SOURCE(WRITE) + +#if defined (__APPLE__) +SOURCE(MACH_SEND) +SOURCE(MACH_RECV) +SOURCE(MEMORYPRESSURE) +#endif diff --git a/stdlib/public/SDK/Dispatch/Dispatch.swift b/stdlib/public/Dispatch/Dispatch.swift similarity index 96% rename from stdlib/public/SDK/Dispatch/Dispatch.swift rename to stdlib/public/Dispatch/Dispatch.swift index ddadf38ae5cd4..7b08b3a4c0a14 100644 --- a/stdlib/public/SDK/Dispatch/Dispatch.swift +++ b/stdlib/public/Dispatch/Dispatch.swift @@ -64,11 +64,19 @@ public var DISPATCH_QUEUE_PRIORITY_BACKGROUND: dispatch_queue_priority_t { return -32768 } +#if _runtime(_ObjC) @warn_unused_result public func dispatch_get_global_queue(identifier: qos_class_t, _ flags: UInt) -> dispatch_queue_t { return dispatch_get_global_queue(Int(identifier.rawValue), flags) } +#else +@warn_unused_result +public func dispatch_get_global_queue(identifier: CInt, + _ flags: UInt) -> dispatch_queue_t { + return dispatch_get_global_queue(identifier, flags) +} +#endif public var DISPATCH_QUEUE_CONCURRENT: dispatch_queue_attr_t { return _swift_dispatch_queue_concurrent() @@ -122,6 +130,8 @@ public var DISPATCH_SOURCE_TYPE_DATA_ADD: dispatch_source_type_t { public var DISPATCH_SOURCE_TYPE_DATA_OR: dispatch_source_type_t { return _swift_dispatch_source_type_data_or() } + +#if _runtime(_ObjC) public var DISPATCH_SOURCE_TYPE_MACH_SEND: dispatch_source_type_t { return _swift_dispatch_source_type_mach_send() } @@ -131,6 +141,8 @@ public var DISPATCH_SOURCE_TYPE_MACH_RECV: dispatch_source_type_t { public var DISPATCH_SOURCE_TYPE_MEMORYPRESSURE: dispatch_source_type_t { return _swift_dispatch_source_type_memorypressure() } +#endif + public var DISPATCH_SOURCE_TYPE_READ: dispatch_source_type_t { return _swift_dispatch_source_type_read() } diff --git a/stdlib/public/SDK/CMakeLists.txt b/stdlib/public/SDK/CMakeLists.txt index e77dd0544a0be..3ca60d64089b3 100644 --- a/stdlib/public/SDK/CMakeLists.txt +++ b/stdlib/public/SDK/CMakeLists.txt @@ -14,7 +14,6 @@ add_subdirectory(CoreImage) add_subdirectory(CoreLocation) add_subdirectory(CoreMedia) add_subdirectory(Darwin) -add_subdirectory(Dispatch) add_subdirectory(EventKit) add_subdirectory(Foundation) add_subdirectory(GameKit) diff --git a/stdlib/public/SDK/Dispatch/CMakeLists.txt b/stdlib/public/SDK/Dispatch/CMakeLists.txt deleted file mode 100644 index ff596892b2b54..0000000000000 --- a/stdlib/public/SDK/Dispatch/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -add_swift_library(swiftDispatch IS_SDK_OVERLAY - Dispatch.swift - Dispatch.mm - SWIFT_MODULE_DEPENDS ObjectiveC) - diff --git a/utils/build-script-impl b/utils/build-script-impl index a11b57e16f5f1..18ccf30829b1b 100755 --- a/utils/build-script-impl +++ b/utils/build-script-impl @@ -141,6 +141,7 @@ KNOWN_SETTINGS=( build-swift-tools "1" "set to 1 to build Swift host tools" build-swift-stdlib "1" "set to 1 to build the Swift standard library" build-swift-sdk-overlay "1" "set to 1 to build the Swift SDK overlay" + build-swift-dispatch-overlay "0" "set to 1 to build the Swift libdispatch overlay on Linux" build-swift-static-stdlib "0" "set to 1 to build static versions of the Swift standard library and SDK overlay" build-swift-examples "1" "set to 1 to build examples" build-swift-perf-testsuite "0" "set to 1 to build perf test suite" @@ -1600,6 +1601,7 @@ for deployment_target in "${NATIVE_TOOLS_DEPLOYMENT_TARGETS[@]}" "${CROSS_TOOLS_ -DSWIFT_BUILD_TOOLS:BOOL=$(true_false "${BUILD_SWIFT_TOOLS}") -DSWIFT_BUILD_STDLIB:BOOL=$(true_false "${BUILD_SWIFT_STDLIB}") -DSWIFT_BUILD_SDK_OVERLAY:BOOL=$(true_false "${BUILD_SWIFT_SDK_OVERLAY}") + -DSWIFT_BUILD_DISPATCH_OVERLAY:BOOL=$(true_false "${BUILD_SWIFT_DISPATCH_OVERLAY}") -DSWIFT_BUILD_STATIC_STDLIB:BOOL=$(true_false "${BUILD_SWIFT_STATIC_STDLIB}") -DSWIFT_BUILD_PERF_TESTSUITE:BOOL=$(true_false "${build_perf_testsuite_this_time}") -DSWIFT_BUILD_EXAMPLES:BOOL=$(true_false "${BUILD_SWIFT_EXAMPLES}")