diff options
author | Yifan Hong <elsk@google.com> | 2024-02-23 17:09:29 -0800 |
---|---|---|
committer | Yifan Hong <elsk@google.com> | 2024-03-20 12:06:49 -0700 |
commit | 0f524218a4c0d3f9a3fc8117b30e678820169cf8 (patch) | |
tree | f728ae632da49023dff0a3b2a933a035597cb43f | |
parent | 4b5c6ec66c72592540062582f165993e5e0eeaeb (diff) | |
download | build-0f524218a4c0d3f9a3fc8117b30e678820169cf8.tar.gz |
kleaf: extract module_env.tar.gz to KLEAF_REPO_DIR
This extracts module_env.tar.gz, a sub-tree that contains
all necessary scripts, to KLEAF_REPO_DIR.
This resolves the following error:
/bin/bash: line 35: external/kleaf~override/common/scripts/kconfig/merge_config.sh: No such file or directory
Bug: 291918087
Bug: 308404299
Test: manual
Change-Id: I06fc1c4a17e5fb58ab429c71f722f601c84dd4b7
-rw-r--r-- | kleaf/docs/api_reference/kernel.md | 5 | ||||
-rw-r--r-- | kleaf/impl/common_providers.bzl | 1 | ||||
-rw-r--r-- | kleaf/impl/kernel_build.bzl | 2 | ||||
-rw-r--r-- | kleaf/impl/kernel_filegroup.bzl | 16 | ||||
-rw-r--r-- | kleaf/impl/kernel_filegroup_declaration.bzl | 3 |
5 files changed, 25 insertions, 2 deletions
diff --git a/kleaf/docs/api_reference/kernel.md b/kleaf/docs/api_reference/kernel.md index d2a9640..1dc9ffc 100644 --- a/kleaf/docs/api_reference/kernel.md +++ b/kleaf/docs/api_reference/kernel.md @@ -261,8 +261,8 @@ Define an executable that creates `compile_commands.json` from a `kernel_build`. kernel_filegroup(<a href="#kernel_filegroup-name">name</a>, <a href="#kernel_filegroup-deps">deps</a>, <a href="#kernel_filegroup-srcs">srcs</a>, <a href="#kernel_filegroup-collect_unstripped_modules">collect_unstripped_modules</a>, <a href="#kernel_filegroup-config_out_dir">config_out_dir</a>, <a href="#kernel_filegroup-config_out_dir_files">config_out_dir_files</a>, <a href="#kernel_filegroup-ddk_module_defconfig_fragments">ddk_module_defconfig_fragments</a>, <a href="#kernel_filegroup-debug">debug</a>, <a href="#kernel_filegroup-env_setup_script">env_setup_script</a>, <a href="#kernel_filegroup-exec_platform">exec_platform</a>, <a href="#kernel_filegroup-gki_artifacts">gki_artifacts</a>, <a href="#kernel_filegroup-images">images</a>, <a href="#kernel_filegroup-internal_outs">internal_outs</a>, <a href="#kernel_filegroup-kasan">kasan</a>, <a href="#kernel_filegroup-kasan_generic">kasan_generic</a>, <a href="#kernel_filegroup-kasan_sw_tags">kasan_sw_tags</a>, <a href="#kernel_filegroup-kcsan">kcsan</a>, - <a href="#kernel_filegroup-kernel_release">kernel_release</a>, <a href="#kernel_filegroup-kernel_uapi_headers">kernel_uapi_headers</a>, <a href="#kernel_filegroup-lto">lto</a>, <a href="#kernel_filegroup-module_outs_file">module_outs_file</a>, <a href="#kernel_filegroup-modules_prepare_archive">modules_prepare_archive</a>, - <a href="#kernel_filegroup-protected_modules_list">protected_modules_list</a>, <a href="#kernel_filegroup-target_platform">target_platform</a>, <a href="#kernel_filegroup-trim_nonlisted_kmi">trim_nonlisted_kmi</a>) + <a href="#kernel_filegroup-kernel_release">kernel_release</a>, <a href="#kernel_filegroup-kernel_uapi_headers">kernel_uapi_headers</a>, <a href="#kernel_filegroup-lto">lto</a>, <a href="#kernel_filegroup-module_env_archive">module_env_archive</a>, <a href="#kernel_filegroup-module_outs_file">module_outs_file</a>, + <a href="#kernel_filegroup-modules_prepare_archive">modules_prepare_archive</a>, <a href="#kernel_filegroup-protected_modules_list">protected_modules_list</a>, <a href="#kernel_filegroup-target_platform">target_platform</a>, <a href="#kernel_filegroup-trim_nonlisted_kmi">trim_nonlisted_kmi</a>) </pre> **EXPERIMENTAL.** The API of `kernel_filegroup` rapidly changes and @@ -303,6 +303,7 @@ It can be used in the `base_kernel` attribute of a [`kernel_build`](#kernel_buil | <a id="kernel_filegroup-kernel_release"></a>kernel_release | A file providing the kernel release string. This is preferred over `gki_artifacts`. | <a href="https://bazel.build/concepts/labels">Label</a> | optional | `None` | | <a id="kernel_filegroup-kernel_uapi_headers"></a>kernel_uapi_headers | The label pointing to `kernel-uapi-headers.tar.gz`.<br><br>This attribute should be set to the `kernel-uapi-headers.tar.gz` artifact built by the [`kernel_build`](#kernel_build) macro if the `kernel_filegroup` rule were a `kernel_build`.<br><br>Setting this attribute allows [`merged_kernel_uapi_headers`](#merged_kernel_uapi_headers) to work properly when this `kernel_filegroup` is set to the `base_kernel`.<br><br>For example: <pre><code>kernel_filegroup( name = "kernel_aarch64_prebuilts", srcs = [ "vmlinux", # ... ], kernel_uapi_headers = "kernel-uapi-headers.tar.gz", ) kernel_build( name = "tuna", base_kernel = ":kernel_aarch64_prebuilts", # ... ) merged_kernel_uapi_headers( name = "tuna_merged_kernel_uapi_headers", kernel_build = "tuna", # ... )</code></pre> | <a href="https://bazel.build/concepts/labels">Label</a> | optional | `None` | | <a id="kernel_filegroup-lto"></a>lto | - | String | optional | `"default"` | +| <a id="kernel_filegroup-module_env_archive"></a>module_env_archive | Archive from `kernel_build.pack_module_env` that contains necessary files to build external modules. | <a href="https://bazel.build/concepts/labels">Label</a> | optional | `None` | | <a id="kernel_filegroup-module_outs_file"></a>module_outs_file | A file containing `module_outs` of the original [`kernel_build`](#kernel_build) target. | <a href="https://bazel.build/concepts/labels">Label</a> | required | | | <a id="kernel_filegroup-modules_prepare_archive"></a>modules_prepare_archive | Archive from `modules_prepare` | <a href="https://bazel.build/concepts/labels">Label</a> | optional | `None` | | <a id="kernel_filegroup-protected_modules_list"></a>protected_modules_list | - | <a href="https://bazel.build/concepts/labels">Label</a> | optional | `None` | diff --git a/kleaf/impl/common_providers.bzl b/kleaf/impl/common_providers.bzl index 917ef4a..999dd56 100644 --- a/kleaf/impl/common_providers.bzl +++ b/kleaf/impl/common_providers.bzl @@ -315,6 +315,7 @@ KernelBuildFilegroupDeclInfo = provider( "internal_outs": """[depset](https://bazel.build/extending/depsets) of `kernel_build`'s `internal_outs`. May be `None`.""", "ruledir": "`ruledir` from `kernel_build` that signifies the root for `internal_outs`.", + "module_env_archive": "Archive preparing an environment to build modules. May be `None`.", }, ) diff --git a/kleaf/impl/kernel_build.bzl b/kleaf/impl/kernel_build.bzl index 03ed488..2f382f0 100644 --- a/kleaf/impl/kernel_build.bzl +++ b/kleaf/impl/kernel_build.bzl @@ -2014,6 +2014,7 @@ def _create_infos( config_out_dir = ctx.file.config, internal_outs = depset(all_output_files["internal_outs"].values()), ruledir = main_action_ret.ruledir, + module_env_archive = module_scripts_archive, ) default_info_files = all_output_files["outs"].values() + all_output_files["module_outs"].values() @@ -2540,6 +2541,7 @@ def _repack_modules_staging_archive( ) return modules_staging_archive +# TODO(b/291918087): Merge into filegroup_decl.tar.gz to flatten the archive. def _create_module_scripts_archive( ctx, module_srcs): diff --git a/kleaf/impl/kernel_filegroup.bzl b/kleaf/impl/kernel_filegroup.bzl index 51d8626..1339367 100644 --- a/kleaf/impl/kernel_filegroup.bzl +++ b/kleaf/impl/kernel_filegroup.bzl @@ -124,9 +124,19 @@ def _get_ddk_config_env(ctx): out_dir = ctx.file.config_out_dir, ) + ddk_config_env_setup_command += """ + # Restore module sources + {check_sandbox_cmd} + tar xf {module_env_archive} -C ${{KLEAF_REPO_DIR}} + """.format( + module_env_archive = ctx.file.module_env_archive.path, + check_sandbox_cmd = utils.get_check_sandbox_cmd(), + ) + ddk_config_env_setup_script = ctx.actions.declare_file( "{name}/{name}_ddk_config_setup.sh".format(name = ctx.attr.name), ) + ctx.actions.write( output = ddk_config_env_setup_script, content = ddk_config_env_setup_command, @@ -135,6 +145,7 @@ def _get_ddk_config_env(ctx): setup_script = ddk_config_env_setup_script, inputs = depset([ ddk_config_env_setup_script, + ctx.file.module_env_archive, ctx.file.env_setup_script, ctx.version_file, ], transitive = [target.files for target in ctx.attr.config_out_dir_files]), @@ -435,6 +446,11 @@ default, which in turn sets `collect_unstripped_modules` to `True` by default. allow_single_file = True, doc = "Archive from `modules_prepare`", ), + "module_env_archive": attr.label( + allow_single_file = True, + doc = """Archive from `kernel_build.pack_module_env` that contains + necessary files to build external modules.""", + ), "internal_outs": attr.label_keyed_string_dict( allow_files = True, doc = "Keys: from `_kernel_build.internal_outs`. Values: path under `$OUT_DIR`.", diff --git a/kleaf/impl/kernel_filegroup_declaration.bzl b/kleaf/impl/kernel_filegroup_declaration.bzl index d6f5580..b8cec83 100644 --- a/kleaf/impl/kernel_filegroup_declaration.bzl +++ b/kleaf/impl/kernel_filegroup_declaration.bzl @@ -100,6 +100,7 @@ kernel_filegroup( config_out_dir = {config_out_dir_repr}, env_setup_script = {env_setup_script_repr}, modules_prepare_archive = {modules_prepare_archive_repr}, + module_env_archive = {module_env_archive_repr}, internal_outs = {internal_outs_repr}, target_platform = {target_platform_repr}, exec_platform = {exec_platform_repr}, @@ -163,6 +164,7 @@ def _write_filegroup_decl_file(ctx, info, deps_files, kernel_uapi_headers, templ depset([info.modules_prepare_archive]), **(one | pkg) ) + sub.add_joined("{module_env_archive_repr}", depset([info.module_env_archive]), **(one | pkg)) # {":bazel-out/k8-fastbuild/bin/common/kernel_aarch64/Module.symvers": "Module.symvers", ...} sub.add_joined( @@ -207,6 +209,7 @@ def _create_archive(ctx, info, deps_files, kernel_uapi_headers, filegroup_decl_f info.config_out_dir, info.env_setup_script, info.modules_prepare_archive, + info.module_env_archive, ] if info.src_protected_modules_list: direct_inputs.append(info.src_protected_modules_list) |