blob: 3f380038aaaae85d07012f75dd9ea616c91fa122 [file] [edit]
#!/usr/bin/env bash
# Copyright 2026 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -euo pipefail
readonly SCRIPT="${TEST_SRCDIR}/${TEST_WORKSPACE}/cc/coverage/collect_cc_coverage.sh"
readonly WORK_DIR="$(mktemp -d "${TEST_TMPDIR:-/tmp}/cc-coverage-args.XXXXXXXX")"
trap 'rm -rf "${WORK_DIR}"' EXIT
mkdir -p "${WORK_DIR}/coverage" "${WORK_DIR}/object files"
readonly OBJECT_WITH_SPACE="${WORK_DIR}/object files/runtime.o"
readonly SECOND_OBJECT="${WORK_DIR}/second.o"
touch "${WORK_DIR}/coverage/coverage.profraw" "${OBJECT_WITH_SPACE}" "${SECOND_OBJECT}"
printf '%s\n' "${OBJECT_WITH_SPACE}" "${SECOND_OBJECT}" > "${WORK_DIR}/runtime_objects_list.txt"
printf '%s\n' "${WORK_DIR}/runtime_objects_list.txt" > "${WORK_DIR}/manifest.txt"
cat > "${WORK_DIR}/llvm-profdata" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
[[ "$#" -eq 4 && "$1" == merge && "$2" == -output ]]
touch "$3"
EOF
cat > "${WORK_DIR}/llvm-cov" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
printf '%s\n' "$@" > "${LLVM_COV_ARGS}"
printf 'TN:\n'
EOF
chmod +x "${WORK_DIR}/llvm-profdata" "${WORK_DIR}/llvm-cov"
COVERAGE_DIR="${WORK_DIR}/coverage" \
COVERAGE_MANIFEST="${WORK_DIR}/manifest.txt" \
GENERATE_LLVM_LCOV=1 \
LLVM_PROFDATA="${WORK_DIR}/llvm-profdata" \
LLVM_COV="${WORK_DIR}/llvm-cov" \
LLVM_COV_ARGS="${WORK_DIR}/llvm-cov.args" \
bash "${SCRIPT}"
printf '%s\n' \
export \
-instr-profile "${WORK_DIR}/coverage/_cc_coverage.dat.data" \
-format=lcov \
'-ignore-filename-regex=^/tmp/.+' \
-object "${OBJECT_WITH_SPACE}" \
-object "${SECOND_OBJECT}" > "${WORK_DIR}/expected.args"
diff -u "${WORK_DIR}/expected.args" "${WORK_DIR}/llvm-cov.args"