From 1589c9699b13e0cb40a880ad701f88566beef771 Mon Sep 17 00:00:00 2001 From: Gabriel Chen Date: Thu, 30 Nov 2023 20:29:44 -0800 Subject: [PATCH] Export clang coverage flags Configurate clang coverage flags in soong and export to makefile. Change-Id: I47a89e4131893b8813b10a6582f8b487b3700b91 --- cc/coverage.go | 33 ++++++++++++++++++++++++++++----- cc/makevars.go | 7 +++++++ 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/cc/coverage.go b/cc/coverage.go index cbd8a6f3e..393a8a6b4 100644 --- a/cc/coverage.go +++ b/cc/coverage.go @@ -22,6 +22,29 @@ import ( "android/soong/android" ) +var ( + clangCoverageHostLdFlags = []string{ + "-Wl,--no-as-needed", + "-Wl,--wrap,open", + } + clangContinuousCoverageFlags = []string{ + "-mllvm", + "-runtime-counter-relocation", + } + clangCoverageCFlags = []string{ + "-Wno-frame-larger-than=", + } + clangCoverageCommonFlags = []string{ + "-fcoverage-mapping", + "-Wno-pass-failed", + "-D__ANDROID_CLANG_COVERAGE__", + } + clangCoverageHWASanFlags = []string{ + "-mllvm", + "-hwasan-globals=0", + } +) + const profileInstrFlag = "-fprofile-instr-generate=/data/misc/trace/clang-%p-%m.profraw" type CoverageProperties struct { @@ -102,19 +125,19 @@ func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags // flags that the module may use. flags.Local.CFlags = append(flags.Local.CFlags, "-Wno-frame-larger-than=", "-O0") } else if clangCoverage { - flags.Local.CommonFlags = append(flags.Local.CommonFlags, profileInstrFlag, - "-fcoverage-mapping", "-Wno-pass-failed", "-D__ANDROID_CLANG_COVERAGE__") + flags.Local.CommonFlags = append(flags.Local.CommonFlags, profileInstrFlag) + flags.Local.CommonFlags = append(flags.Local.CommonFlags, clangCoverageCommonFlags...) // Override -Wframe-larger-than. We can expect frame size increase after // coverage instrumentation. - flags.Local.CFlags = append(flags.Local.CFlags, "-Wno-frame-larger-than=") + flags.Local.CFlags = append(flags.Local.CFlags, clangCoverageCFlags...) if EnableContinuousCoverage(ctx) { - flags.Local.CommonFlags = append(flags.Local.CommonFlags, "-mllvm", "-runtime-counter-relocation") + flags.Local.CommonFlags = append(flags.Local.CommonFlags, clangContinuousCoverageFlags...) } // http://b/248022906, http://b/247941801 enabling coverage and hwasan-globals // instrumentation together causes duplicate-symbol errors for __llvm_profile_filename. if c, ok := ctx.Module().(*Module); ok && c.sanitize.isSanitizerEnabled(Hwasan) { - flags.Local.CommonFlags = append(flags.Local.CommonFlags, "-mllvm", "-hwasan-globals=0") + flags.Local.CommonFlags = append(flags.Local.CommonFlags, clangCoverageHWASanFlags...) } } } diff --git a/cc/makevars.go b/cc/makevars.go index 6c3f551d7..70fdd57bf 100644 --- a/cc/makevars.go +++ b/cc/makevars.go @@ -123,6 +123,13 @@ func makeVarsProvider(ctx android.MakeVarsContext) { ctx.Strict("SOONG_MODULES_USING_WNO_ERROR", makeStringOfKeys(ctx, modulesUsingWnoErrorKey)) ctx.Strict("SOONG_MODULES_MISSING_PGO_PROFILE_FILE", makeStringOfKeys(ctx, modulesMissingProfileFileKey)) + ctx.Strict("CLANG_COVERAGE_CONFIG_CFLAGS", strings.Join(clangCoverageCFlags, " ")) + ctx.Strict("CLANG_COVERAGE_CONFIG_COMMFLAGS", strings.Join(clangCoverageCommonFlags, " ")) + ctx.Strict("CLANG_COVERAGE_HOST_LDFLAGS", strings.Join(clangCoverageHostLdFlags, " ")) + ctx.Strict("CLANG_COVERAGE_INSTR_PROFILE", profileInstrFlag) + ctx.Strict("CLANG_COVERAGE_CONTINUOUS_FLAGS", strings.Join(clangContinuousCoverageFlags, " ")) + ctx.Strict("CLANG_COVERAGE_HWASAN_FLAGS", strings.Join(clangCoverageHWASanFlags, " ")) + ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS", strings.Join(asanCflags, " ")) ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS", strings.Join(asanLdflags, " "))