summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYifan Hong <elsk@google.com>2023-06-16 21:51:10 -0700
committerYifan Hong <elsk@google.com>2024-03-14 18:25:09 +0000
commit731e74a8ac1142bac1c99f446bd6617e702a775b (patch)
tree696ea8341e233b31b9e17fd76d41a13714c5934f
parent9a2196a1ec1048c2869750c9d3969c88ac18adcd (diff)
downloadbuild-731e74a8ac1142bac1c99f446bd6617e702a775b.tar.gz
kleaf: --gcov implemented with defconfig_fragments
Add a conditional (select()) filegroup to kernel_build.defconfig_fragments so that, when --gcov is set, the gcov CONFIGs are added. Remove gcov from kernel_config_settings now that it is represented by defconfig_fragments already. Bug: 295233214 Test: bazel build //common:kernel_aarch64 --gcov Test: bazel build //common:kernel_x86_64 --gcov Test: bazel build //common:kernel_riscv64 --gcov Test: bazel test //build/kernel/kleaf/tests/kernel_config_test:kernel_defconfig_fragments_test Change-Id: I2e674f0f4661c0fa4d912590e8f43377eb229c6e
-rw-r--r--kleaf/BUILD.bazel6
-rw-r--r--kleaf/docs/kernel_config.md17
-rw-r--r--kleaf/impl/defconfig/BUILD.bazel9
-rw-r--r--kleaf/impl/defconfig/gcov_defconfig6
-rw-r--r--kleaf/impl/kernel_build.bzl2
-rw-r--r--kleaf/impl/kernel_config.bzl23
-rw-r--r--kleaf/impl/kernel_config_settings.bzl3
7 files changed, 34 insertions, 32 deletions
diff --git a/kleaf/BUILD.bazel b/kleaf/BUILD.bazel
index a0f08ca..cd42d0b 100644
--- a/kleaf/BUILD.bazel
+++ b/kleaf/BUILD.bazel
@@ -255,6 +255,12 @@ bool_flag(
visibility = ["//visibility:public"],
)
+config_setting(
+ name = "gcov_is_true",
+ flag_values = {":gcov": "1"},
+ visibility = ["//build/kernel/kleaf/impl/defconfig:__pkg__"],
+)
+
# If true, allow modules to be undeclared in kernel_build.
bool_flag(
name = "allow_undeclared_modules",
diff --git a/kleaf/docs/kernel_config.md b/kleaf/docs/kernel_config.md
index e796fb0..86e7bd1 100644
--- a/kleaf/docs/kernel_config.md
+++ b/kleaf/docs/kernel_config.md
@@ -88,18 +88,20 @@ Example:
```python
# path/to/tuna/BUILD.bazel
exports_files([
- "gcov_defconfig",
+ "kasan_hw_tags_defconfig",
])
kernel_build(name = "tuna", ...)
```
```shell
-# gcov_defconfig
-CONFIG_GCOV_KERNEL=y
-CONFIG_GCOV_PROFILE_ALL=y
+# kasan_hw_tags_defconfig
+CONFIG_KASAN=y
+CONFIG_KASAN_HW_TAGS=y
+# CONFIG_KASAN_SW_TAGS is not set
+# etc. Add your configs!
```
```shell
$ tools/bazel build \
- --defconfig_fragment=//path/to/tuna:gcov_defconfig \
+ --defconfig_fragment=//path/to/tuna:kasan_hw_tags_defconfig \
//path/to/tuna:tuna
```
@@ -132,6 +134,7 @@ own defconfig fragments to avoid fragmentation in the ecosystem (pun intended).
* `--btf_debug_info`
* `--debug`
+* `--gcov`
* `--kasan`
* `--kasan_sw_tags`
* `--kasan_generic`
@@ -188,8 +191,8 @@ To shorten `--defconfig_fragment` flags, you may use
```text
# device.bazelrc
-build:gcov --defconfig_fragment=//path/to/tuna:gcov_defconfig
+build:kasan_hw_tags --defconfig_fragment=//path/to/tuna:kasan_hw_tags_defconfig
```
```shell
-$ tools/bazel build --config=gcov //path/to/tuna:tuna
+$ tools/bazel build --config=kasan_hw_tags //path/to/tuna:tuna
```
diff --git a/kleaf/impl/defconfig/BUILD.bazel b/kleaf/impl/defconfig/BUILD.bazel
index b30bbc9..ef212fb 100644
--- a/kleaf/impl/defconfig/BUILD.bazel
+++ b/kleaf/impl/defconfig/BUILD.bazel
@@ -172,3 +172,12 @@ filegroup(
srcs = ["signing_modules_disabled_defconfig"],
visibility = ["//visibility:public"],
)
+
+filegroup(
+ name = "gcov",
+ srcs = select({
+ "//build/kernel/kleaf:gcov_is_true": ["gcov_defconfig"],
+ "//conditions:default": [],
+ }),
+ visibility = ["//visibility:public"],
+)
diff --git a/kleaf/impl/defconfig/gcov_defconfig b/kleaf/impl/defconfig/gcov_defconfig
new file mode 100644
index 0000000..9fce6cd
--- /dev/null
+++ b/kleaf/impl/defconfig/gcov_defconfig
@@ -0,0 +1,6 @@
+CONFIG_GCOV_KERNEL=y
+CONFIG_GCOV_PROFILE_ALL=y
+
+# TODO(b/291710318) Allow section mismatch when using GCOV_PROFILE_ALL
+# modpost: vmlinux.o: section mismatch in reference: cpumask_andnot (section: .text) -> efi_systab_phys (section: .init.data)
+CONFIG_SECTION_MISMATCH_WARN_ONLY=y
diff --git a/kleaf/impl/kernel_build.bzl b/kleaf/impl/kernel_build.bzl
index 6ead741..5bf8278 100644
--- a/kleaf/impl/kernel_build.bzl
+++ b/kleaf/impl/kernel_build.bzl
@@ -756,6 +756,7 @@ def _get_defconfig_fragments(
additional_fragments = [
Label("//build/kernel/kleaf:defconfig_fragment"),
Label("//build/kernel/kleaf/impl/defconfig:debug"),
+ Label("//build/kernel/kleaf/impl/defconfig:gcov"),
Label("//build/kernel/kleaf/impl/defconfig:rust"),
Label("//build/kernel/kleaf/impl/defconfig:zstd_dwarf_compression"),
]
@@ -2152,6 +2153,7 @@ _kernel_build = rule(
"_warn_undeclared_modules": attr.label(default = "//build/kernel/kleaf:warn_undeclared_modules"),
"_preserve_cmd": attr.label(default = "//build/kernel/kleaf/impl:preserve_cmd"),
"_kmi_symbol_list_violations_check": attr.label(default = "//build/kernel/kleaf:kmi_symbol_list_violations_check"),
+ "_gcov": attr.label(default = "//build/kernel/kleaf:gcov"),
# Though these rules are unrelated to the `_kernel_build` rule, they are added as fake
# dependencies so KernelBuildExtModuleInfo and KernelBuildUapiInfo works.
# There are no real dependencies. Bazel does not build these targets before building the
diff --git a/kleaf/impl/kernel_config.bzl b/kleaf/impl/kernel_config.bzl
index ebb9491..0b521a4 100644
--- a/kleaf/impl/kernel_config.bzl
+++ b/kleaf/impl/kernel_config.bzl
@@ -105,28 +105,6 @@ def _determine_system_trusted_key_path(ctx):
return _determine_local_path(ctx, "trusted_key.pem", ctx.file.system_trusted_key)
-def _config_gcov(ctx):
- """Return configs for GCOV.
-
- Args:
- ctx: ctx
- Returns:
- A struct, where `configs` is a list of arguments to `scripts/config`,
- and `deps` is a list of input files.
- """
- gcov = ctx.attr.gcov[BuildSettingInfo].value
-
- if not gcov:
- return struct(configs = [], deps = [])
- configs = [
- _config.enable("GCOV_KERNEL"),
- _config.enable("GCOV_PROFILE_ALL"),
- # TODO(b/291710318) Allow section mismatch when using GCOV_PROFILE_ALL
- # modpost: vmlinux.o: section mismatch in reference: cpumask_andnot (section: .text) -> efi_systab_phys (section: .init.data)
- _config.enable("SECTION_MISMATCH_WARN_ONLY"),
- ]
- return struct(configs = configs, deps = [])
-
def _config_lto(ctx):
"""Return configs for LTO.
@@ -340,7 +318,6 @@ def _reconfig(ctx):
_config_kasan,
_config_kasan_sw_tags,
_config_kasan_generic,
- _config_gcov,
_config_keys,
kgdb.get_scripts_config_args,
):
diff --git a/kleaf/impl/kernel_config_settings.bzl b/kleaf/impl/kernel_config_settings.bzl
index a23f813..894d6dc 100644
--- a/kleaf/impl/kernel_config_settings.bzl
+++ b/kleaf/impl/kernel_config_settings.bzl
@@ -33,6 +33,7 @@ mentioned here. In particular:
- The following is not listed because it is already handled by defconfig_fragments. See
kernel_env.bzl, _handle_config_tags:
- btf_debug_info
+ - gcov
"""
load("@bazel_skylib//lib:dicts.bzl", "dicts")
@@ -73,7 +74,6 @@ def _kernel_build_config_settings_raw():
compile_commands_utils.config_settings_raw(),
{
"_use_kmi_symbol_list_strict_mode": "//build/kernel/kleaf:kmi_symbol_list_strict_mode",
- "_gcov": "//build/kernel/kleaf:gcov",
"_debug": "//build/kernel/kleaf:debug",
"_kasan": "//build/kernel/kleaf:kasan",
"_kasan_sw_tags": "//build/kernel/kleaf:kasan_sw_tags",
@@ -98,7 +98,6 @@ def _kernel_config_config_settings_raw():
"kasan_sw_tags": "//build/kernel/kleaf:kasan_sw_tags",
"kasan_generic": "//build/kernel/kleaf:kasan_generic",
"kcsan": "//build/kernel/kleaf:kcsan",
- "gcov": "//build/kernel/kleaf:gcov",
},
)