Skip to content

Commit

Permalink
[libdispatch] Update to Swift 5.10 release version (#189)
Browse files Browse the repository at this point in the history
* [libdispatch] update to "swift-5.10"

* [libdispatch] allow WindowsStore

* [libdispatch] suppress uwp triplet

* remove "zenny-atomic" feature

* [libdispatch] update baseline
  • Loading branch information
luncliff authored Apr 6, 2024
1 parent 6e16af5 commit f1cf94e
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 154 deletions.
163 changes: 91 additions & 72 deletions ports/libdispatch/fix-cmake.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 29a97fd..5373dd2 100644
diff --git a/CMakeLists.txt b/CMakeLists.txtindex 57a37d3..898c21b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,7 +13,7 @@ project(dispatch
Expand All @@ -11,33 +10,33 @@ index 29a97fd..5373dd2 100644
include(ClangClCompileRules)
endif()

@@ -193,6 +193,15 @@ check_include_files("sys/stat.h" HAVE_SYS_STAT_H)
check_include_files("sys/types.h" HAVE_SYS_TYPES_H)
check_include_files("objc/objc-internal.h" HAVE_OBJC)
diff --git a/cmake/modules/DispatchCompilerWarnings.cmake b/cmake/modules/DispatchCompilerWarnings.cmake
index 35b80f3..29e1f17 100644
--- a/cmake/modules/DispatchCompilerWarnings.cmake
+++ b/cmake/modules/DispatchCompilerWarnings.cmake
@@ -1,8 +1,8 @@

+check_include_files("stdatomic.h" HAVE_STDATOMIC_H)
+if(NOT HAVE_STDATOMIC_H)
+ find_library(ATOMIC_LIBPATH NAMES zenny_atomic) # see port 'zenny-atomic'
+ if(ATOMIC_LIBPATH)
+ link_libraries(${ATOMIC_LIBPATH})
+ endif()
+ find_path(ATOMIC_INCLUDE_DIR NAMES "stdatomic.h" REQUIRED)
+ include_directories(${ATOMIC_INCLUDE_DIR})
+endif()
if(HAVE_MACH)
set(USE_MACH_SEM 1)
-if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC")
+if(WIN32)
# TODO: someone needs to provide the msvc equivalent warning flags
+ add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/Zc:__cplusplus>)
else()
- add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Werror>)
add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wall>)
add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wextra>)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index adc989d..3b37f8e 100644
index 811e131..9b2e7e0 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -116,8 +116,7 @@ if(DISPATCH_ENABLE_ASSERTS)
@@ -116,8 +116,8 @@ if(DISPATCH_ENABLE_ASSERTS)
DISPATCH_DEBUG=1)
endif()

-if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC")
- target_compile_options(dispatch PRIVATE /EHs-c-)
+if(MSVC)
+if(WIN32)
+ target_compile_options(dispatch PRIVATE /EHs-c-) # some sources can't use C++ Exception
target_compile_options(dispatch PRIVATE /W3)
else()
target_compile_options(dispatch PRIVATE -fno-exceptions)
Expand All @@ -52,23 +51,10 @@ index adc989d..3b37f8e 100644

check_c_compiler_flag("-momit-leaf-frame-pointer -Werror -Wall -O3" C_SUPPORTS_OMIT_LEAF_FRAME_POINTER)
if (C_SUPPORTS_OMIT_LEAF_FRAME_POINTER)

diff --git a/cmake/modules/DispatchCompilerWarnings.cmake b/cmake/modules/DispatchCompilerWarnings.cmake
index 35b80f3..15e1eb3 100644
--- a/cmake/modules/DispatchCompilerWarnings.cmake
+++ b/cmake/modules/DispatchCompilerWarnings.cmake
@@ -1,8 +1,8 @@

-if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC")
+if(MSVC)
- # TODO: someone needs to provide the msvc equivalent warning flags
+ add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/Zc:__cplusplus>)
else()
- add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Werror>)
+ # add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Werror>)
add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wall>)
add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wextra>)
modulemap")

configure_file("${PROJECT_SOURCE_DIR}/cmake/config.h.in"
"${PROJECT_BINARY_DIR}/config/config_ac.h")
diff --git a/cmake/modules/DispatchWindowsSupport.cmake b/cmake/modules/DispatchWindowsSupport.cmake
index 87675a7..ee9949a 100644
--- a/cmake/modules/DispatchWindowsSupport.cmake
Expand All @@ -91,46 +77,79 @@ index 87675a7..ee9949a 100644
else()
message(FATAL_ERROR "do not know MSVC spelling for ARCH: `${arch}`")
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2bef263..29a97fd 100644
index 898c21b..fdbc1a2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -262,25 +262,27 @@ endif()
@@ -17,7 +17,7 @@ if(WIN32)
include(ClangClCompileRules)
endif()

