aboutsummaryrefslogtreecommitdiff
path: root/pw_toolchain/host_clang/toolchains.gni
diff options
context:
space:
mode:
Diffstat (limited to 'pw_toolchain/host_clang/toolchains.gni')
-rw-r--r--pw_toolchain/host_clang/toolchains.gni89
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,
]