mirror of
https://github.com/curl/curl.git
synced 2026-08-02 14:00:29 +03:00
cmake: add CURL_CODE_COVERAGE option
To sync up with the `--enable-code-coverage` `./configure` option. Ref: https://gcc.gnu.org/onlinedocs/gcc/Invoking-Gcov.html Ref: https://gcc.gnu.org/onlinedocs/gcc/Cross-profiling.html Ref: https://clang.llvm.org/docs/SourceBasedCodeCoverage.html Closes #18468
This commit is contained in:
parent
dc3f4fd89b
commit
91720b620e
4 changed files with 51 additions and 0 deletions
|
|
@ -311,6 +311,26 @@ if(CURL_CLANG_TIDY)
|
|||
endif()
|
||||
endif()
|
||||
|
||||
option(CURL_CODE_COVERAGE "Enable code coverage build options" OFF)
|
||||
if(CURL_CODE_COVERAGE)
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||
set(CURL_COVERAGE_MACROS "NDEBUG")
|
||||
set(CURL_COVERAGE_CFLAGS "-O0" "-g" "-fprofile-arcs")
|
||||
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.1)
|
||||
list(APPEND CURL_COVERAGE_CFLAGS "--coverage")
|
||||
else()
|
||||
list(APPEND CURL_COVERAGE_CFLAGS "-ftest-coverage")
|
||||
endif()
|
||||
set(CURL_COVERAGE_LIBS "gcov")
|
||||
elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
set(CURL_COVERAGE_MACROS "NDEBUG")
|
||||
set(CURL_COVERAGE_CFLAGS "-O0" "-g" "-fprofile-instr-generate" "-fcoverage-mapping")
|
||||
set(CURL_COVERAGE_LDFLAGS "-fprofile-instr-generate" "-fcoverage-mapping")
|
||||
else()
|
||||
set(CURL_CODE_COVERAGE OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# For debug libs and exes, add "-d" postfix
|
||||
if(NOT DEFINED CMAKE_DEBUG_POSTFIX)
|
||||
set(CMAKE_DEBUG_POSTFIX "-d")
|
||||
|
|
@ -1984,6 +2004,9 @@ if(WIN32)
|
|||
endif()
|
||||
|
||||
list(APPEND CURL_LIBS ${CURL_NETWORK_AND_TIME_LIBS})
|
||||
if(CURL_CODE_COVERAGE)
|
||||
list(APPEND CURL_LIBS ${CURL_COVERAGE_LIBS})
|
||||
endif()
|
||||
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC") # MSVC but exclude clang-cl
|
||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS "-MP") # Parallel compilation
|
||||
|
|
|
|||
|
|
@ -227,6 +227,7 @@ target_link_libraries(my_target PRIVATE CURL::libcurl)
|
|||
- `BUILD_TESTING`: Build tests. Default: `ON`
|
||||
- `CURL_CLANG_TIDY`: Run the build through `clang-tidy`. Default: `OFF`
|
||||
- `CURL_CLANG_TIDYFLAGS`: Custom options to pass to `clang-tidy`. Default: (empty)
|
||||
- `CURL_CODE_COVERAGE`: Enable code coverage build options. Default: `OFF`
|
||||
- `CURL_COMPLETION_FISH`: Install fish completions. Default: `OFF`
|
||||
- `CURL_COMPLETION_FISH_DIR`: Custom fish completion install directory.
|
||||
- `CURL_COMPLETION_ZSH`: Install zsh completions. Default: `OFF`
|
||||
|
|
|
|||
|
|
@ -124,6 +124,10 @@ if(SHARE_LIB_OBJECT AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.12)
|
|||
set_target_properties(${LIB_OBJECT} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
|
||||
endif()
|
||||
endif()
|
||||
if(CURL_CODE_COVERAGE)
|
||||
set_property(TARGET ${LIB_OBJECT} APPEND PROPERTY COMPILE_DEFINITIONS ${CURL_COVERAGE_MACROS})
|
||||
set_property(TARGET ${LIB_OBJECT} APPEND PROPERTY COMPILE_OPTIONS ${CURL_COVERAGE_CFLAGS})
|
||||
endif()
|
||||
|
||||
target_include_directories(${LIB_OBJECT} INTERFACE
|
||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
|
||||
|
|
@ -162,6 +166,10 @@ if(BUILD_STATIC_LIBS)
|
|||
set_target_properties(${LIB_STATIC} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
|
||||
endif()
|
||||
endif()
|
||||
if(CURL_CODE_COVERAGE)
|
||||
set_property(TARGET ${LIB_STATIC} APPEND PROPERTY COMPILE_DEFINITIONS ${CURL_COVERAGE_MACROS})
|
||||
set_property(TARGET ${LIB_STATIC} APPEND PROPERTY COMPILE_OPTIONS ${CURL_COVERAGE_CFLAGS})
|
||||
endif()
|
||||
|
||||
target_include_directories(${LIB_STATIC} INTERFACE
|
||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
|
||||
|
|
@ -198,6 +206,15 @@ if(BUILD_SHARED_LIBS)
|
|||
set_target_properties(${LIB_SHARED} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
|
||||
endif()
|
||||
endif()
|
||||
if(CURL_CODE_COVERAGE)
|
||||
set_property(TARGET ${LIB_SHARED} APPEND PROPERTY COMPILE_DEFINITIONS ${CURL_COVERAGE_MACROS})
|
||||
set_property(TARGET ${LIB_SHARED} APPEND PROPERTY COMPILE_OPTIONS ${CURL_COVERAGE_CFLAGS})
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
|
||||
target_link_options(${LIB_SHARED} PRIVATE ${CURL_COVERAGE_LDFLAGS})
|
||||
else()
|
||||
target_link_libraries(${LIB_SHARED} PRIVATE ${CURL_COVERAGE_LDFLAGS})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
target_include_directories(${LIB_SHARED} INTERFACE
|
||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
|
||||
|
|
|
|||
|
|
@ -129,6 +129,16 @@ if(ENABLE_UNICODE AND MINGW AND NOT MINGW32CE)
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if(CURL_CODE_COVERAGE)
|
||||
set_property(TARGET ${EXE_NAME} APPEND PROPERTY COMPILE_DEFINITIONS ${CURL_COVERAGE_MACROS})
|
||||
set_property(TARGET ${EXE_NAME} APPEND PROPERTY COMPILE_OPTIONS ${CURL_COVERAGE_CFLAGS})
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
|
||||
target_link_options(${EXE_NAME} PRIVATE ${CURL_COVERAGE_LDFLAGS})
|
||||
else()
|
||||
target_link_libraries(${EXE_NAME} PRIVATE ${CURL_COVERAGE_LDFLAGS})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
|
||||
install(TARGETS ${EXE_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue