#!/bin/bash # Copyright 2020 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # # Calculates coverage for the specified crate only # Usage: # $ ./bin/crate_coverage arch [additional arguments for cargo test] # Requirements: # $ rustup toolchain install nightly # $ cargo install grcov rust-covfix set -ex cd "${0%/*}/../" target_dir=$( cargo metadata --no-deps --format-version 1 | jq -r ".target_directory" ) # Delete old coverage profiles find "$target_dir/debug" -name "*.gcda" -delete # Run test with coverage profiling (cd $1 && CARGO_INCREMENTAL=0 \ RUSTFLAGS="-Zprofile -Ccodegen-units=1 -Copt-level=0 -Coverflow-checks=off \ -Zpanic_abort_tests" \ cargo +nightly test "${@:2}") # Calculate code coverage grcov "$target_dir/debug" -s . \ --ignore "/*" --ignore-not-existing \ -t lcov --llvm --branch \ -o /tmp/lcov.info # Apply code coverage fixes rust-covfix /tmp/lcov.info >lcov.info