diff options
author | Yifan Hong <elsk@google.com> | 2023-06-16 21:51:10 -0700 |
---|---|---|
committer | Yifan Hong <elsk@google.com> | 2024-03-14 18:25:09 +0000 |
commit | 731e74a8ac1142bac1c99f446bd6617e702a775b (patch) | |
tree | 696ea8341e233b31b9e17fd76d41a13714c5934f | |
parent | 9a2196a1ec1048c2869750c9d3969c88ac18adcd (diff) | |
download | build-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.bazel | 6 | ||||
-rw-r--r-- | kleaf/docs/kernel_config.md | 17 | ||||
-rw-r--r-- | kleaf/impl/defconfig/BUILD.bazel | 9 | ||||
-rw-r--r-- | kleaf/impl/defconfig/gcov_defconfig | 6 | ||||
-rw-r--r-- | kleaf/impl/kernel_build.bzl | 2 | ||||
-rw-r--r-- | kleaf/impl/kernel_config.bzl | 23 | ||||
-rw-r--r-- | kleaf/impl/kernel_config_settings.bzl | 3 |
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", }, ) |