From aff31e139eb8a72c56c737446514b4a2ab5d9751 Mon Sep 17 00:00:00 2001 From: Park DongHa Date: Sat, 4 Apr 2020 21:36:38 +0900 Subject: [cppcoro] add new port --- ports/cppcoro/CONTROL | 4 ++++ ports/cppcoro/portfile.cmake | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 ports/cppcoro/CONTROL create mode 100644 ports/cppcoro/portfile.cmake diff --git a/ports/cppcoro/CONTROL b/ports/cppcoro/CONTROL new file mode 100644 index 000000000..eb77edb81 --- /dev/null +++ b/ports/cppcoro/CONTROL @@ -0,0 +1,4 @@ +Source: cppcoro +Version: 2020.04 +Description: A library of C++ coroutine abstractions for the coroutines TS +Supports: !uwp diff --git a/ports/cppcoro/portfile.cmake b/ports/cppcoro/portfile.cmake new file mode 100644 index 000000000..32823985b --- /dev/null +++ b/ports/cppcoro/portfile.cmake @@ -0,0 +1,26 @@ +include(vcpkg_common_functions) + +# the repo is fork of https://github.com/lewissbaker/cppcoro to support CMake / VcPkg +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO luncliff/cppcoro + REF 20b4217a65165d0ec7849fbe7970310cdf31b6a5 + SHA512 ab1545da09bb7053d95afd4ea9d5ec17cc42824d047e6887632c1d14c1b02a77cb8b99b73b7e51293a252e13ef615eaa89a31cdb6aa88148f9f8f6a450fa0599 + HEAD_REF master +) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -DBUILD_TESTING=False +) +vcpkg_install_cmake() + +file(INSTALL ${SOURCE_PATH}/LICENSE.txt + DESTINATION ${CURRENT_PACKAGES_DIR}/share/cppcoro + RENAME copyright +) + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) -- cgit v1.2.3 From dfdb2095fbef21060df6205bd2875ede4a585a7d Mon Sep 17 00:00:00 2001 From: Park DongHa Date: Tue, 7 Apr 2020 23:47:29 +0900 Subject: [cppcoro] update with PR review * update reference to tag and hash value * ${PORT} for destination Linux build support should marked unavailable? --- ports/cppcoro/CONTROL | 1 + ports/cppcoro/portfile.cmake | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/ports/cppcoro/CONTROL b/ports/cppcoro/CONTROL index eb77edb81..759974bb6 100644 --- a/ports/cppcoro/CONTROL +++ b/ports/cppcoro/CONTROL @@ -1,4 +1,5 @@ Source: cppcoro +Homepage: https://github.com/luncliff/cppcoro Version: 2020.04 Description: A library of C++ coroutine abstractions for the coroutines TS Supports: !uwp diff --git a/ports/cppcoro/portfile.cmake b/ports/cppcoro/portfile.cmake index 32823985b..fa365a753 100644 --- a/ports/cppcoro/portfile.cmake +++ b/ports/cppcoro/portfile.cmake @@ -1,11 +1,11 @@ -include(vcpkg_common_functions) - +# # the repo is fork of https://github.com/lewissbaker/cppcoro to support CMake / VcPkg +# vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO luncliff/cppcoro - REF 20b4217a65165d0ec7849fbe7970310cdf31b6a5 - SHA512 ab1545da09bb7053d95afd4ea9d5ec17cc42824d047e6887632c1d14c1b02a77cb8b99b73b7e51293a252e13ef615eaa89a31cdb6aa88148f9f8f6a450fa0599 + REF 2020.04 + SHA512 bd60a97911f4ee6c692e99817e9691cc5063be816c3a09a6100bc8f590f5b1e7b13a372a87e1710993b1bc177bbd99d779b2ebf16a367851b256e396bfd038da HEAD_REF master ) @@ -18,9 +18,10 @@ vcpkg_configure_cmake( vcpkg_install_cmake() file(INSTALL ${SOURCE_PATH}/LICENSE.txt - DESTINATION ${CURRENT_PACKAGES_DIR}/share/cppcoro + DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright ) +vcpkg_copy_pdbs() file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) -- cgit v1.2.3 From 7e6235bd3adca2a87f245a33657baabaa2c92993 Mon Sep 17 00:00:00 2001 From: luncliff Date: Fri, 10 Apr 2020 18:17:04 +0900 Subject: [cppcoro] embed CMakeLists.txt file * copy the CMakeLists.txt file and start build with it * change version to 2020.2 For now the repo doesn't have any tags. Therefore its version followed the latest commit, which is made in 2020 Feb. --- ports/cppcoro/CMakeLists.txt | 355 +++++++++++++++++++++++++++++++++++++++++++ ports/cppcoro/CONTROL | 8 +- ports/cppcoro/portfile.cmake | 14 +- 3 files changed, 367 insertions(+), 10 deletions(-) create mode 100644 ports/cppcoro/CMakeLists.txt diff --git a/ports/cppcoro/CMakeLists.txt b/ports/cppcoro/CMakeLists.txt new file mode 100644 index 000000000..3f1a3ebae --- /dev/null +++ b/ports/cppcoro/CMakeLists.txt @@ -0,0 +1,355 @@ + +cmake_minimum_required(VERSION 3.8) +project(cppcoro VERSION 2020.2 LANGUAGES CXX) + +add_library(cppcoro + lib/async_mutex.cpp + lib/lightweight_manual_reset_event.cpp + lib/async_auto_reset_event.cpp + lib/async_manual_reset_event.cpp + lib/auto_reset_event.cpp + lib/auto_reset_event.hpp + lib/cancellation_registration.cpp + lib/cancellation_source.cpp + lib/cancellation_state.cpp + lib/cancellation_state.hpp + lib/cancellation_token.cpp + lib/spin_mutex.cpp + lib/spin_mutex.hpp + lib/spin_wait.cpp + lib/spin_wait.hpp + lib/static_thread_pool.cpp + lib/ip_address.cpp + lib/ip_endpoint.cpp + lib/ipv4_address.cpp + lib/ipv4_endpoint.cpp + lib/ipv6_address.cpp + lib/ipv6_endpoint.cpp +) + +set_target_properties(cppcoro +PROPERTIES + CXX_STANDARD 17 # expect C++ Coroutines TS +) + +if(APPLE) + message(STATUS "using sysroot: ${CMAKE_OSX_SYSROOT}") + +elseif(WIN32) + message(STATUS "using platform: ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}") + # for now, build in single target + target_sources(cppcoro + PRIVATE + lib/win32.cpp + lib/file.cpp + lib/file_read_operation.cpp + lib/file_write_operation.cpp + lib/read_only_file.cpp + lib/read_write_file.cpp + lib/readable_file.cpp + lib/writable_file.cpp + lib/write_only_file.cpp + lib/socket.cpp + lib/socket_accept_operation.cpp + lib/socket_connect_operation.cpp + lib/socket_send_operation.cpp + lib/socket_send_to_operation.cpp + lib/socket_disconnect_operation.cpp + lib/socket_helpers.cpp + lib/socket_helpers.hpp + lib/socket_recv_from_operation.cpp + lib/socket_recv_operation.cpp + lib/io_service.cpp + ) + list(APPEND detail_headers + include/cppcoro/detail/win32.hpp + include/cppcoro/detail/win32_overlapped_operation.hpp + ) + list(APPEND net_headers + include/cppcoro/net/socket.hpp + include/cppcoro/net/socket_accept_operation.hpp + include/cppcoro/net/socket_connect_operation.hpp + include/cppcoro/net/socket_disconnect_operation.hpp + include/cppcoro/net/socket_recv_operation.hpp + include/cppcoro/net/socket_recv_from_operation.hpp + include/cppcoro/net/socket_send_operation.hpp + include/cppcoro/net/socket_send_to_operation.hpp + ) + set_target_properties(cppcoro + PROPERTIES + WINDOWS_EXPORT_ALL_SYMBOLS true + ) + +elseif(CMAKE_SYSTEM_NAME MATCHES Linux) + message(STATUS "using system: ${CMAKE_HOST_SYSTEM_VERSION}") + +endif() + +list(APPEND headers + include/cppcoro/awaitable_traits.hpp + include/cppcoro/is_awaitable.hpp + include/cppcoro/async_auto_reset_event.hpp + include/cppcoro/async_manual_reset_event.hpp + include/cppcoro/async_generator.hpp + include/cppcoro/async_mutex.hpp + include/cppcoro/async_latch.hpp + include/cppcoro/async_scope.hpp + include/cppcoro/broken_promise.hpp + include/cppcoro/cancellation_registration.hpp + include/cppcoro/cancellation_source.hpp + include/cppcoro/cancellation_token.hpp + include/cppcoro/task.hpp + include/cppcoro/sequence_barrier.hpp + include/cppcoro/sequence_traits.hpp + include/cppcoro/single_producer_sequencer.hpp + include/cppcoro/multi_producer_sequencer.hpp + include/cppcoro/shared_task.hpp + include/cppcoro/single_consumer_event.hpp + include/cppcoro/single_consumer_async_auto_reset_event.hpp + include/cppcoro/sync_wait.hpp + include/cppcoro/task.hpp + include/cppcoro/io_service.hpp + include/cppcoro/config.hpp + include/cppcoro/on_scope_exit.hpp + include/cppcoro/file_share_mode.hpp + include/cppcoro/file_open_mode.hpp + include/cppcoro/file_buffering_mode.hpp + include/cppcoro/file.hpp + include/cppcoro/fmap.hpp + include/cppcoro/when_all.hpp + include/cppcoro/when_all_ready.hpp + include/cppcoro/resume_on.hpp + include/cppcoro/schedule_on.hpp + include/cppcoro/generator.hpp + include/cppcoro/readable_file.hpp + include/cppcoro/recursive_generator.hpp + include/cppcoro/writable_file.hpp + include/cppcoro/read_only_file.hpp + include/cppcoro/write_only_file.hpp + include/cppcoro/read_write_file.hpp + include/cppcoro/file_read_operation.hpp + include/cppcoro/file_write_operation.hpp + include/cppcoro/static_thread_pool.hpp +) + +list(APPEND detail_headers + include/cppcoro/detail/void_value.hpp + include/cppcoro/detail/when_all_ready_awaitable.hpp + include/cppcoro/detail/when_all_counter.hpp + include/cppcoro/detail/when_all_task.hpp + include/cppcoro/detail/get_awaiter.hpp + include/cppcoro/detail/is_awaiter.hpp + include/cppcoro/detail/any.hpp + include/cppcoro/detail/sync_wait_task.hpp + include/cppcoro/detail/unwrap_reference.hpp + include/cppcoro/detail/lightweight_manual_reset_event.hpp +) + +list(APPEND net_headers + include/cppcoro/net/ip_address.hpp + include/cppcoro/net/ip_endpoint.hpp + include/cppcoro/net/ipv4_address.hpp + include/cppcoro/net/ipv4_endpoint.hpp + include/cppcoro/net/ipv6_address.hpp + include/cppcoro/net/ipv6_endpoint.hpp + include/cppcoro/net/socket.hpp +) + +target_include_directories(cppcoro +PUBLIC + $ + $ +) + +if(${CMAKE_CXX_COMPILER_ID} MATCHES Clang) + if(WIN32) + target_compile_options(cppcoro + PUBLIC + /std:c++latest + -fms-compatibility -Xclang -fcoroutines-ts + ) + target_compile_definitions(cppcoro + PUBLIC + _RESUMABLE_FUNCTIONS_SUPPORTED + ) + + else() + target_compile_options(cppcoro + PUBLIC + -std=c++1z -fcoroutines-ts + -stdlib=libc++ + PRIVATE + -fPIC + ) + target_link_libraries(cppcoro + PUBLIC + c++ pthread + PRIVATE + -Wall + ) + endif() + +elseif(MSVC) + target_compile_options(cppcoro + PUBLIC + /std:c++latest /await + /W4 + PRIVATE + "/analyze:max_paths 512" + ) + if(CMAKE_GENERATOR_PLATFORM STREQUAL x64) + target_compile_options(cppcoro + PUBLIC + /await:heapelide + ) + endif() + +endif() + +if(WIN32) + set_target_properties(cppcoro + PROPERTIES + WINDOWS_EXPORT_ALL_SYMBOLS True + ) + + target_link_libraries(cppcoro + PUBLIC + kernel32 synchronization ws2_32 mswsock + # msvcrt[d] msvcprt[d] vcruntime ucrt + ) +elseif(APPLE) + +elseif(CMAKE_SYSTEM_NAME MATCHES Linux) + target_link_libraries(cppcoro + PUBLIC + c++ # stdc++ # expect libc++ instead of libstdc++ + ) +endif() + +install(FILES ${headers} + DESTINATION ${CMAKE_INSTALL_PREFIX}/include/cppcoro +) +install(FILES ${detail_headers} + DESTINATION ${CMAKE_INSTALL_PREFIX}/include/cppcoro/details +) +install(FILES ${net_headers} + DESTINATION ${CMAKE_INSTALL_PREFIX}/include/cppcoro/net +) +install(TARGETS cppcoro + EXPORT ${PROJECT_NAME}-config + RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin + LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib + ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib +) + +install(EXPORT ${PROJECT_NAME}-config + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME} +) + +include(CMakePackageConfigHelpers) +set(VERSION_FILE_PATH ${CMAKE_BINARY_DIR}/cmake/${PROJECT_NAME}-config-version.cmake) +write_basic_package_version_file(${VERSION_FILE_PATH} + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) + +install(FILES ${VERSION_FILE_PATH} + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME} +) + +if(NOT BUILD_TESTING) + return() +endif() +enable_testing() +find_package(Threads REQUIRED) + +add_executable(cppcoro_test + test/main.cpp test/counted.cpp + test/generator_tests.cpp + # test/recursive_generator_tests.cpp # clang crash + test/async_generator_tests.cpp + test/async_auto_reset_event_tests.cpp + test/async_manual_reset_event_tests.cpp + test/async_mutex_tests.cpp + test/async_latch_tests.cpp + test/cancellation_token_tests.cpp + test/task_tests.cpp + test/sequence_barrier_tests.cpp + test/shared_task_tests.cpp + test/sync_wait_tests.cpp + test/single_consumer_async_auto_reset_event_tests.cpp + test/single_producer_sequencer_tests.cpp + test/multi_producer_sequencer_tests.cpp + test/when_all_tests.cpp + test/when_all_ready_tests.cpp + test/ip_address_tests.cpp + test/ip_endpoint_tests.cpp + test/ipv4_address_tests.cpp + test/ipv4_endpoint_tests.cpp + test/ipv6_address_tests.cpp + test/ipv6_endpoint_tests.cpp + test/static_thread_pool_tests.cpp +) + +set_target_properties(cppcoro_test +PROPERTIES + CXX_STANDARD 17 # follow that of `cppcoro` target +) + +target_link_libraries(cppcoro_test +PRIVATE + cppcoro + Threads::Threads +) + +set(conan_path ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) +if(EXISTS ${conan_path}) + include(${conan_path}) + conan_basic_setup() + message(STATUS "using conan: ${conan_path}") + + target_include_directories(cppcoro_test + PRIVATE + ${CONAN_INCLUDE_DIRS} + ) + target_compile_options(cppcoro_test + PRIVATE + ${CONAN_DEFINES} + ) + # + # 'doctest' is header-only library. + # we don't need these functions (and it requires CMake 3.13+) + # + # target_link_directories(cppcoro_test + # PRIVATE + # ${CONAN_LIB_DIRS} + # ) + target_link_libraries(cppcoro_test + PRIVATE + ${CONAN_LIBS} + ) +else() + find_package(doctest CONFIG REQUIRED) + get_target_property(DOCTEST_INCLUDE_DIR doctest::doctest + INTERFACE_INCLUDE_DIRECTORIES + ) + message(STATUS "using doctest: ${DOCTEST_INCLUDE_DIR}") + target_link_libraries(cppcoro_test + PRIVATE + doctest::doctest + ) +endif() + +if(WIN32) + target_sources(cppcoro_test + PRIVATE + test/scheduling_operator_tests.cpp + test/io_service_tests.cpp + test/file_tests.cpp + test/socket_tests.cpp + ) +else() + +endif() + +add_test(NAME test_all COMMAND cppcoro_test --duration=true ) \ No newline at end of file diff --git a/ports/cppcoro/CONTROL b/ports/cppcoro/CONTROL index 759974bb6..010bec558 100644 --- a/ports/cppcoro/CONTROL +++ b/ports/cppcoro/CONTROL @@ -1,5 +1,5 @@ Source: cppcoro -Homepage: https://github.com/luncliff/cppcoro -Version: 2020.04 -Description: A library of C++ coroutine abstractions for the coroutines TS -Supports: !uwp +Homepage: https://github.com/lewissbaker/cppcoro +Version: 2020.2 +Description: A library of C++ coroutine abstractions for the Coroutines TS +Supports: !(uwp|linux) diff --git a/ports/cppcoro/portfile.cmake b/ports/cppcoro/portfile.cmake index fa365a753..a79393082 100644 --- a/ports/cppcoro/portfile.cmake +++ b/ports/cppcoro/portfile.cmake @@ -1,14 +1,16 @@ -# -# the repo is fork of https://github.com/lewissbaker/cppcoro to support CMake / VcPkg -# + vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH - REPO luncliff/cppcoro - REF 2020.04 - SHA512 bd60a97911f4ee6c692e99817e9691cc5063be816c3a09a6100bc8f590f5b1e7b13a372a87e1710993b1bc177bbd99d779b2ebf16a367851b256e396bfd038da + REPO lewissbaker/cppcoro + REF 92892f31d0c41b8e34e6292d7c9d99228da5c501 + SHA512 d1997b7449f1c5c0790575d0755ffbb5f9eef13a7610f3ec666a585bdbb93bb1553f79214c1023a1ef23aaeef64078ca6ee3784107645d7a75c7bba943c10b84 HEAD_REF master ) +file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt + DESTINATION ${SOURCE_PATH} +) + vcpkg_configure_cmake( SOURCE_PATH ${SOURCE_PATH} PREFER_NINJA -- cgit v1.2.3 From 91b61bc82859de0ebe98b5b53b376101db83965a Mon Sep 17 00:00:00 2001 From: luncliff Date: Fri, 10 Apr 2020 19:43:49 +0900 Subject: [cppcoro] 2020-02-28 --- ports/cppcoro/CONTROL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/cppcoro/CONTROL b/ports/cppcoro/CONTROL index 010bec558..11e8fcba0 100644 --- a/ports/cppcoro/CONTROL +++ b/ports/cppcoro/CONTROL @@ -1,5 +1,5 @@ Source: cppcoro Homepage: https://github.com/lewissbaker/cppcoro -Version: 2020.2 +Version: 2020-2-28 Description: A library of C++ coroutine abstractions for the Coroutines TS Supports: !(uwp|linux) -- cgit v1.2.3 From 6c23ad6d9873037f0473a2877091abaa68372cf2 Mon Sep 17 00:00:00 2001 From: luncliff Date: Thu, 16 Apr 2020 14:57:29 +0900 Subject: [cppcoro] port install failure on platforms * vcpkg_fail_port_install on uwp/linux mention PR #10693 so linux/clang users can see the port issues --- ports/cppcoro/portfile.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ports/cppcoro/portfile.cmake b/ports/cppcoro/portfile.cmake index a79393082..c5d37445b 100644 --- a/ports/cppcoro/portfile.cmake +++ b/ports/cppcoro/portfile.cmake @@ -1,4 +1,7 @@ +# for Linux, the port requires libc++ and Clang. see #10693 +vcpkg_fail_port_install(ON_TARGET "uwp" "linux") + vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO lewissbaker/cppcoro -- cgit v1.2.3 From b3c031a65a7a1c17b3c0cb3afcd973c70106cf19 Mon Sep 17 00:00:00 2001 From: Park DongHa Date: Fri, 17 Apr 2020 02:19:19 +0900 Subject: [cppcoro] force static linkage * report error for clang-cl build with VC++ in VS 2019 will fail by the header file. --- ports/cppcoro/CMakeLists.txt | 15 +-------------- ports/cppcoro/portfile.cmake | 1 + 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/ports/cppcoro/CMakeLists.txt b/ports/cppcoro/CMakeLists.txt index 3f1a3ebae..f9bb7d702 100644 --- a/ports/cppcoro/CMakeLists.txt +++ b/ports/cppcoro/CMakeLists.txt @@ -75,10 +75,6 @@ elseif(WIN32) include/cppcoro/net/socket_send_operation.hpp include/cppcoro/net/socket_send_to_operation.hpp ) - set_target_properties(cppcoro - PROPERTIES - WINDOWS_EXPORT_ALL_SYMBOLS true - ) elseif(CMAKE_SYSTEM_NAME MATCHES Linux) message(STATUS "using system: ${CMAKE_HOST_SYSTEM_VERSION}") @@ -163,16 +159,7 @@ PUBLIC if(${CMAKE_CXX_COMPILER_ID} MATCHES Clang) if(WIN32) - target_compile_options(cppcoro - PUBLIC - /std:c++latest - -fms-compatibility -Xclang -fcoroutines-ts - ) - target_compile_definitions(cppcoro - PUBLIC - _RESUMABLE_FUNCTIONS_SUPPORTED - ) - + message(FATAL_ERROR " doesn't support clang-cl compiler") else() target_compile_options(cppcoro PUBLIC diff --git a/ports/cppcoro/portfile.cmake b/ports/cppcoro/portfile.cmake index c5d37445b..4d09df150 100644 --- a/ports/cppcoro/portfile.cmake +++ b/ports/cppcoro/portfile.cmake @@ -1,6 +1,7 @@ # for Linux, the port requires libc++ and Clang. see #10693 vcpkg_fail_port_install(ON_TARGET "uwp" "linux") +vcpkg_check_linkage(ONLY_STATIC_LIBRARY) vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH -- cgit v1.2.3 From fe0202d7f35e062580c74e1a61890ac2021720e5 Mon Sep 17 00:00:00 2001 From: Park DongHa Date: Tue, 21 Apr 2020 00:39:26 +0900 Subject: [cppcoro] register ci.baseline failure --- scripts/ci.baseline.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 9dc73c0de..c1ab5034b 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -289,6 +289,9 @@ cpp-netlib:arm-uwp=fail cpp-netlib:x64-uwp=fail cpp-netlib:x64-linux=ignore cpp-taskflow:x64-osx=fail +cppcoro:x64-linux=fail +cppcoro:arm-uwp=fail +cppcoro:x64-uwp=fail cppunit:arm64-windows=fail cppunit:arm-uwp=fail cppunit:x64-linux=fail -- cgit v1.2.3 From b009c2e5b047591d14ba5a36f682942ccdb14d42 Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Fri, 24 Apr 2020 03:04:26 -0700 Subject: [cppcoro] Simplify CMakeLists.txt to ease future maintenance. Fix VS 2019 builds. --- ports/cppcoro/CMakeLists.txt | 188 ++++++------------------------------------- ports/cppcoro/CONTROL | 4 +- ports/cppcoro/portfile.cmake | 10 ++- 3 files changed, 33 insertions(+), 169 deletions(-) diff --git a/ports/cppcoro/CMakeLists.txt b/ports/cppcoro/CMakeLists.txt index f9bb7d702..975dae4f2 100644 --- a/ports/cppcoro/CMakeLists.txt +++ b/ports/cppcoro/CMakeLists.txt @@ -1,7 +1,8 @@ - cmake_minimum_required(VERSION 3.8) project(cppcoro VERSION 2020.2 LANGUAGES CXX) +set(CMAKE_CXX_STANDARD 17) + add_library(cppcoro lib/async_mutex.cpp lib/lightweight_manual_reset_event.cpp @@ -27,14 +28,8 @@ add_library(cppcoro lib/ipv6_endpoint.cpp ) -set_target_properties(cppcoro -PROPERTIES - CXX_STANDARD 17 # expect C++ Coroutines TS -) - if(APPLE) message(STATUS "using sysroot: ${CMAKE_OSX_SYSROOT}") - elseif(WIN32) message(STATUS "using platform: ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}") # for now, build in single target @@ -61,103 +56,17 @@ elseif(WIN32) lib/socket_recv_operation.cpp lib/io_service.cpp ) - list(APPEND detail_headers - include/cppcoro/detail/win32.hpp - include/cppcoro/detail/win32_overlapped_operation.hpp - ) - list(APPEND net_headers - include/cppcoro/net/socket.hpp - include/cppcoro/net/socket_accept_operation.hpp - include/cppcoro/net/socket_connect_operation.hpp - include/cppcoro/net/socket_disconnect_operation.hpp - include/cppcoro/net/socket_recv_operation.hpp - include/cppcoro/net/socket_recv_from_operation.hpp - include/cppcoro/net/socket_send_operation.hpp - include/cppcoro/net/socket_send_to_operation.hpp - ) - -elseif(CMAKE_SYSTEM_NAME MATCHES Linux) +elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") message(STATUS "using system: ${CMAKE_HOST_SYSTEM_VERSION}") - endif() -list(APPEND headers - include/cppcoro/awaitable_traits.hpp - include/cppcoro/is_awaitable.hpp - include/cppcoro/async_auto_reset_event.hpp - include/cppcoro/async_manual_reset_event.hpp - include/cppcoro/async_generator.hpp - include/cppcoro/async_mutex.hpp - include/cppcoro/async_latch.hpp - include/cppcoro/async_scope.hpp - include/cppcoro/broken_promise.hpp - include/cppcoro/cancellation_registration.hpp - include/cppcoro/cancellation_source.hpp - include/cppcoro/cancellation_token.hpp - include/cppcoro/task.hpp - include/cppcoro/sequence_barrier.hpp - include/cppcoro/sequence_traits.hpp - include/cppcoro/single_producer_sequencer.hpp - include/cppcoro/multi_producer_sequencer.hpp - include/cppcoro/shared_task.hpp - include/cppcoro/single_consumer_event.hpp - include/cppcoro/single_consumer_async_auto_reset_event.hpp - include/cppcoro/sync_wait.hpp - include/cppcoro/task.hpp - include/cppcoro/io_service.hpp - include/cppcoro/config.hpp - include/cppcoro/on_scope_exit.hpp - include/cppcoro/file_share_mode.hpp - include/cppcoro/file_open_mode.hpp - include/cppcoro/file_buffering_mode.hpp - include/cppcoro/file.hpp - include/cppcoro/fmap.hpp - include/cppcoro/when_all.hpp - include/cppcoro/when_all_ready.hpp - include/cppcoro/resume_on.hpp - include/cppcoro/schedule_on.hpp - include/cppcoro/generator.hpp - include/cppcoro/readable_file.hpp - include/cppcoro/recursive_generator.hpp - include/cppcoro/writable_file.hpp - include/cppcoro/read_only_file.hpp - include/cppcoro/write_only_file.hpp - include/cppcoro/read_write_file.hpp - include/cppcoro/file_read_operation.hpp - include/cppcoro/file_write_operation.hpp - include/cppcoro/static_thread_pool.hpp -) - -list(APPEND detail_headers - include/cppcoro/detail/void_value.hpp - include/cppcoro/detail/when_all_ready_awaitable.hpp - include/cppcoro/detail/when_all_counter.hpp - include/cppcoro/detail/when_all_task.hpp - include/cppcoro/detail/get_awaiter.hpp - include/cppcoro/detail/is_awaiter.hpp - include/cppcoro/detail/any.hpp - include/cppcoro/detail/sync_wait_task.hpp - include/cppcoro/detail/unwrap_reference.hpp - include/cppcoro/detail/lightweight_manual_reset_event.hpp -) - -list(APPEND net_headers - include/cppcoro/net/ip_address.hpp - include/cppcoro/net/ip_endpoint.hpp - include/cppcoro/net/ipv4_address.hpp - include/cppcoro/net/ipv4_endpoint.hpp - include/cppcoro/net/ipv6_address.hpp - include/cppcoro/net/ipv6_endpoint.hpp - include/cppcoro/net/socket.hpp -) - target_include_directories(cppcoro PUBLIC $ - $ + $ ) -if(${CMAKE_CXX_COMPILER_ID} MATCHES Clang) +if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") if(WIN32) message(FATAL_ERROR " doesn't support clang-cl compiler") else() @@ -165,24 +74,20 @@ if(${CMAKE_CXX_COMPILER_ID} MATCHES Clang) PUBLIC -std=c++1z -fcoroutines-ts -stdlib=libc++ - PRIVATE - -fPIC ) target_link_libraries(cppcoro PUBLIC c++ pthread - PRIVATE - -Wall ) endif() elseif(MSVC) target_compile_options(cppcoro PUBLIC - /std:c++latest /await - /W4 + /await PRIVATE "/analyze:max_paths 512" + -D_SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING=1 ) if(CMAKE_GENERATOR_PLATFORM STREQUAL x64) target_compile_options(cppcoro @@ -194,11 +99,6 @@ elseif(MSVC) endif() if(WIN32) - set_target_properties(cppcoro - PROPERTIES - WINDOWS_EXPORT_ALL_SYMBOLS True - ) - target_link_libraries(cppcoro PUBLIC kernel32 synchronization ws2_32 mswsock @@ -213,24 +113,19 @@ elseif(CMAKE_SYSTEM_NAME MATCHES Linux) ) endif() -install(FILES ${headers} - DESTINATION ${CMAKE_INSTALL_PREFIX}/include/cppcoro -) -install(FILES ${detail_headers} - DESTINATION ${CMAKE_INSTALL_PREFIX}/include/cppcoro/details -) -install(FILES ${net_headers} - DESTINATION ${CMAKE_INSTALL_PREFIX}/include/cppcoro/net +install(DIRECTORY include/cppcoro + DESTINATION include ) + install(TARGETS cppcoro EXPORT ${PROJECT_NAME}-config - RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin - LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib - ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib ) install(EXPORT ${PROJECT_NAME}-config - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME} + DESTINATION share/${PROJECT_NAME} ) include(CMakePackageConfigHelpers) @@ -241,7 +136,7 @@ write_basic_package_version_file(${VERSION_FILE_PATH} ) install(FILES ${VERSION_FILE_PATH} - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME} + DESTINATION share/${PROJECT_NAME} ) if(NOT BUILD_TESTING) @@ -278,54 +173,21 @@ add_executable(cppcoro_test test/static_thread_pool_tests.cpp ) -set_target_properties(cppcoro_test -PROPERTIES - CXX_STANDARD 17 # follow that of `cppcoro` target -) - target_link_libraries(cppcoro_test PRIVATE cppcoro Threads::Threads ) -set(conan_path ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -if(EXISTS ${conan_path}) - include(${conan_path}) - conan_basic_setup() - message(STATUS "using conan: ${conan_path}") - - target_include_directories(cppcoro_test - PRIVATE - ${CONAN_INCLUDE_DIRS} - ) - target_compile_options(cppcoro_test - PRIVATE - ${CONAN_DEFINES} - ) - # - # 'doctest' is header-only library. - # we don't need these functions (and it requires CMake 3.13+) - # - # target_link_directories(cppcoro_test - # PRIVATE - # ${CONAN_LIB_DIRS} - # ) - target_link_libraries(cppcoro_test - PRIVATE - ${CONAN_LIBS} - ) -else() - find_package(doctest CONFIG REQUIRED) - get_target_property(DOCTEST_INCLUDE_DIR doctest::doctest - INTERFACE_INCLUDE_DIRECTORIES - ) - message(STATUS "using doctest: ${DOCTEST_INCLUDE_DIR}") - target_link_libraries(cppcoro_test - PRIVATE - doctest::doctest - ) -endif() +find_package(doctest CONFIG REQUIRED) +get_target_property(DOCTEST_INCLUDE_DIR doctest::doctest + INTERFACE_INCLUDE_DIRECTORIES +) +message(STATUS "using doctest: ${DOCTEST_INCLUDE_DIR}") +target_link_libraries(cppcoro_test +PRIVATE + doctest::doctest +) if(WIN32) target_sources(cppcoro_test @@ -335,8 +197,6 @@ if(WIN32) test/file_tests.cpp test/socket_tests.cpp ) -else() - endif() add_test(NAME test_all COMMAND cppcoro_test --duration=true ) \ No newline at end of file diff --git a/ports/cppcoro/CONTROL b/ports/cppcoro/CONTROL index 11e8fcba0..ea3a391fa 100644 --- a/ports/cppcoro/CONTROL +++ b/ports/cppcoro/CONTROL @@ -1,5 +1,5 @@ Source: cppcoro Homepage: https://github.com/lewissbaker/cppcoro -Version: 2020-2-28 +Version: 2020-2-28-1 Description: A library of C++ coroutine abstractions for the Coroutines TS -Supports: !(uwp|linux) +Supports: !uwp diff --git a/ports/cppcoro/portfile.cmake b/ports/cppcoro/portfile.cmake index 4d09df150..7938a65ba 100644 --- a/ports/cppcoro/portfile.cmake +++ b/ports/cppcoro/portfile.cmake @@ -1,8 +1,10 @@ - -# for Linux, the port requires libc++ and Clang. see #10693 -vcpkg_fail_port_install(ON_TARGET "uwp" "linux") +vcpkg_fail_port_install(ON_TARGET "uwp") vcpkg_check_linkage(ONLY_STATIC_LIBRARY) +if(VCPKG_TARGET_IS_LINUX) + message("Warning: cppcoro requires libc++ and Clang on Linux. See https://github.com/microsoft/vcpkg/pull/10693#issuecomment-610394650.") +endif() + vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO lewissbaker/cppcoro @@ -23,6 +25,8 @@ vcpkg_configure_cmake( ) vcpkg_install_cmake() +vcpkg_fixup_cmake_targets() + file(INSTALL ${SOURCE_PATH}/LICENSE.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright -- cgit v1.2.3