Skip to main content

No project description provided

Project description

cltcache -- A python3 clang-tidy cache

A simple cache which can cache clang-tidy static code analysis results to speed up the build process in large messy codebases. cltcache is like ccache but for clang-tidy static code analysis results.

Usage

Install using pip

pip3 install cltcache

Prefix all of your clang-tidy calls with cltcache in your build system or configuration.

set(CMAKE_C_CLANG_TIDY "cltcache" "${CLANG_TIDY_PROGRAM}")
set(CMAKE_CXX_CLANG_TIDY "cltcache" "${CLANG_TIDY_PROGRAM}")
cmake -DCLANG_TIDY_PROGRAM="cltcache /usr/bin/clang-tidy" ..

Finally you have to manually manage your cache which is stored in ~/.cltcache. If you are using cltcache in CI you need to distribute the cache between builders. If you are using cltcache locally you will need to manually manage your cltcache because it will grow indefinately. Here is a useful command which should remove all cache entries older than 60 days:

find ~/.cltcache -mtime +60 | xargs rm

For reasonable clang-tidy usage, the cache should be so small, that you will not need to clean it until you upgrade your computer. Check the disk usage of the cache using this command:

du -hd0 ~/.cltcache

Configuration

There are some configuration options which are loaded from ~/.cltcache/cltcache.cfg by default. See the example configuration file here for more information about them.

Why?

Static code analysis of C++ code can consume more time and power than compilation while producing a lot smaller output files, especially when no warnings and errors were generated. The output is also basically never consumed by a customer, which means it is not as important to ensure the correctness of the cache. For these reasons static code analysis should be a much better match for caching than compilation is. Because clang-tidy is probably used in tons of CI-pipelines around the world, it should be possible to save tons of energy by caching the results.

How?

The cache key is generated by computing a sha256-hash of the gcc preprocessor results, the enabled clang-tidy checks and the clang-tidy version string.

graph LR;
    clang-tidy_args-->g++_preprocessor;
    clang-tidy_args-->clang-tidy_version;
    clang-tidy_args-->clang-tidy_enabled_checks;
    g++_preprocessor-->preprocessor_sha256;
    clang-tidy_version-->version_sha256;
    clang-tidy_enabled_checks-->enabled_checks_sha256;
    preprocessor_sha256-->sha256;
    version_sha256-->sha256;
    enabled_checks_sha256-->sha256;
    sha256-->cache_key;

Caveats

Correctness

cltcache assumes that identical preprocessor output, clang-tidy version and enabled checks will produce identical results, which is not a guarantee. One such case is if a filtered header is moved to a path where its warnings and errors would no longer be filtered. If you are concerned about this, you should probably reconsider your priorities. Relying upon clang-tidy to the point where its correctness is more important than time, money and the environment, is rarely a sustainable strategy.

Ouptut order

The order of stdout and stderr is not preserved. The stdout of clang-tidy is printed first and the stderr is printed last.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cltcache-1.1.2.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

cltcache-1.1.2-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file cltcache-1.1.2.tar.gz.

File metadata

  • Download URL: cltcache-1.1.2.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for cltcache-1.1.2.tar.gz
Algorithm Hash digest
SHA256 041e790cd42f99e0cd504d70c8e427ab6f39a1b01cbf06dd827960d03592b84b
MD5 07902da4c67e166f11ade27b1573c7ea
BLAKE2b-256 c1499a1956d5f2d784bb6264363510a5988a0fb93c0a326a76ae61ab8f1068ae

See more details on using hashes here.

File details

Details for the file cltcache-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: cltcache-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for cltcache-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6bbe8243fb5c88bed64fc13151f1c6d99ceb4b73e27ea56f80ab529ef22314e8
MD5 a01b992687e57f63be0bc4e05a53c069
BLAKE2b-256 0496ce8b4e4ce14d286486a39052fd927ca0d2af0f3429aa1bd6b81ba684777e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page