From c5ea832a3a638f2657c91d5b68124d8a2eeee877 Mon Sep 17 00:00:00 2001 From: leha-bot Date: Sat, 3 Aug 2024 17:14:52 +0300 Subject: [PATCH 1/8] feat venv: Better search of python inside venv --- cmake/UserverVenv.cmake | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cmake/UserverVenv.cmake b/cmake/UserverVenv.cmake index 34b83fc3cfe7..539440b6d717 100644 --- a/cmake/UserverVenv.cmake +++ b/cmake/UserverVenv.cmake @@ -95,7 +95,12 @@ function(userver_venv_setup) set(venv_dir "${parent_directory}/${venv_name}") set(venv_bin_dir "${venv_dir}/bin") - set("${python_output_var}" "${venv_bin_dir}/python" PARENT_SCOPE) + find_program(venv_python + NAMES python python3 + PATHS "${venv_dir}/bin" "${venv_dir}/Scripts" + REQUIRED NO_DEFAULT_PATH + ) + set("${python_output_var}" "${venv_python}" PARENT_SCOPE) # A unique venv is set up once for the whole build. # For example, a userver gRPC cmake script may be included multiple times @@ -164,7 +169,7 @@ function(userver_venv_setup) ) execute_process( COMMAND - "${venv_bin_dir}/python3" -m pip install + "${venv_python}" -m pip install --disable-pip-version-check -U ${pip_requirements} ${ARG_PIP_ARGS} From 9093f340804dde15c7d22b7559c6d26d061ba7a3 Mon Sep 17 00:00:00 2001 From: leha-bot Date: Sat, 3 Aug 2024 17:16:34 +0300 Subject: [PATCH 2/8] feat cmake: Better search for libev's headers They are also may be packaged inside "{includedir}/libev/". --- cmake/modules/FindLibEv.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/modules/FindLibEv.cmake b/cmake/modules/FindLibEv.cmake index e25cbf40b3e0..8d20f244461a 100644 --- a/cmake/modules/FindLibEv.cmake +++ b/cmake/modules/FindLibEv.cmake @@ -7,7 +7,7 @@ _userver_module_begin( ) _userver_module_find_include( - NAMES ev.h + NAMES ev.h libev/ev.h ) _userver_module_find_library( From 283a769fcbad21d953f0b3fef754fb696bfba6fa Mon Sep 17 00:00:00 2001 From: leha-bot Date: Sat, 3 Aug 2024 17:22:02 +0300 Subject: [PATCH 3/8] feat cmake: Use Boost::stacktrace_windbg on WIN32-like platforms --- cmake/Stacktrace.cmake | 4 +++- universal/CMakeLists.txt | 8 +++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/cmake/Stacktrace.cmake b/cmake/Stacktrace.cmake index f8e6b165bde8..fa435de845f8 100644 --- a/cmake/Stacktrace.cmake +++ b/cmake/Stacktrace.cmake @@ -19,7 +19,9 @@ function(_make_stacktrace_target TARGET Boost_VERSION_STRING) endif() add_library(userver-stacktrace INTERFACE) - if(USERVER_FEATURE_STACKTRACE) + if(WIN32) + target_link_libraries("${TARGET}" INTERFACE Boost::stacktrace_windbg) + elseif(USERVER_FEATURE_STACKTRACE) target_link_libraries("${TARGET}" INTERFACE Boost::stacktrace_backtrace backtrace dl) else() target_link_libraries("${TARGET}" INTERFACE Boost::stacktrace_basic dl) diff --git a/universal/CMakeLists.txt b/universal/CMakeLists.txt index 5b6fbbe35dc7..ad4e929c2a88 100644 --- a/universal/CMakeLists.txt +++ b/universal/CMakeLists.txt @@ -32,12 +32,18 @@ list(REMOVE_ITEM SOURCES ${UNIT_TEST_SOURCES} ${BENCH_SOURCES} ${INTERNAL_SOURCE set(CMAKE_THREAD_PREFER_PTHREAD ON) set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) +if (WIN32) + set(userver_boost_stacktrace_component stacktrace_windbg) +else() + set(userver_boost_stacktrace_component stacktrace_basic) +endif() + find_package(Boost REQUIRED COMPONENTS program_options filesystem regex - stacktrace_basic + ${userver_boost_stacktrace_component} OPTIONAL_COMPONENTS stacktrace_backtrace ) From 6ef3a75bd2be05b7a07d0bc0e97a577106cf15f1 Mon Sep 17 00:00:00 2001 From: leha-bot Date: Sat, 3 Aug 2024 17:22:54 +0300 Subject: [PATCH 4/8] feat cmake: Avoid linking with absent libatomic on WIN32-like platforms --- cmake/UserverRequireDWCAS.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/UserverRequireDWCAS.cmake b/cmake/UserverRequireDWCAS.cmake index 2652f103edf4..6ece9dafe62c 100644 --- a/cmake/UserverRequireDWCAS.cmake +++ b/cmake/UserverRequireDWCAS.cmake @@ -84,7 +84,7 @@ function (userver_target_require_dwcas target visibility) return() endif() - if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin" AND NOT CMAKE_SYSTEM MATCHES "BSD") + if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin" AND NOT CMAKE_SYSTEM MATCHES "BSD" AND NOT WIN32) list(APPEND TEST_LIBRARIES "atomic") endif() From 59308f26441a0eb4a9b7f8a21635f2981f9036ef Mon Sep 17 00:00:00 2001 From: leha-bot Date: Sat, 3 Aug 2024 17:23:26 +0300 Subject: [PATCH 5/8] feat cmake: Avoid uboost::context on WIN32-like platforms It's not supported, so use the usual Boost. --- core/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index cab10587f941..343932864aba 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -120,7 +120,7 @@ add_subdirectory(${USERVER_THIRD_PARTY_DIRS}/http-parser http-parser) target_link_libraries(${PROJECT_NAME} PRIVATE userver-http-parser userver-llhttp) set(USERVER_UBOOST_CORO_DEFAULT ON) -if(CMAKE_SYSTEM_NAME MATCHES "Darwin" AND CMAKE_SYSTEM_PROCESSOR MATCHES "arm64") +if(CMAKE_SYSTEM_NAME MATCHES "Darwin" AND CMAKE_SYSTEM_PROCESSOR MATCHES "arm64" OR CMAKE_SYSTEM_NAME MATCHES "Windows") # Use system Boost.Context and Boost.Coroutine2 with latest patches # for arm64, otherwise userver will crash at startup. # From 9ac1e742685f5be5448d6ca0ce52bbb1b589315f Mon Sep 17 00:00:00 2001 From: leha-bot Date: Sat, 3 Aug 2024 17:24:34 +0300 Subject: [PATCH 6/8] feat cmake: Avoid include'ing libc fixes on WIN32-like platforms. It's no use for the WIN32. --- core/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 343932864aba..94aa69693324 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -206,7 +206,7 @@ _userver_directory_install(COMPONENT core ) target_include_directories(${PROJECT_NAME} SYSTEM BEFORE PUBLIC - $ + $<$>:$> ) # The bug is only triggered with optimizations enabled -- TAXICOMMON-1729 From 146b7593f6bd6f4a4d337c2bd26ae369ef1206c0 Mon Sep 17 00:00:00 2001 From: leha-bot Date: Sat, 3 Aug 2024 17:26:29 +0300 Subject: [PATCH 7/8] feat cmake: Use /W4 and /sdl for MSVC as an analogue flags. Instead of GCC/Clang-like -Wall -Wextra -pedantic. MSVC's /WAll produces a lot of noise, so even MS STL authors had not used it. The /sdl flag adds some static analysis checks. See https://learn.microsoft.com/en-us/cpp/build/reference/sdl-enable-additional-security-checks?view=msvc-170 for details. --- universal/CMakeLists.txt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/universal/CMakeLists.txt b/universal/CMakeLists.txt index ad4e929c2a88..e140232a8e66 100644 --- a/universal/CMakeLists.txt +++ b/universal/CMakeLists.txt @@ -84,9 +84,15 @@ endif() add_library(userver-internal-compile-options INTERFACE) userver_target_require_dwcas(userver-internal-compile-options INTERFACE) target_compile_features(userver-internal-compile-options INTERFACE cxx_std_17) -target_compile_options(userver-internal-compile-options INTERFACE - "-Wall" "-Wextra" "-Wpedantic" -) +if (MSVC) + target_compile_options(userver-internal-compile-options INTERFACE + "/W4" "/sdl" + ) +else() + target_compile_options(userver-internal-compile-options INTERFACE + "-Wall" "-Wextra" "-Wpedantic" + ) +endif() include(UserverCxxCompileOptionsIfSupported) userver_target_cxx_compile_options_if_supported(userver-internal-compile-options INTERFACE From 3b857ed1deb2b1a72be2fd954636c5641b7e4eeb Mon Sep 17 00:00:00 2001 From: leha-bot Date: Sat, 3 Aug 2024 17:29:36 +0300 Subject: [PATCH 8/8] feat cmake: Avoid potentially unportable flag in benchmarks --- cmake/SetupGBench.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/SetupGBench.cmake b/cmake/SetupGBench.cmake index 8fb0ba657d48..3254388f07f6 100644 --- a/cmake/SetupGBench.cmake +++ b/cmake/SetupGBench.cmake @@ -32,7 +32,8 @@ CPMAddPackage( "BENCHMARK_ENABLE_GTEST_TESTS OFF" ) -target_compile_options(benchmark PRIVATE "-Wno-format-nonliteral") +include(UserverCxxCompileOptionsIfSupported) +userver_target_cxx_compile_options_if_supported(benchmark PRIVATE "-Wno-format-nonliteral") if (NOT TARGET benchmark::benchmark) add_library(benchmark::benchmark ALIAS benchmark) # Unify link names endif()