if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
add_custom_command(OUTPUT
- "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
- "${PROJECT_SOURCE_DIR}/private/module.modulemap"
+ "${PROJECT_BINARY_DIR}/dispatch/module.modulemap"
+ "${PROJECT_BINARY_DIR}/private/module.modulemap"
COMMAND
- ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap" "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
+ ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap" "${PROJECT_BINARY_DIR}/dispatch/module.modulemap"
COMMAND
- ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/private/darwin/module.modulemap" "${PROJECT_SOURCE_DIR}/private/module.modulemap")
+ ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/private/darwin/module.modulemap" "${PROJECT_BINARY_DIR}/private/module.modulemap")
-if(CMAKE_SYSTEM_NAME STREQUAL Windows)
+if(CMAKE_SYSTEM_NAME MATCHES Windows)
include(DispatchWindowsSupport)
dispatch_windows_arch_spelling(${CMAKE_SYSTEM_PROCESSOR} DISPATCH_MSVC_ARCH)
dispatch_windows_include_for_arch(${DISPATCH_MSVC_ARCH} DISPATCH_INCLUDES)
@@ -198,7 +198,7 @@ if(HAVE_MACH)
else()
add_custom_command(OUTPUT
- "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
- "${PROJECT_SOURCE_DIR}/private/module.modulemap"
+ "${PROJECT_BINARY_DIR}/dispatch/module.modulemap"
+ "${PROJECT_BINARY_DIR}/private/module.modulemap"
COMMAND
- ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
+ ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap" "${PROJECT_BINARY_DIR}/dispatch/module.modulemap"
COMMAND
- ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/private/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/private/module.modulemap")
+ ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/private/generic/module.modulemap" "${PROJECT_BINARY_DIR}/private/module.modulemap")
+endif()
+if(NOT WIN32)
+ add_custom_target(module-maps ALL
+ DEPENDS
+ "${PROJECT_BINARY_DIR}/dispatch/module.modulemap"
+ "${PROJECT_BINARY_DIR}/private/module.modulemap")
set(USE_MACH_SEM 0)
endif()
-add_custom_target(module-maps ALL
- DEPENDS
- "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
- "${PROJECT_SOURCE_DIR}/private/module.modulemap")
-if(CMAKE_SYSTEM_NAME STREQUAL Windows)
+if(CMAKE_SYSTEM_NAME MATCHES Windows)
add_compile_definitions($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:USE_WIN32_SEM>)
endif()
check_library_exists(pthread sem_init "" USE_POSIX_SEM)
diff --git a/src/BlocksRuntime/CMakeLists.txt b/src/BlocksRuntime/CMakeLists.txt
index 50123d4..eb3a285 100644
--- a/src/BlocksRuntime/CMakeLists.txt
+++ b/src/BlocksRuntime/CMakeLists.txt
@@ -2,7 +2,7 @@
add_library(BlocksRuntime
data.c
runtime.c)
-if(CMAKE_SYSTEM_NAME STREQUAL Windows)
+if(CMAKE_SYSTEM_NAME MATCHES Windows)
target_sources(BlocksRuntime PRIVATE
BlocksRuntime.def)

configure_file("${PROJECT_SOURCE_DIR}/cmake/config.h.in"
"${PROJECT_BINARY_DIR}/config/config_ac.h")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8483298..1168bf4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -57,7 +57,7 @@ add_library(dispatch
shims/yield.c
shims/yield.h)

-if(CMAKE_SYSTEM_NAME STREQUAL Windows)
+if(CMAKE_SYSTEM_NAME MATCHES Windows)
target_sources(dispatch PRIVATE
shims/generic_sys_queue.h
shims/generic_win_stubs.c
@@ -103,7 +103,7 @@ target_include_directories(dispatch PUBLIC
target_include_directories(dispatch PRIVATE
${PROJECT_SOURCE_DIR}/private)

-if(CMAKE_SYSTEM_NAME STREQUAL Windows)
+if(CMAKE_SYSTEM_NAME MATCHES Windows)
target_compile_definitions(dispatch PRIVATE
_CRT_NONSTDC_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS)
@@ -141,7 +141,7 @@ target_link_libraries(dispatch PRIVATE
Threads::Threads)
target_link_libraries(dispatch PUBLIC
BlocksRuntime::BlocksRuntime)
-if(CMAKE_SYSTEM_NAME STREQUAL Windows)
+if(CMAKE_SYSTEM_NAME MATCHES Windows)
target_link_libraries(dispatch PRIVATE
AdvAPI32
ShLwApi
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 0176a06..94df578 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,5 +1,5 @@

-if(CMAKE_SYSTEM_NAME STREQUAL Windows)
+if(CMAKE_SYSTEM_NAME MATCHES Windows)
execute_process(COMMAND
"${CMAKE_COMMAND}" -E copy_directory "${PROJECT_SOURCE_DIR}/private"
"${CMAKE_CURRENT_BINARY_DIR}/dispatch")
89 changes: 21 additions & 68 deletions ports/libdispatch/portfile.cmake
Original file line number Diff line number Diff line change
@@ -1,87 +1,49 @@
if(VCPKG_TARGET_IS_WINDOWS)
vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY)
set(VCPKG_POLICY_SKIP_ARCHITECTURE_CHECK enabled)
set(VCPKG_POLICY_SKIP_ARCHITECTURE_CHECK disabled)
set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS disabled)
# see https://github.com/apple/swift-corelibs-libdispatch/pull/569
vcpkg_download_distfile(TSD_DTOR_PATCH
URLS "https://patch-diff.githubusercontent.com/raw/apple/swift-corelibs-libdispatch/pull/569.diff"
FILENAME libdispatch-pr-569.patch
SHA512 61676555b23796e61923f6dc284f5713386de5704daa4ced0bc1824a18203d30c4e9c151278be5e19532f73e2ece2664ef92b5b3fca00c0390fefaddb9c4154d
)
# see https://github.com/apple/swift-corelibs-libdispatch/pull/598
vcpkg_download_distfile(X86_BUILD_PATCH
URLS "https://patch-diff.githubusercontent.com/raw/apple/swift-corelibs-libdispatch/pull/598.diff"
FILENAME libdispatch-pr-598.patch
SHA512 b0a8b3375b2c809173c6dd3df836f102efe004fac535338ec4864b05b8e184a737f1d624cfbb670ddbce480f3ed6d883cf3a7ac2c829cf0ee1b7beea623411ae
)
list(APPEND PLATFORM_PATCHES
"${TSD_DTOR_PATCH}" "${X86_BUILD_PATCH}"
)
elseif(VCPKG_TARGET_IS_ANDROID)
# check https://github.com/apple/swift-corelibs-libdispatch/pull/568 for the details...
vcpkg_download_distfile(NDK23_STDATOMIC_PATCH
URLS "https://patch-diff.githubusercontent.com/raw/apple/swift-corelibs-libdispatch/pull/568.diff"
FILENAME libdispatch-pr-568.patch
SHA512 af23d9530a1c9d10193ab977be632b6393b6966db367c5ee8463ad79fcc2388bed233dcd77439f035b4c4609d99329a17c58fef53cce1a1000a70a41d7406df4
)
list(APPEND PLATFORM_PATCHES "${NDK23_STDATOMIC_PATCH}")
endif()

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO apple/swift-corelibs-libdispatch
REF swift-5.5-RELEASE
SHA512 58ad7122d2fac7b117f4e81eec2b5c1dfdf5256865337110d660790744e83c3fea5e82fbe521b6e56fd0e2f09684e5e1475cf2cac67989a8f78dd0a284fb0d21
HEAD_REF master
REF swift-5.10-RELEASE
SHA512 95e697b95a1adab00f6634ffbb9a0214a05dac55df10e05f253813d513f3a198ff37eb136d0562dddfb8dc5a7cab8465a26d78f21f70fdfcda7614d6ff27d0b9
PATCHES
${PLATFORM_PATCHES}
fix-cmake.patch
fix-sources-windows.patch
)

if(VCPKG_TARGET_IS_WINDOWS)
if(DEFINED VCPKG_CMAKE_SYSTEM_NAME) # ex) WindowsStore
list(APPEND PLATFORM_OPTIONS -DCMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME})
else()
list(APPEND PLATFORM_OPTIONS -DCMAKE_SYSTEM_NAME=Windows)
endif()

# MSVC is unsupported compiler. We will use Clang
vcpkg_find_acquire_program(CLANG)
message(STATUS "Found clang: ${CLANG}")
message(STATUS "Using clang: ${CLANG}")

# Actually, we need clang-cl, not clang
get_filename_component(CLANG_PATH "${CLANG}" PATH)
find_program(CLANG_CL_EXE NAMES clang-cl HINTS ${LLVM_TOOL_PATH} ${CLANG_PATH} REQUIRED)
message(STATUS "Found clang-cl: ${CLANG_CL_EXE}")
message(STATUS "Using clang-cl: ${CLANG_CL_EXE}")

# get_filename_component(CLANG_CL_PATH "${CLANG_CL_EXE}" PATH)
# vcpkg_add_to_path(PREPEND ${CLANG_CL_PATH})
# message(STATUS "Prepend PATH: ${CLANG_CL_PATH}")
# Visual Studio with ClangCL
set(VCPKG_PLATFORM_TOOLSET ClangCL) # CMAKE_GENERATOR_TOOLSET
set(GENERATOR_OPTIONS WINDOWS_USE_MSBUILD)

list(APPEND COMPILE_FLAGS "-fms-compatibility")
if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
list(APPEND COMPILE_FLAGS -m64)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
list(APPEND COMPILE_FLAGS -m32)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
list(APPEND COMPILE_FLAGS -m64 --target=arm-none-win32)
else()
message(FATAL_ERROR "not supported")
if(VCPKG_TARGET_IS_UWP) # error MSB8020
list(APPEND COMPILE_FLAGS "-fms-compatibility")
list(APPEND PLATFORM_OPTIONS
-DCMAKE_C_COMPILER:PATH=${CLANG_CL_EXE}
-DCMAKE_CXX_COMPILER:PATH=${CLANG_CL_EXE}
)
endif()

# CMAKE_C_COMPILER_ID=Clang can be deduced by Ninja
list(APPEND PLATFORM_OPTIONS
-DCMAKE_C_COMPILER:PATH=${CLANG_CL_EXE}
-DCMAKE_C_FLAGS="${COMPILE_FLAGS}"
-DCMAKE_CXX_COMPILER:PATH=${CLANG_CL_EXE}
-DCMAKE_CXX_FLAGS="${COMPILE_FLAGS}"
)
# todo: fix linker errors in arm64-windows
# todo: support x64-uwp, arm64-uwp
else()
list(APPEND GENERATOR_OPTIONS GENERATOR Ninja)
endif()

vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
GENERATOR Ninja
${GENERATOR_OPTIONS}
OPTIONS
${PLATFORM_OPTIONS}
-DHAVE_OBJC=OFF
Expand All @@ -93,20 +55,11 @@ vcpkg_cmake_configure(
OPTIONS_DEBUG
-DDISPATCH_ENABLE_ASSERTS=ON
)
# if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_CROSSCOMPILING)
# # The build.ninja uses LIBPATH for current host architecture. We have to fix that.
# get_filename_component(BUILD_FILE_DBG ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/build.ninja ABSOLUTE)
# vcpkg_replace_string(${BUILD_FILE_DBG} "${HOST_ARCH}" "${VCPKG_TARGET_ARCHITECTURE}")
# get_filename_component(BUILD_FILE_REL ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/build.ninja ABSOLUTE)
# vcpkg_replace_string(${BUILD_FILE_REL} "${HOST_ARCH}" "${VCPKG_TARGET_ARCHITECTURE}")
# endif()

vcpkg_cmake_install()
vcpkg_copy_pdbs()

file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share"
"${CURRENT_PACKAGES_DIR}/debug/include"
)
file(INSTALL "${SOURCE_PATH}/LICENSE"
DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright
)
# file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
15 changes: 3 additions & 12 deletions ports/libdispatch/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,23 +1,14 @@
{
"name": "libdispatch",
"version-string": "swift-5.5",
"port-version": 4,
"version-string": "swift-5.10",
"description": "The libdispatch Project, (a.k.a. Grand Central Dispatch), for concurrency on multicore hardware",
"homepage": "https://github.com/apple/swift-corelibs-libdispatch",
"license": "Apache-2.0",
"supports": "windows | android",
"supports": "(windows & !uwp) | android",
"dependencies": [
{
"name": "vcpkg-cmake",
"host": true
}
],
"features": {
"zenny-atomic": {
"description": "Use zenny-atomic for platforms which doesn't support <stdatomic.h>",
"dependencies": [
"zenny-atomic"
]
}
}
]
}
4 changes: 2 additions & 2 deletions versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@
"port-version": 0
},
"libdispatch": {
"baseline": "swift-5.5",
"port-version": 4
"baseline": "swift-5.10",
"port-version": 0
},
"llama-cpp": {
"baseline": "b1695",
Expand Down
5 changes: 5 additions & 0 deletions versions/l-/libdispatch.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "3ebbccc31cfc1edfd52ebcd710ac049ff08d5ff7",
"version-string": "swift-5.10",
"port-version": 0
},
{
"git-tree": "c37b34d8fcd4ce5e252da0aa5f9c89469969e94e",
"version-string": "swift-5.5",
Expand Down

0 comments on commit f1cf94e

Please sign in to comment.