lcov usage fails with clang #12602

issue jamesob opened this issue on March 5, 2018
  1. jamesob commented at 3:32 PM on March 5, 2018: member

    <!-- This issue tracker is only for technical issues related to Bitcoin Core. General bitcoin questions and/or support requests are best directed to the Bitcoin StackExchange at https://bitcoin.stackexchange.com. For reporting security issues, please read instructions at https://bitcoincore.org/en/contact/. If the node is "stuck" during sync or giving "block checksum mismatch" errors, please ensure your hardware is stable by running memtest and observe CPU temperature with a load-test tool such as linpack before creating an issue! -->

    <!-- Describe the issue -->

    <!--- What behavior did you expect? -->

    <!--- What was the actual behavior (provide screenshots if the issue is GUI-related)? -->

    <!--- How reliably can you reproduce the issue, what are the steps to do so? -->

    <!-- What version of Bitcoin Core are you using, where did you get it (website, self-compiled, etc)? -->

    <!-- What type of machine are you observing the error on (OS/CPU and disk type)? -->

    <!-- Any extra information that might be useful in the debugging process. -->

    <!--- This is normally the contents of a `debug.log` or `config.log` file. Raw text or a link to a pastebin type site are preferred. -->

    When attempting to generate coverage information with make cov after configuring and building with clang, lcov/gcov (for the versions I'm using) are unable to parse the generated gcda files:

    /home/james/tmp/bitcoin/src/libbitcoin_server_a-miner.gcno:version '402*', prefer 'A72*'
    geninfo: ERROR: GCOV failed for /home/james/tmp/bitcoin/src/libbitcoin_server_a-miner.gcda!
    Makefile:1269: recipe for target 'test_bitcoin.info' failed
    

    We may need to special-case the effects of --enable-lcov when building with clang to use flags and commands mentioned here.

    Configure output

    Options used to compile and link:
      with wallet   = yes
      with gui / qt = yes
        qt version  = 5
        with qr     = auto
      with zmq      = yes
      with test     = yes
      with bench    = yes
      with upnp     = auto
      use asm       = yes
      debug enabled = no
      werror        = no
    
      target os     = linux
      build os      =
    
      CC            = /usr/bin/clang-4.0
      CFLAGS        = -g -O2
      CPPFLAGS      = -I/home/james/tmp/bitcoin/db4/include/ -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS
      CXX           = /usr/bin/clang++-4.0 -std=c++11
      CXXFLAGS      = -std=c++11 -std=c++11  --coverage -Og
      LDFLAGS       = -L/home/james/tmp/bitcoin/db4/lib/ --coverage
      ARFLAGS       = cr
    

    Versions

     $ clang++-4.0 --version
    
    clang version 4.0.1-6 (tags/RELEASE_401/final)
    Target: x86_64-pc-linux-gnu
    Thread model: posix
    InstalledDir: /usr/bin
    
     $ lcov --version
    
    lcov: LCOV version 1.13
    
     $ gcov --version
    
    gcov (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0
    Copyright (C) 2017 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.
    There is NO warranty; not even for MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE.
    

    make cov failure

    $ make cov
    ...
    /usr/bin/lcov --gcov-tool=/usr/bin/gcov -c  -d /home/james/tmp/bitcoin/src -t test_bitcoin -o test_bitcoin.info
    Capturing coverage data from /home/james/tmp/bitcoin/src
    Found gcov version: 7.2.0
    Scanning /home/james/tmp/bitcoin/src for .gcda files ...
    Found 290 data files in /home/james/tmp/bitcoin/src
    Processing src/libbitcoin_server_a-miner.gcda
    /home/james/tmp/bitcoin/src/libbitcoin_server_a-miner.gcno:version '402*', prefer 'A72*'
    geninfo: ERROR: GCOV failed for /home/james/tmp/bitcoin/src/libbitcoin_server_a-miner.gcda!
    Makefile:1269: recipe for target 'test_bitcoin.info' failed
    make: *** [test_bitcoin.info] Error 29
    rm test_bitcoin.info baseline_filtered.info baseline.info
    
  2. fanquake added the label Build system on Mar 5, 2018
  3. MarcoFalke commented at 12:45 AM on March 12, 2018: member

    I always assumed that gcov only works with gcc.

  4. jamesob commented at 10:21 PM on March 26, 2018: member

    Might preferable to warn during configuration if --enable-coverage is combined with non-gcc usage. I'll try for a PR soonish.

  5. MarcoFalke commented at 2:20 AM on February 27, 2019: member

    I'd rather add support for llvm-cov in addition to --enable-lcov

  6. MarcoFalke commented at 12:05 AM on December 7, 2019: member

    You can use llvm-cov with clang with the following diff applied:

    diff --git a/configure.ac b/configure.ac
    index 2c648b0b5c..c502543a1a 100644
    --- a/configure.ac
    +++ b/configure.ac
    @@ -87,7 +87,7 @@ dnl Check/return PATH for base programs.
     AC_PATH_TOOL(AR, ar)
     AC_PATH_TOOL(RANLIB, ranlib)
     AC_PATH_TOOL(STRIP, strip)
    -AC_PATH_TOOL(GCOV, gcov)
    +AC_PATH_TOOL(GCOV, llvm-cov_gcov)
     AC_PATH_PROG(LCOV, lcov)
     dnl Python 3.5 is specified in .python-version and should be used if available, see doc/dependencies.md
     AC_PATH_PROGS([PYTHON], [python3.5 python3.6 python3.7 python3.8 python3 python])
    

    Then create an executable file

    $ cat ~/bin/llvm-cov_gcov 
    #!/usr/bin/env bash
    exec llvm-cov gcov "$@"
    $ which llvm-cov_gcov
    ~/bin/llvm-cov_gcov
    
  7. laanwj referenced this in commit bdc2644b72 on Mar 27, 2020
  8. sidhujag referenced this in commit 2c27c78eae on Mar 28, 2020
  9. MarcoFalke referenced this in commit e349eeeb2c on Aug 8, 2020
  10. sidhujag referenced this in commit 59cd04bdf5 on Aug 8, 2020
  11. MarcoFalke closed this on Aug 12, 2020

  12. sidhujag referenced this in commit fa44ec8d07 on Aug 14, 2020
  13. PastaPastaPasta referenced this in commit 7c488f73f9 on Sep 17, 2021
  14. PastaPastaPasta referenced this in commit db62c6f314 on Sep 19, 2021
  15. thelazier referenced this in commit 586492d15a on Sep 25, 2021
  16. DrahtBot locked this on Feb 15, 2022

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-04-22 09:15 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me