diff options
author | mj-xmr <mjxmr@protonmail.com> | 2020-11-04 19:27:06 +0100 |
---|---|---|
committer | mj-xmr <mjxmr@protonmail.com> | 2020-12-02 20:42:38 +0100 |
commit | e591341237e93c3cf8997b61eae5b1dc16dbb92e (patch) | |
tree | 88b96f144914ec1ebac9c1c4b6ba3172c0a828dd /utils/health | |
parent | Merge pull request #7025 (diff) | |
download | monero-e591341237e93c3cf8997b61eae5b1dc16dbb92e.tar.xz |
Clang-tidy integrated into CMakeLists.txt
Can be called from the source directory with:
utils/health/clang-tidy-run.sh
Diffstat (limited to 'utils/health')
-rw-r--r-- | utils/health/README.md | 34 | ||||
-rwxr-xr-x | utils/health/clang-tidy-run.sh | 65 |
2 files changed, 99 insertions, 0 deletions
diff --git a/utils/health/README.md b/utils/health/README.md new file mode 100644 index 000000000..dea46280e --- /dev/null +++ b/utils/health/README.md @@ -0,0 +1,34 @@ +#Intro +This directory contains tools, which can be used for checking the health of the project, like build/run time analyzers, lints, etc. + +#Usage +Unless it's stated differently, these scripts should be called from a given source directory, where you want the checks to be performed, for instance: + +`og@ghetto:~/dev/monero$ utils/health/clang-build-time-analyzer-run.sh` + +##ClangBuildAnalyzer +`utils/health/clang-build-time-analyzer-run.sh` +The CBA helps in finding culprints of slow compilation. +On the first run, the script will complain about the missing ClangBuildAnalyzer binary and will point you to another script, which is able to clone and build the required binary. + +##clang-tidy +`utils/health/clang-tidy-run.sh` +Performs Lint checks on the source code and stores the result in the build directory. More information on the [home page](https://clang.llvm.org/extra/clang-tidy/). + + +##Valgrind checks +`utils/health/valgrind-tests.sh` +This script is able to run valgrind's callgrind, cachegrind and memcheck for a given set of executables. +It expects ONE PARAMETER, which points to a file with paths to executables and their arguments, written line by line. For example: + +``` +ls -l -h +build/tests/unit_tests/unit_tests +``` + +The `*.out` results can be interpreted with the `kcachegrind` tool. +The memcheck output is just a readable text file with a summary at the end. + +#Footer +Responsible: mj-xmr + diff --git a/utils/health/clang-tidy-run.sh b/utils/health/clang-tidy-run.sh new file mode 100755 index 000000000..6b34f6a3b --- /dev/null +++ b/utils/health/clang-tidy-run.sh @@ -0,0 +1,65 @@ +#!/bin/bash -e + +# Copyright (c) 2014-2020, The Monero Project +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are +# permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other +# materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# clang-tidy runs lint checks on C & C++ sources and headers. +# Run this script from the source directory. + +DIR_BUILD_BASE="build/clang-tidy" +RESULT_BASE="clang-tidy-result" + +function tidy_for_language() { + LANG="${1}" + DIR_BUILD="${DIR_BUILD_BASE}-${LANG}" + RESULT="${RESULT_BASE}-${LANG}.txt" + + mkdir -p "$DIR_BUILD" && pushd "$DIR_BUILD" + + cmake ../.. \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DUSE_CCACHE=ON \ + -DUSE_CLANG_TIDY_${LANG}=ON \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_TESTS=ON + + make clean # Clean up, so that the result can be regenerated from scratch + time make -k 2>&1 | tee "$RESULT" # Build and store the result. -k means: ignore errors + #time make -k easylogging 2>&1 | tee "$RESULT" # Quick testing: build a single target + gzip -f "$RESULT" # Zip the result, because it's huge. -f overwrites the previously generated result + + echo "" + echo "Readable result stored in: $DIR_BUILD/$RESULT.gz" + + popd +} + +tidy_for_language "C" +tidy_for_language "CXX" + |