Re: Speeding up builds with clang-tidy, clang-analyzer and iwyu
Christian Ledergerber via ccache <[email protected]> Sun, 2 Aug 2020 19:49:01 +0200
| Newsgroups | gmane.comp.compilers.ccache |
|---|---|
| Message-ID | <[email protected]> |
Thank you for your answer. In the mean-time I have been thinking some more and what I am afraid of is that the result will not be correct if the flags to clang-tidy change. A typical command run by make looks like this: cd /home/dev/erx-soft/cmake-build-debug/modules/utils && ccache /home/dev/clion-2020.1.3/bin/cmake/linux/bin/cmake -E __run_co_compile --launcher=ccache --tidy="clang-tidy-10;-warnings-as-errors=*;-header-filter=/home/dev/erx-soft/modules/utils/*;--checks=-*,bugprone-argument-comment,bugprone-assert-side-effect,bugprone-bad-signal-to-kill-thread,bugprone-bool-pointer-implicit-conversion,bugprone-branch-clone,bugprone-copy-constructor-init,bugprone-dangling-handle,bugprone-dynamic-static-initializers,bugprone-exception-escape,bugprone-fold-init-type,bugprone-forward-declaration-namespace,bugprone-forwarding-reference-overload,bugprone-inaccurate-erase,bugprone-incorrect-roundings,bugprone-infinite-loop,bugprone-integer-division,bugprone-lambda-function-name,bugprone-macro-parentheses,bugprone-macro-repeated-side-effects,bugprone-misplaced-operator-in-strlen-in-alloc,bugprone-misplaced-pointer-arithmetic-in-alloc,bugprone-misplaced-widening- cast,bugprone-move-forwarding-reference,bugprone-multiple-statement-macro,bugprone-not-null-terminated-result,bugprone-parent-virtual-call,bugprone-posix-return,bugprone-reserved-identifier,bugprone-signed-char-misuse,bugprone-sizeof-container,bugprone-sizeof-expression,bugprone-spuriously-wake-up-functions,bugprone-string-constructor,bugprone-string-integer-assignment,bugprone-string-literal-with-embedded-nul,bugprone-suspicious-enum-usage,bugprone-suspicious-include,bugprone-suspicious-memset-usage,bugprone-suspicious-missing-comma,bugprone-suspicious-semicolon,bugprone-suspicious-string-compare,bugprone-swapped-arguments,bugprone-terminating-continue,bugprone-throw-keyword-missing,bugprone-too-small-loop-variable,bugprone-undefined-memory-manipulation,bugprone-undelegated-constructor, bugprone-unhandled-self-assignment,bugprone-unused-raii,bugprone-unused-return-value,bugprone-use-after-move,bugprone-virtual-near-miss" --source=/home/dev/erx-soft/modules/utils/src/DevSerialHelper.cpp -- /usr/bin/clang++-10 -DASSETS_LOCATION_DIR=\"/home/dev/erx-soft/assets/\" -DCPU_ONLY -DLOG_DIR=\"/mnt/erxssd/runs/current/\" -DSPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE -DSPDLOG_COMPILED_LIB -DSPDLOG_FMT_EXTERNAL -I/home/dev/erx-soft/cmake-build-debug -I/home/dev/erx-soft/modules/utils/include -I/home/dev/erx-soft/modules/utils/src -I/home/dev/erx-soft/libs/serializable_objects/cpp/include -I/home/dev/erx-soft/cmake-build-debug/libs/serializable_objects/cpp/generated_fbs -I/home/dev/erx-soft/external/jsoncpp/src/lib_json/../../include -I/home/dev/erx-soft/cmake-build-debug/external/jsoncpp/include/json -I/home/dev/erx-soft/external/spdlog/include -I/home/dev/erx-soft/external/fmt/include -I/home/dev/erx-soft/modules/logger/include -isystem /opt/erx/include -isystem /opt/erx/include/opencv -Werror -Wall -Wshadow-all -Wunreachable-code -Wno-error=undefined-inline -Wno-error=#pragma-messages -fno-limit-debug-info -fcolor-diagnostics -g -Werror -pthread -std=gnu++17 -o CMakeFiles/utils.dir/src/DevSerialHelper.cpp.o -c /home/dev/erx-soft/modules/utils/src/DevSerialHelper.cpp In other words: it seems like ccache could also hash the flags to clang-tidy. The question: does it? Now that I am looking at the above command line: Will this require to also modify the cmake binary to generate other command lines? Maybe I'll find the time to look more into this in two weeks. Regards, Christian On 02.08.20 19:28, Joel Rosdahl wrote: > On Sun, 2 Aug 2020 at 18:55, Christian Ledergerber via ccache > <[email protected]> wrote: >> [...] >> To me it seems like the following should work: >> >> 1. try to use ccache >> >> 2. if no hit: >> >> - run clang-tidy >> >> - run clang >> >> For this I would need to know whether ccache generated a hit - lets say >> as return code of the executable. > I don't think there's a good way of accomplishing this without adding > code to ccache to optionally exit with failure on a cache miss. But it > would be easy to add it. > > Regards, > Joel