cmake: add `CURL_CODE_COVERAGE` option
No binary (build failed)
—
(log yok)
| @@ -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}) | |