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