diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2020-04-24 14:01:38 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-24 14:01:38 -0700 |
| commit | 84f94fb6fd9dc993f608d65c383592d6d8b6a798 (patch) | |
| tree | e4985d092877d173a53ed2e986707942686dfd36 | |
| parent | a511b4376610088ad8d26f942a79404c62b7e44b (diff) | |
| parent | b009c2e5b047591d14ba5a36f682942ccdb14d42 (diff) | |
| download | vcpkg-84f94fb6fd9dc993f608d65c383592d6d8b6a798.tar.gz vcpkg-84f94fb6fd9dc993f608d65c383592d6d8b6a798.zip | |
[cppcoro] add new port (#10693)
* [cppcoro] add new port
* [cppcoro] update with PR review
* update reference to tag and hash value
* ${PORT} for destination
Linux build support should marked unavailable?
* [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.
* [cppcoro] 2020-02-28
* [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
* [cppcoro] force static linkage
* report error for clang-cl
build with VC++ in VS 2019 will fail by the header file.
* [cppcoro] register ci.baseline failure
* [cppcoro] Simplify CMakeLists.txt to ease future maintenance. Fix VS 2019 builds.
Co-authored-by: Robert Schumacher <roschuma@microsoft.com>
| -rw-r--r-- | ports/cppcoro/CMakeLists.txt | 202 | ||||
| -rw-r--r-- | ports/cppcoro/CONTROL | 5 | ||||
| -rw-r--r-- | ports/cppcoro/portfile.cmake | 37 | ||||
| -rw-r--r-- | scripts/ci.baseline.txt | 3 |
4 files changed, 247 insertions, 0 deletions
diff --git a/ports/cppcoro/CMakeLists.txt b/ports/cppcoro/CMakeLists.txt new file mode 100644 index 000000000..975dae4f2 --- /dev/null +++ b/ports/cppcoro/CMakeLists.txt @@ -0,0 +1,202 @@ +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 + 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 +) + +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 + ) +elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") + message(STATUS "using system: ${CMAKE_HOST_SYSTEM_VERSION}") +endif() + +target_include_directories(cppcoro +PUBLIC + $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> + $<INSTALL_INTERFACE:include> +) + +if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + if(WIN32) + message(FATAL_ERROR "<experimental/resumable> doesn't support clang-cl compiler") + else() + target_compile_options(cppcoro + PUBLIC + -std=c++1z -fcoroutines-ts + -stdlib=libc++ + ) + target_link_libraries(cppcoro + PUBLIC + c++ pthread + ) + endif() + +elseif(MSVC) + target_compile_options(cppcoro + PUBLIC + /await + PRIVATE + "/analyze:max_paths 512" + -D_SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING=1 + ) + if(CMAKE_GENERATOR_PLATFORM STREQUAL x64) + target_compile_options(cppcoro + PUBLIC + /await:heapelide + ) + endif() + +endif() + +if(WIN32) + 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(DIRECTORY include/cppcoro + DESTINATION include +) + +install(TARGETS cppcoro + EXPORT ${PROJECT_NAME}-config + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +) + +install(EXPORT ${PROJECT_NAME}-config + DESTINATION 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 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 +) + +target_link_libraries(cppcoro_test +PRIVATE + cppcoro + Threads::Threads +) + +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 + PRIVATE + test/scheduling_operator_tests.cpp + test/io_service_tests.cpp + test/file_tests.cpp + test/socket_tests.cpp + ) +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 new file mode 100644 index 000000000..ea3a391fa --- /dev/null +++ b/ports/cppcoro/CONTROL @@ -0,0 +1,5 @@ +Source: cppcoro
+Homepage: https://github.com/lewissbaker/cppcoro
+Version: 2020-2-28-1
+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..7938a65ba --- /dev/null +++ b/ports/cppcoro/portfile.cmake @@ -0,0 +1,37 @@ +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
+ 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
+ OPTIONS
+ -DBUILD_TESTING=False
+)
+vcpkg_install_cmake()
+
+vcpkg_fixup_cmake_targets()
+
+file(INSTALL ${SOURCE_PATH}/LICENSE.txt
+ 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)
diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 490e2a0ff..961116554 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -283,6 +283,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
|
