diff options
Diffstat (limited to 'pw_toolchain/host_clang/toolchains.gni')
-rw-r--r-- | pw_toolchain/host_clang/toolchains.gni | 89 |
1 files changed, 79 insertions, 10 deletions
diff --git a/pw_toolchain/host_clang/toolchains.gni b/pw_toolchain/host_clang/toolchains.gni index d9f9da76a..3e847c4af 100644 --- a/pw_toolchain/host_clang/toolchains.gni +++ b/pw_toolchain/host_clang/toolchains.gni @@ -18,9 +18,20 @@ import("$dir_pw_toolchain/clang_tools.gni") declare_args() { # Sets the sanitizer to pass to clang. Valid values are "address", "memory", - # "thread", "undefined". + # "thread", "undefined", "undefined_heuristic", and "coverage". pw_toolchain_SANITIZERS = [] + # Indicates if this toolchain supports generating coverage reports from + # pw_test targets. + # + # For example, the static analysis toolchains that run `clang-tidy` instead + # of the test binary itself cannot generate coverage reports. + pw_toolchain_COVERAGE_ENABLED = false + + # Indicates if this toolchain supports building fuzzers. This is typically + # set by individual toolchains and not by GN args. + pw_toolchain_FUZZING_ENABLED = false + # Indicates if this build is a part of OSS-Fuzz, which needs to be able to # provide its own compiler and flags. This violates the build hermeticisim and # should only be used for OSS-Fuzz. @@ -30,6 +41,9 @@ declare_args() { # Specifies the tools used by host Clang toolchains. _host_clang_toolchain = { if (pw_toolchain_OSS_FUZZ_ENABLED) { + # OSS-Fuzz sets compiler and linker paths. See + # google.github.io/oss-fuzz/getting-started/new-project-guide/#Requirements. + # Just use the "llvm-ar" on the system path. ar = "llvm-ar" cc = getenv("CC") @@ -40,14 +54,16 @@ _host_clang_toolchain = { is_host_toolchain = true - # Enable static analysis for host clang based toolchains, - # even with OSS-Fuzz enabled. - static_analysis = true + static_analysis = { + # Enable static analysis for host clang based toolchains, + # even with OSS-Fuzz enabled. + enabled = true + } } # Common default scope shared by all host Clang toolchains. _defaults = { - # TODO(pwbug/461) amend toolchain declaration process to + # TODO(b/234888755) amend toolchain declaration process to # remove this hack. default_configs = [] default_configs = [ @@ -55,6 +71,12 @@ _defaults = { "$dir_pw_toolchain/host_clang:no_system_libcpp", "$dir_pw_toolchain/host_clang:xcode_sysroot", ] + + # OSS-Fuzz uses -stdlib=libc++, which isn't included in the CIPD-provided + # Linux sysroot (it instead provides libstdc++). + if (!pw_toolchain_OSS_FUZZ_ENABLED) { + default_configs += [ "$dir_pw_toolchain/host_clang:linux_sysroot" ] + } } pw_toolchain_host_clang = { @@ -68,6 +90,9 @@ pw_toolchain_host_clang = { default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ] } + + # Allow coverage generation if pw_toolchain_SANITIZERS = ["coverage"]. + pw_toolchain_COVERAGE_ENABLED = true } } @@ -81,6 +106,9 @@ pw_toolchain_host_clang = { default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ] } + + # Allow coverage generation if pw_toolchain_SANITIZERS = ["coverage"]. + pw_toolchain_COVERAGE_ENABLED = true } } @@ -89,11 +117,14 @@ pw_toolchain_host_clang = { forward_variables_from(_host_clang_toolchain, "*") defaults = { forward_variables_from(_defaults, "*") - default_configs += [ "$dir_pw_build:optimize_size" ] + default_configs += [ "$dir_pw_build:optimize_size_clang" ] foreach(sanitizer, pw_toolchain_SANITIZERS) { default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ] } + + # Allow coverage generation if pw_toolchain_SANITIZERS = ["coverage"]. + pw_toolchain_COVERAGE_ENABLED = true } } @@ -103,6 +134,12 @@ pw_toolchain_host_clang = { defaults = { forward_variables_from(_defaults, "*") + pw_toolchain_FUZZING_ENABLED = true + default_configs += [ "$dir_pw_fuzzer:instrumentation" ] + + # Always disable coverage generation. + pw_toolchain_COVERAGE_ENABLED = false + # Fuzz faster. default_configs += [ "$dir_pw_build:optimize_speed" ] @@ -114,10 +151,6 @@ pw_toolchain_host_clang = { default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ] } - - if (pw_toolchain_OSS_FUZZ_ENABLED) { - default_configs += [ "$dir_pw_fuzzer:oss_fuzz_extra" ] - } } } @@ -130,6 +163,9 @@ pw_toolchain_host_clang = { # Use debug mode to get proper debug information. default_configs += [ "$dir_pw_build:optimize_debugging" ] default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_address" ] + + # Allow coverage generation if pw_toolchain_SANITIZERS = ["coverage"]. + pw_toolchain_COVERAGE_ENABLED = true } } @@ -142,6 +178,9 @@ pw_toolchain_host_clang = { # Use debug mode to get proper debug information. default_configs += [ "$dir_pw_build:optimize_debugging" ] default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_undefined" ] + + # Allow coverage generation if pw_toolchain_SANITIZERS = ["coverage"]. + pw_toolchain_COVERAGE_ENABLED = true } } @@ -155,6 +194,9 @@ pw_toolchain_host_clang = { default_configs += [ "$dir_pw_build:optimize_debugging" ] default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_undefined_heuristic" ] + + # Allow coverage generation if pw_toolchain_SANITIZERS = ["coverage"]. + pw_toolchain_COVERAGE_ENABLED = true } } @@ -167,6 +209,9 @@ pw_toolchain_host_clang = { # Use debug mode to get proper debug information. default_configs += [ "$dir_pw_build:optimize_debugging" ] default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_memory" ] + + # Allow coverage generation if pw_toolchain_SANITIZERS = ["coverage"]. + pw_toolchain_COVERAGE_ENABLED = true } } @@ -179,6 +224,29 @@ pw_toolchain_host_clang = { # Use debug mode to get proper debug information. default_configs += [ "$dir_pw_build:optimize_debugging" ] default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_thread" ] + + # Allow coverage generation if pw_toolchain_SANITIZERS = ["coverage"]. + pw_toolchain_COVERAGE_ENABLED = true + } + } + + coverage = { + name = "host_clang_coverage" + forward_variables_from(_host_clang_toolchain, "*") + defaults = { + forward_variables_from(_defaults, "*") + + # Use debug mode to get proper debug information. + default_configs += [ "$dir_pw_build:optimize_debugging" ] + default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_coverage" ] + + # Enable PW toolchain arguments for coverage. This will only apply to + # binaries built using this toolchain. + # + # "coverage" works with "address", "memory", "thread", "undefined", and + # "undefined_heuristic" sanitizers. + pw_toolchain_SANITIZERS += [ "coverage" ] + pw_toolchain_COVERAGE_ENABLED = true } } } @@ -194,4 +262,5 @@ pw_toolchain_host_clang_list = [ pw_toolchain_host_clang.ubsan_heuristic, pw_toolchain_host_clang.msan, pw_toolchain_host_clang.tsan, + pw_toolchain_host_clang.coverage, ] |