From d38755e0273f13450ac5b4e1a8d4226aeeafa00d Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Sun, 10 Aug 2025 15:47:55 +0100 Subject: [PATCH 1/3] cmake: Allow user to override "Coverage" build type flags --- CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 11dc3f6e53..f1382f1fdf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -158,15 +158,12 @@ endif() # Define custom "Coverage" build type. set(CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O0 -DCOVERAGE=1 --coverage" CACHE STRING "Flags used by the C compiler during \"Coverage\" builds." - FORCE ) set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} --coverage" CACHE STRING "Flags used for linking binaries during \"Coverage\" builds." - FORCE ) set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} --coverage" CACHE STRING "Flags used by the shared libraries linker during \"Coverage\" builds." - FORCE ) mark_as_advanced( CMAKE_C_FLAGS_COVERAGE From 69e2a39a93e89054e4e23af4ca18be1e5414efce Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Sun, 10 Aug 2025 16:16:10 +0100 Subject: [PATCH 2/3] cmake: Explicitly specify generators that support Coverage functionality Only the "Ninja Multi-Config" generator supports an `EXCLUDE_FROM_ALL` target property value that varies by configuration. --- CMakeLists.txt | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f1382f1fdf..738bbb7857 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -156,20 +156,24 @@ else() endif() # Define custom "Coverage" build type. -set(CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O0 -DCOVERAGE=1 --coverage" CACHE STRING - "Flags used by the C compiler during \"Coverage\" builds." -) -set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} --coverage" CACHE STRING - "Flags used for linking binaries during \"Coverage\" builds." -) -set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} --coverage" CACHE STRING - "Flags used by the shared libraries linker during \"Coverage\" builds." -) -mark_as_advanced( - CMAKE_C_FLAGS_COVERAGE - CMAKE_EXE_LINKER_FLAGS_COVERAGE - CMAKE_SHARED_LINKER_FLAGS_COVERAGE -) +# The list of default build targets depends on whether they are being built for coverage. +# This functionality is limited to generators that support it. +if(CMAKE_GENERATOR MATCHES "Make|Ninja") + set(CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O0 -DCOVERAGE=1 --coverage" CACHE STRING + "Flags used by the C compiler during \"Coverage\" builds." + ) + set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} --coverage" CACHE STRING + "Flags used for linking binaries during \"Coverage\" builds." + ) + set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} --coverage" CACHE STRING + "Flags used by the shared libraries linker during \"Coverage\" builds." + ) + mark_as_advanced( + CMAKE_C_FLAGS_COVERAGE + CMAKE_EXE_LINKER_FLAGS_COVERAGE + CMAKE_SHARED_LINKER_FLAGS_COVERAGE + ) +endif() if(PROJECT_IS_TOP_LEVEL) get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) From 10beecc738541ee0b36395f270c505bff6810646 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Sun, 10 Aug 2025 16:32:39 +0100 Subject: [PATCH 3/3] cmake: Rework `tests` target for Coverage and multi-config generators --- CMakeLists.txt | 9 +++++++-- src/CMakeLists.txt | 17 ++++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 738bbb7857..b46251123f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -299,10 +299,15 @@ message("Optional binaries:") message(" benchmark ........................... ${SECP256K1_BUILD_BENCHMARK}") message(" noverify_tests ...................... ${SECP256K1_BUILD_TESTS}") set(tests_status "${SECP256K1_BUILD_TESTS}") -if(CMAKE_BUILD_TYPE STREQUAL "Coverage") - set(tests_status OFF) +if(tests_status) + if(CMAKE_GENERATOR STREQUAL "Ninja Multi-Config") + set(tests_status "${tests_status}, except for the 'Coverage' configuration") + elseif(CMAKE_BUILD_TYPE STREQUAL "Coverage") + set(tests_status OFF) + endif() endif() message(" tests ............................... ${tests_status}") +unset(tests_status) message(" exhaustive tests .................... ${SECP256K1_BUILD_EXHAUSTIVE_TESTS}") message(" ctime_tests ......................... ${SECP256K1_BUILD_CTIME_TESTS}") message(" examples ............................ ${SECP256K1_BUILD_EXAMPLES}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fa3b2903eb..dc2292f920 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -137,12 +137,19 @@ if(SECP256K1_BUILD_TESTS) add_executable(noverify_tests tests.c) target_link_libraries(noverify_tests secp256k1_precomputed secp256k1_asm) add_test(NAME secp256k1_noverify_tests COMMAND noverify_tests) - if(NOT CMAKE_BUILD_TYPE STREQUAL "Coverage") - add_executable(tests tests.c) - target_compile_definitions(tests PRIVATE VERIFY) - target_link_libraries(tests secp256k1_precomputed secp256k1_asm) - add_test(NAME secp256k1_tests COMMAND tests) + + add_executable(tests tests.c) + if(CMAKE_GENERATOR STREQUAL "Ninja Multi-Config") + set_target_properties(tests PROPERTIES EXCLUDE_FROM_ALL $) + endif() + target_compile_definitions(tests PRIVATE VERIFY) + target_link_libraries(tests secp256k1_precomputed secp256k1_asm) + set(configs ${CMAKE_BUILD_TYPE} ${CMAKE_CONFIGURATION_TYPES}) + list(REMOVE_ITEM configs Coverage) + if(configs) + add_test(NAME secp256k1_tests COMMAND tests CONFIGURATIONS ${configs}) endif() + unset(configs) endif() if(SECP256K1_BUILD_EXHAUSTIVE_TESTS)