Files
build/core/line_coverage.mk
Ryan Prichard 7146b7cd46 Unlist libunwind as a critical component
Virtually nothing uses libunwind, and no one should start using it, so
it's unlikely to be critical.

(Code should use libunwindstack.so to collect backtraces, and it should
use libc.so's _Unwind_* APIs for C++ exception handling unwinding.)

Test: build Android
Change-Id: I81882a4634ff4d397abe8a7cf5ff15a22a3eed2f
Merged-In: I81882a4634ff4d397abe8a7cf5ff15a22a3eed2f
(cherry picked from commit 9355aeba79)
2020-06-19 22:38:42 +00:00

96 lines
3.5 KiB
Makefile

# -----------------------------------------------------------------
# Make target for line coverage. This target generates a zip file
# called `line_coverage_profiles.zip` that contains a large set of
# zip files one for each fuzz target/critical component. Each zip
# file contains a set of profile files (*.gcno) that we will use
# to generate line coverage reports. Furthermore, target compiles
# all fuzz targets with line coverage instrumentation enabled and
# packs them into another zip file called `line_coverage_profiles.zip`.
#
# To run the make target set the coverage related envvars first:
# NATIVE_LINE_COVERAGE=true NATIVE_COVERAGE=true \
# COVERAGE_PATHS=* make haiku-line-coverage
# -----------------------------------------------------------------
# TODO(b/148306195): Due this issue some fuzz targets cannot be built with
# line coverage instrumentation. For now we just blacklist them.
blacklisted_fuzz_targets := libneuralnetworks_fuzzer
fuzz_targets := $(ALL_FUZZ_TARGETS)
fuzz_targets := $(filter-out $(blacklisted_fuzz_targets),$(fuzz_targets))
# Android components that considered critical.
# Please note that adding/Removing critical components is very rare.
critical_components_static := \
lib-bt-packets \
libbt-stack \
libffi \
libhevcdec \
libhevcenc \
libmpeg2dec \
libosi \
libpdx \
libselinux \
libvold \
libyuv
# Format is <module_name> or <module_name>:<apex_name>
critical_components_shared := \
libaudioprocessing \
libbinder \
libbluetooth_gd \
libbrillo \
libcameraservice \
libcurl \
libhardware \
libinputflinger \
libopus \
libstagefright \
libvixl:com.android.art.debug
# Use the intermediates directory to avoid installing libraries to the device.
intermediates := $(call intermediates-dir-for,PACKAGING,haiku-line-coverage)
# We want the profile files for all fuzz targets + critical components.
line_coverage_profiles := $(intermediates)/line_coverage_profiles.zip
critical_components_static_inputs := $(foreach lib,$(critical_components_static), \
$(call intermediates-dir-for,STATIC_LIBRARIES,$(lib))/$(lib).a)
critical_components_shared_inputs := $(foreach lib,$(critical_components_shared), \
$(eval filename := $(call word-colon,1,$(lib))) \
$(eval modulename := $(subst :,.,$(lib))) \
$(call intermediates-dir-for,SHARED_LIBRARIES,$(modulename))/$(filename).so)
fuzz_target_inputs := $(foreach fuzz,$(fuzz_targets), \
$(call intermediates-dir-for,EXECUTABLES,$(fuzz))/$(fuzz))
# When line coverage is enabled (NATIVE_LINE_COVERAGE is set), make creates
# a "coverage" directory and stores all profile (*.gcno) files in inside.
# We need everything that is stored inside this directory.
$(line_coverage_profiles): $(fuzz_target_inputs)
$(line_coverage_profiles): $(critical_components_static_inputs)
$(line_coverage_profiles): $(critical_components_shared_inputs)
$(line_coverage_profiles): $(SOONG_ZIP)
$(SOONG_ZIP) -o $@ -D $(PRODUCT_OUT)/coverage
# Zip all fuzz targets compiled with line coverage.
line_coverage_fuzz_targets := $(intermediates)/line_coverage_fuzz_targets.zip
$(line_coverage_fuzz_targets): $(fuzz_target_inputs)
$(line_coverage_fuzz_targets): $(SOONG_ZIP)
$(SOONG_ZIP) -o $@ -j $(addprefix -f ,$(fuzz_target_inputs))
.PHONY: haiku-line-coverage
haiku-line-coverage: $(line_coverage_profiles) $(line_coverage_fuzz_targets)
$(call dist-for-goals, haiku-line-coverage, \
$(line_coverage_profiles):line_coverage_profiles.zip \
$(line_coverage_fuzz_targets):line_coverage_fuzz_targets.zip)
line_coverage_profiles :=
line_coverage_fuzz_targets :=