From b7677782ea15349fbd94304ea7db860c0e29eefd Mon Sep 17 00:00:00 2001 From: Eric Rosas Date: Tue, 22 Aug 2023 17:07:53 -0700 Subject: [PATCH] build: Simplify target registration and add product input Modify the inputs of the target registration to accept multiple variants and allow for an optional "product" parameter. Also some refactoring done to promote ease of use. Change-Id: Ib18cd36734fc35326b8dc675f548d47d9a95cf1c Signed-off-by: Eric Rosas --- build/blair.bzl | 5 +- build/kalama.bzl | 5 +- build/pineapple.bzl | 5 +- module_mgr.bzl | 142 ++++++++++++++++++++++++++------------------ 4 files changed, 94 insertions(+), 63 deletions(-) diff --git a/build/blair.bzl b/build/blair.bzl index e1b74d68e2..d421d5f4d0 100644 --- a/build/blair.bzl +++ b/build/blair.bzl @@ -1,9 +1,10 @@ load(":audio_modules.bzl", "audio_modules") -load(":module_mgr.bzl", "define_consolidate_gki_modules") +load(":module_mgr.bzl", "define_target_modules") def define_blair(): - define_consolidate_gki_modules( + define_target_modules( target = "blair", + variants = ["consolidate", "gki"], registry = audio_modules, modules = [ "q6_dlkm", diff --git a/build/kalama.bzl b/build/kalama.bzl index f97d6c5e02..c5875650b8 100644 --- a/build/kalama.bzl +++ b/build/kalama.bzl @@ -1,9 +1,10 @@ load(":audio_modules.bzl", "audio_modules") -load(":module_mgr.bzl", "define_consolidate_gki_modules") +load(":module_mgr.bzl", "define_target_modules") def define_kalama(): - define_consolidate_gki_modules( + define_target_modules( target = "kalama", + variants = ["consolidate", "gki"], registry = audio_modules, modules = [ "q6_dlkm", diff --git a/build/pineapple.bzl b/build/pineapple.bzl index d6e02c76dd..75099944d3 100644 --- a/build/pineapple.bzl +++ b/build/pineapple.bzl @@ -1,9 +1,10 @@ load(":audio_modules.bzl", "audio_modules") -load(":module_mgr.bzl", "define_consolidate_gki_modules") +load(":module_mgr.bzl", "define_target_modules") def define_pineapple(): - define_consolidate_gki_modules( + define_target_modules( target = "pineapple", + variants = ["consolidate", "gki"], registry = audio_modules, modules = [ "q6_dlkm", diff --git a/module_mgr.bzl b/module_mgr.bzl index cd4b74e101..23270f40cb 100644 --- a/module_mgr.bzl +++ b/module_mgr.bzl @@ -1,7 +1,5 @@ load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir") -load("//build/kernel/kleaf:kernel.bzl", "kernel_module", - "kernel_modules_install", - "ddk_module", +load("//build/kernel/kleaf:kernel.bzl", "ddk_module", "ddk_submodule") def _create_module_conditional_src_map(conditional_srcs): @@ -17,7 +15,24 @@ def _create_module_conditional_src_map(conditional_srcs): return processed_conditional_srcs -def _get_module_srcs(module, options, formatter): +def _get_enabled_module_objs(registry, modules): + undefined_modules = [] + enabled_module_objs = [] + + for module_name in modules: + module_obj = registry.get(module_name) + + if not module_obj: + undefined_modules.append(module_name) + else: + enabled_module_objs.append(module_obj) + + if undefined_modules: + fail("FAILED. Tried to enable the following undefined modules: \n{}".format("\n".join(undefined_modules))) + else: + return enabled_module_objs + +def _get_module_srcs(module, options): srcs = [] + module.srcs module_path = "{}/".format(module.path) if module.path else "" @@ -25,13 +40,59 @@ def _get_module_srcs(module, options, formatter): is_option_enabled = option in options srcs.extend(module.conditional_srcs[option].get(is_option_enabled, [])) - return ["{}{}".format(module_path, formatter(src)) for src in srcs] + return ["{}{}".format(module_path, src) for src in srcs] -def _combine_target_module_options(modules, config_options): +def _combine_target_module_options(enabled_modules, config_options): all_options = {option: True for option in config_options} - all_options = all_options | {module.config_option: True for module in modules if module.config_option} + modules_options = {module.config_option: True for module in enabled_modules if module.config_option} - return all_options + return all_options | modules_options + +def _define_target_modules(target, variant, registry, modules, product = None, config_options = []): + dep_formatter = lambda s : s.replace("%t", target)\ + .replace("%v", variant)\ + .replace("%p", product if product else "")\ + .replace("%b", "{}_{}".format(target, variant)) + rule_prefix = "{}_{}_{}".format(target, variant, product) if product else "{}_{}".format(target, variant) + enabled_modules = _get_enabled_module_objs(registry, modules) + options = _combine_target_module_options(enabled_modules, config_options) + headers = ["//msm-kernel:all_headers"] + registry.hdrs + submodule_rules = [] + + for module in enabled_modules: + rule_name = "{}_{}".format(rule_prefix, module.name) + srcs = _get_module_srcs(module, options) + deps = headers + [dep_formatter(dep) for dep in module.deps] + + if not srcs: + continue + + ddk_submodule( + name = rule_name, + srcs = srcs, + out = "{}.ko".format(module.name), + deps = deps, + local_defines = options.keys(), + ) + + submodule_rules.append(rule_name) + + ddk_module( + name = "{}_modules".format(rule_prefix), + kernel_build = "//msm-kernel:{}_{}".format(target, variant), + deps = submodule_rules + ) + + copy_to_dist_dir( + name = "{}_modules_dist".format(rule_prefix), + data = [":{}_modules".format(rule_prefix)], + dist_dir = "out/target/product/{}/dlkm/lib/modules/".format(target), + flat = True, + wipe_dist_dir = False, + allow_duplicate_filenames = False, + mode_overrides = {"**/*": "644"}, + log = "info" + ) def create_module_registry(hdrs = []): module_map = {} @@ -53,52 +114,19 @@ def create_module_registry(hdrs = []): get = module_map.get, ) -def define_target_modules(target, variant, registry, modules, config_options = []): - formatter = lambda s : s.replace("%t", target)\ - .replace("%v", variant)\ - .replace("%b", "{}_{}".format(target, variant)) - kernel_build = "{}_{}".format(target, variant) - kernel_build_label = "//msm-kernel:{}".format(kernel_build) - modules = [registry.get(module_name) for module_name in modules] - options = _combine_target_module_options(modules, config_options) - headers = ["//msm-kernel:all_headers"] + registry.hdrs - all_module_rules = [] - - for module in modules: - rule_name = "{}_{}".format(kernel_build, module.name) - srcs = _get_module_srcs(module, options, formatter) - deps = headers + [formatter(dep) for dep in module.deps] - - if not srcs: - continue - - ddk_submodule( - name = rule_name, - srcs = srcs, - out = "{}.ko".format(module.name), - deps = deps, - local_defines = options.keys(), - ) - - all_module_rules.append(rule_name) - - ddk_module( - name = "{}_modules".format(kernel_build), - kernel_build = kernel_build_label, - deps = all_module_rules - ) - - copy_to_dist_dir( - name = "{}_modules_dist".format(kernel_build), - data = [":{}_modules".format(kernel_build)], - dist_dir = "out/target/product/{}/dlkm/lib/modules/".format(target), - flat = True, - wipe_dist_dir = False, - allow_duplicate_filenames = False, - mode_overrides = {"**/*": "644"}, - log = "info" - ) - -def define_consolidate_gki_modules(target, registry, modules, config_options = []): - define_target_modules(target, "consolidate", registry, modules, config_options) - define_target_modules(target, "gki", registry, modules, config_options) \ No newline at end of file +def define_target_modules(target, variants, registry, modules, config_options = [], products = []): + for variant in variants: + if products: + for product in products: + _define_target_modules(target = target, + variant = variant, + registry = registry, + modules = modules, + product = product, + config_options = config_options) + else: + _define_target_modules(target = target, + variant = variant, + registry = registry, + modules = modules, + config_options = config_options) \ No newline at end of file