xref: /aosp_15_r20/bionic/build/coverage.sh (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker#!/bin/bash
2*8d67ca89SAndroid Build Coastguard Worker
3*8d67ca89SAndroid Build Coastguard Worker# This script generates coverage for bionic.
4*8d67ca89SAndroid Build Coastguard Worker#
5*8d67ca89SAndroid Build Coastguard Worker# Prereqs: Coverage-enabled build.
6*8d67ca89SAndroid Build Coastguard Worker#
7*8d67ca89SAndroid Build Coastguard Worker#   $ lunch <target>
8*8d67ca89SAndroid Build Coastguard Worker#   $ m NATIVE_COVERAGE_PATHS="bionic" CLANG_COVERAGE=true
9*8d67ca89SAndroid Build Coastguard Worker#   $ m NATIVE_COVERAGE_PATHS="bionic" CLANG_COVERAGE=true bionic-unit-tests
10*8d67ca89SAndroid Build Coastguard Worker#
11*8d67ca89SAndroid Build Coastguard Worker# Do *NOT* then rebuild at the top level, or you'll clobber the
12*8d67ca89SAndroid Build Coastguard Worker# coverage-enabled libc!
13*8d67ca89SAndroid Build Coastguard Worker#
14*8d67ca89SAndroid Build Coastguard Worker# Flash image and set $ANDROID_SERIAL.
15*8d67ca89SAndroid Build Coastguard Worker#
16*8d67ca89SAndroid Build Coastguard Worker# Usage: $ bionic/build/coverage.sh
17*8d67ca89SAndroid Build Coastguard Worker# Output: HTML report is generated to /tmp/bionic-coverage/html/index.html
18*8d67ca89SAndroid Build Coastguard Worker#
19*8d67ca89SAndroid Build Coastguard Worker
20*8d67ca89SAndroid Build Coastguard Workereval "$(cd ${ANDROID_BUILD_TOP}; build/soong/soong_ui.bash --dumpvars-mode --vars="TARGET_ARCH TARGET_ARCH_VARIANT")"
21*8d67ca89SAndroid Build Coastguard Worker
22*8d67ca89SAndroid Build Coastguard WorkerLLVM_PROFDATA=${ANDROID_BUILD_TOP}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-profdata
23*8d67ca89SAndroid Build Coastguard WorkerLLVM_COV=${ANDROID_BUILD_TOP}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-cov
24*8d67ca89SAndroid Build Coastguard Worker
25*8d67ca89SAndroid Build Coastguard WorkerDEVICE_TEST_DIR32=/data/local/tmp/bionic-coverage32
26*8d67ca89SAndroid Build Coastguard WorkerDEVICE_TEST_DIR64=/data/local/tmp/bionic-coverage64
27*8d67ca89SAndroid Build Coastguard WorkerDEVICE_PROF_DIR=/data/local/tmp/bionic-profraw
28*8d67ca89SAndroid Build Coastguard WorkerHOST_PROFDATA_DIR=/tmp/bionic-coverage
29*8d67ca89SAndroid Build Coastguard Worker
30*8d67ca89SAndroid Build Coastguard Worker# Run bionic-unit-tests
31*8d67ca89SAndroid Build Coastguard Workeradb shell rm -rf ${DEVICE_TEST_DIR32} ${DEVICE_TEST_DIR64} ${DEVICE_PROF_DIR}
32*8d67ca89SAndroid Build Coastguard Workeradb shell mkdir ${DEVICE_TEST_DIR32} ${DEVICE_TEST_DIR64} ${DEVICE_PROF_DIR}
33*8d67ca89SAndroid Build Coastguard Workeradb push $OUT/data/nativetest/bionic-loader-test-libs ${DEVICE_TEST_DIR32}
34*8d67ca89SAndroid Build Coastguard Workeradb push $OUT/data/nativetest/bionic-unit-tests ${DEVICE_TEST_DIR32}
35*8d67ca89SAndroid Build Coastguard Workeradb push $OUT/data/nativetest64/bionic-loader-test-libs ${DEVICE_TEST_DIR64}
36*8d67ca89SAndroid Build Coastguard Workeradb push $OUT/data/nativetest64/bionic-unit-tests ${DEVICE_TEST_DIR64}
37*8d67ca89SAndroid Build Coastguard Workeradb shell LLVM_PROFILE_FILE=${DEVICE_PROF_DIR}/bionic-%p-%m.profraw \
38*8d67ca89SAndroid Build Coastguard Worker  LD_LIBRARY_PATH=${DEVICE_TEST_DIR32}/bionic-loader-test-libs \
39*8d67ca89SAndroid Build Coastguard Worker  ${DEVICE_TEST_DIR32}/bionic-unit-tests/bionic-unit-tests
40*8d67ca89SAndroid Build Coastguard Workeradb shell LLVM_PROFILE_FILE=${DEVICE_PROF_DIR}/bionic-%p-%m.profraw \
41*8d67ca89SAndroid Build Coastguard Worker  LD_LIBRARY_PATH=${DEVICE_TEST_DIR64}/bionic-loader-test-libs \
42*8d67ca89SAndroid Build Coastguard Worker  ${DEVICE_TEST_DIR64}/bionic-unit-tests/bionic-unit-tests
43*8d67ca89SAndroid Build Coastguard Worker
44*8d67ca89SAndroid Build Coastguard Worker# Pull coverage files and post-process
45*8d67ca89SAndroid Build Coastguard Workerrm -rf ${HOST_PROFDATA_DIR}
46*8d67ca89SAndroid Build Coastguard Workermkdir ${HOST_PROFDATA_DIR}
47*8d67ca89SAndroid Build Coastguard Workeradb pull ${DEVICE_PROF_DIR} ${HOST_PROFDATA_DIR}/profraws
48*8d67ca89SAndroid Build Coastguard Worker
49*8d67ca89SAndroid Build Coastguard Worker${LLVM_PROFDATA} merge \
50*8d67ca89SAndroid Build Coastguard Worker  --output=${HOST_PROFDATA_DIR}/bionic.profdata \
51*8d67ca89SAndroid Build Coastguard Worker  ${HOST_PROFDATA_DIR}/profraws/*.profraw
52*8d67ca89SAndroid Build Coastguard Worker
53*8d67ca89SAndroid Build Coastguard Worker${LLVM_COV} show \
54*8d67ca89SAndroid Build Coastguard Worker  --instr-profile=${HOST_PROFDATA_DIR}/bionic.profdata \
55*8d67ca89SAndroid Build Coastguard Worker  --format=html \
56*8d67ca89SAndroid Build Coastguard Worker  $OUT/symbols/apex/com.android.runtime/lib64/bionic/libc.so \
57*8d67ca89SAndroid Build Coastguard Worker  --object=$OUT/symbols/apex/com.android.runtime/lib64/bionic/libm.so \
58*8d67ca89SAndroid Build Coastguard Worker  --object=$OUT/symbols/data/nativetest64/bionic-unit-tests/bionic-unit-tests \
59*8d67ca89SAndroid Build Coastguard Worker  --object=$OUT/symbols/apex/com.android.runtime/lib/bionic/libc.so \
60*8d67ca89SAndroid Build Coastguard Worker  --object=$OUT/symbols/apex/com.android.runtime/lib/bionic/libm.so \
61*8d67ca89SAndroid Build Coastguard Worker  --object=$OUT/symbols/data/nativetest/bionic-unit-tests/bionic-unit-tests \
62*8d67ca89SAndroid Build Coastguard Worker  /proc/self/cwd/bionic/libc \
63*8d67ca89SAndroid Build Coastguard Worker  /proc/self/cwd/bionic/libm \
64*8d67ca89SAndroid Build Coastguard Worker  --output-dir=${HOST_PROFDATA_DIR}/html \
65*8d67ca89SAndroid Build Coastguard Worker  --show-region-summary=false
66