diff options
-rw-r--r-- | kleaf/impl/abi/abi_dump.bzl | 7 | ||||
-rw-r--r-- | kleaf/impl/common_providers.bzl | 9 | ||||
-rw-r--r-- | kleaf/impl/kernel_build.bzl | 9 | ||||
-rw-r--r-- | kleaf/impl/kernel_filegroup.bzl | 4 | ||||
-rw-r--r-- | kleaf/impl/kernel_module.bzl | 2 | ||||
-rw-r--r-- | kleaf/impl/kernel_unstripped_modules_archive.bzl | 16 |
6 files changed, 25 insertions, 22 deletions
diff --git a/kleaf/impl/abi/abi_dump.bzl b/kleaf/impl/abi/abi_dump.bzl index 85834156..e1fde94f 100644 --- a/kleaf/impl/abi/abi_dump.bzl +++ b/kleaf/impl/abi/abi_dump.bzl @@ -49,10 +49,13 @@ def _abi_dump_full(ctx): unstripped_dir_provider_targets = [ctx.attr.kernel_build] + ctx.attr.kernel_modules unstripped_dir_providers = [target[KernelUnstrippedModulesInfo] for target in unstripped_dir_provider_targets] + + unstripped_dirs = [] for prov, target in zip(unstripped_dir_providers, unstripped_dir_provider_targets): - if not prov.directory: + dirs_for_target = prov.directories.to_list() + if not dirs_for_target: fail("{}: Requires dep {} to set collect_unstripped_modules = True".format(ctx.label, target.label)) - unstripped_dirs = [prov.directory for prov in unstripped_dir_providers] + unstripped_dirs += dirs_for_target inputs = [vmlinux, ctx.file._dump_abi] inputs += ctx.files._dump_abi_scripts diff --git a/kleaf/impl/common_providers.bzl b/kleaf/impl/common_providers.bzl index 5dc78222..e5fa786b 100644 --- a/kleaf/impl/common_providers.bzl +++ b/kleaf/impl/common_providers.bzl @@ -85,9 +85,12 @@ KernelBuildInTreeModulesInfo = provider( KernelUnstrippedModulesInfo = provider( doc = "A provider that provides unstripped modules", fields = { - "base_kernel": "the `base_kernel` target, if exists", - "directory": """A [`File`](https://bazel.build/rules/lib/File) that -points to a directory containing unstripped modules. + "directories": """A [depset](https://bazel.build/extending/depsets) of +[`File`](https://bazel.build/rules/lib/File)s, where +each item points to a directory containing unstripped modules. + +Order matters; earlier elements in the traverse order has higher priority. Hence, +this depset must have `order` argument specified. For [`kernel_build()`](#kernel_build), this is a directory containing unstripped in-tree modules. - This is `None` if and only if `collect_unstripped_modules = False` diff --git a/kleaf/impl/kernel_build.bzl b/kleaf/impl/kernel_build.bzl index fc37e10e..afa1683a 100644 --- a/kleaf/impl/kernel_build.bzl +++ b/kleaf/impl/kernel_build.bzl @@ -815,9 +815,14 @@ def _kernel_build_impl(ctx): module_outs_file = all_module_names_file, ) + # TODO(b/250097199): the device GKI modules should be prioritized over generic modules + unstripped_modules_depsets = [] + if ctx.attr.base_kernel: + unstripped_modules_depsets.append(ctx.attr.base_kernel[KernelUnstrippedModulesInfo].directories) + if unstripped_dir: + unstripped_modules_depsets.append(depset([unstripped_dir])) kernel_unstripped_modules_info = KernelUnstrippedModulesInfo( - base_kernel = ctx.attr.base_kernel, - directory = unstripped_dir, + directories = depset(transitive = unstripped_modules_depsets, order = "postorder"), ) in_tree_modules_info = KernelBuildInTreeModulesInfo( diff --git a/kleaf/impl/kernel_filegroup.bzl b/kleaf/impl/kernel_filegroup.bzl index 957f7762..7853bdcc 100644 --- a/kleaf/impl/kernel_filegroup.bzl +++ b/kleaf/impl/kernel_filegroup.bzl @@ -75,7 +75,9 @@ def _kernel_filegroup_impl(ctx): progress_message = "Extracting unstripped_modules_archive {}".format(ctx.label), mnemonic = "KernelFilegroupUnstrippedModulesArchive", ) - unstripped_modules_info = KernelUnstrippedModulesInfo(directory = unstripped_dir) + unstripped_modules_info = KernelUnstrippedModulesInfo( + directories = depset([unstripped_dir], order = "postorder"), + ) abi_info = KernelBuildAbiInfo(module_outs_file = ctx.file.module_outs_file) in_tree_modules_info = KernelBuildInTreeModulesInfo(module_outs_file = ctx.file.module_outs_file) diff --git a/kleaf/impl/kernel_module.bzl b/kleaf/impl/kernel_module.bzl index e5a0c4d9..bcd72ed9 100644 --- a/kleaf/impl/kernel_module.bzl +++ b/kleaf/impl/kernel_module.bzl @@ -429,7 +429,7 @@ def _kernel_module_impl(ctx): files = ctx.outputs.outs, ), KernelUnstrippedModulesInfo( - directory = unstripped_dir, + directories = depset([unstripped_dir], order = "postorder"), ), ] diff --git a/kleaf/impl/kernel_unstripped_modules_archive.bzl b/kleaf/impl/kernel_unstripped_modules_archive.bzl index e7b3950b..45e008eb 100644 --- a/kleaf/impl/kernel_unstripped_modules_archive.bzl +++ b/kleaf/impl/kernel_unstripped_modules_archive.bzl @@ -20,22 +20,12 @@ load( load(":debug.bzl", "debug") def _kernel_unstripped_modules_archive_impl(ctx): - kernel_build = ctx.attr.kernel_build - base_kernel = kernel_build[KernelUnstrippedModulesInfo].base_kernel if kernel_build else None - # Early elements = higher priority. In-tree modules from base_kernel has highest priority, # then in-tree modules of the device kernel_build, then external modules (in an undetermined # order). - srcs = [] - for kernel_build_object in (base_kernel, kernel_build): - if not kernel_build_object: - continue - directory = kernel_build_object[KernelUnstrippedModulesInfo].directory - if not directory: - fail("{} does not have collect_unstripped_modules = True.".format(kernel_build_object.label)) - srcs.append(directory) - for kernel_module in ctx.attr.kernel_modules: - srcs.append(kernel_module[KernelUnstrippedModulesInfo].directory) + directories_depsets = [ctx.attr.kernel_build[KernelUnstrippedModulesInfo].directories] + directories_depsets += [kernel_module[KernelUnstrippedModulesInfo].directories for kernel_module in ctx.attr.kernel_modules] + srcs = depset(transitive = directories_depsets, order = "postorder").to_list() inputs = ctx.attr._hermetic_tools[HermeticToolsInfo].deps + srcs |