# Install prerequisites (minimal).
brew install cmake gcc git
# Install prerequisites (including optional ones).
brew install cmake doxygen gcc git lcov llvm pre-commit
# Install pre-commit hooks.
pre-commit install
pre-commit install --hook-type commit-msg
# Set CPM source cache.
export CPM_SOURCE_CACHE=$HOME/.cache/CPM # for Linux
export CPM_SOURCE_CACHE=$HOME/Library/Caches/CPM # for macOS
# Run linters.
pre-commit run --all-files
# Tests.
cmake -S . -B build/debug -DCMAKE_BUILD_TYPE=Debug
cmake --build build/debug --target check
# Benchmarking.
cmake -S . -B build/release -DCMAKE_BUILD_TYPE=Release -DBUILD_BENCHMARKING=ON
NANOBENCH_SUPPRESS_WARNINGS=1 cmake --build build/release --target bench
# Documents.
cmake -S . -B build/docs -DBUILD_TESTING=OFF
cmake --build build/docs --target doc
# Code coverage.
cmake -S . -B build/coverage -DCMAKE_BUILD_TYPE=Debug -DUSE_CODE_COVERAGE=ON
lcov -z -d build/coverage
cmake --build build/coverage --target check
lcov -c -d build/coverage -o build/coverage/coverage.info
lcov -r build/coverage/coverage.info '*/c++/*' -o build/coverage/coverage.info
lcov -r build/coverage/coverage.info '*/lib/*' -o build/coverage/coverage.info
lcov -r build/coverage/coverage.info '*/doctest/*' -o build/coverage/coverage.info
lcov -r build/coverage/coverage.info '*/tests/*' -o build/coverage/coverage.info
genhtml -o build/coverage/html build/coverage/coverage.info
# Compiler sanitizers.
cmake -S . -B build/sanitizer -DCMAKE_BUILD_TYPE=Debug -DUSE_SANITIZER=ON
cmake --build build/sanitizer --target check
# Clang-Tidy.
cmake -S . -B build/clang-tidy -DCMAKE_BUILD_TYPE=Debug -DUSE_CLANG_TIDY=ON
cmake --build build/clang-tidy --target check