diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4a806361c..636991549 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -139,7 +139,7 @@ jobs: - name: "clang" cc: "clang" cxx: "clang++" - buildargs: "-DENABLE_FUZZ=ON" + buildargs: "-DENABLE_CODE_COVERAGE=ON -DENABLE_FUZZ=ON" name: "${{ matrix.os }} (${{ matrix.config.name }})" runs-on: ${{ matrix.os }} @@ -305,7 +305,7 @@ jobs: - name: "clang" cc: "clang" cxx: "clang++" - buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON -DENABLE_FUZZ=ON" + buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON -DENABLE_CODE_COVERAGE=ON -DENABLE_FUZZ=ON" name: "rockylinux-9 (${{ matrix.config.name }})" runs-on: ${{ matrix.os }} @@ -354,7 +354,7 @@ jobs: - name: "clang" cc: "clang" cxx: "clang++" - buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON -DENABLE_FUZZ=ON" + buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON -DENABLE_CODE_COVERAGE=ON -DENABLE_FUZZ=ON" name: "freebsd-14 (${{ matrix.config.name }})" runs-on: ${{ matrix.os }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 685b27998..83f9798bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,8 +33,8 @@ set(CMAKE_SKIP_RPATH ON) # compiler options set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsigned-char -fms-extensions -Wall -Wextra -Werror-implicit-function-declaration -Wformat -Werror=format-security") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char -fms-extensions -Wall -Wextra") -if (CMAKE_C_COMPILER_ID STREQUAL "GNU") - # extra options specific to gcc/g++ +if(CMAKE_C_COMPILER_ID STREQUAL "GNU") + # extra options specific to GCC set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat-overflow=2 -Wformat-truncation=2") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat-overflow=2 -Wformat-truncation=2") endif() @@ -137,8 +137,15 @@ option(ENABLE_CODE_COVERAGE "Enable code coverage" OFF) # code coverage add_library(coverage_config INTERFACE) if(ENABLE_CODE_COVERAGE) - target_compile_options(coverage_config INTERFACE -O0 -g --coverage) - target_link_libraries(coverage_config INTERFACE --coverage) + if(CMAKE_C_COMPILER_ID STREQUAL "GNU") + # GCC + target_compile_options(coverage_config INTERFACE -O0 -g --coverage) + target_link_libraries(coverage_config INTERFACE --coverage) + elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang") + # Clang + target_compile_options(coverage_config INTERFACE -g -fprofile-instr-generate -fcoverage-mapping) + target_link_libraries(coverage_config INTERFACE -fprofile-instr-generate) + endif() endif() # headless mode is required for documentation diff --git a/tests/fuzz/CMakeLists.txt b/tests/fuzz/CMakeLists.txt index c2728aef8..8ca2b8d5a 100644 --- a/tests/fuzz/CMakeLists.txt +++ b/tests/fuzz/CMakeLists.txt @@ -95,7 +95,7 @@ set(FUZZ_CORE_TARGETS calc crypto string utf8) foreach(fuzz_target ${FUZZ_CORE_TARGETS}) add_executable(weechat_core_${fuzz_target}_fuzzer core/${fuzz_target}-fuzzer.c) - target_link_libraries(weechat_core_${fuzz_target}_fuzzer ${FUZZ_TARGET_LINK}) + target_link_libraries(weechat_core_${fuzz_target}_fuzzer ${FUZZ_TARGET_LINK} coverage_config) set_target_properties(weechat_core_${fuzz_target}_fuzzer PROPERTIES LINK_FLAGS "$ENV{LIB_FUZZING_ENGINE}") add_dependencies(weechat_core_${fuzz_target}_fuzzer ${FUZZ_TARGET_DEPS}) endforeach()