spu_module_build.bzl 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. load("//build/kernel/kleaf:kernel.bzl", "kernel_module",
  2. "kernel_modules_install",
  3. "ddk_module",
  4. "ddk_submodule")
  5. load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
  6. def _register_module_to_map(module_map, name, path, config_option, srcs, config_srcs, deps):
  7. processed_config_srcs = {}
  8. for config_src_name in config_srcs:
  9. config_src = config_srcs[config_src_name]
  10. if type(config_src) == "list":
  11. processed_config_srcs[config_src_name] = { True: config_src }
  12. else:
  13. processed_config_srcs[config_src_name] = config_src
  14. module = struct(
  15. name = name,
  16. path = path if path else ".",
  17. srcs = srcs,
  18. config_srcs = processed_config_srcs,
  19. config_option = config_option,
  20. deps = deps,
  21. )
  22. module_map[name] = module
  23. def _get_kernel_build_module_srcs(kernel_build, module, formatter):
  24. src_formatter = lambda srcs: native.glob(formatter(["{}/{}".format(module.path, src) for src in srcs]))
  25. srcs = [] + src_formatter(module.srcs)
  26. return srcs
  27. def _get_kernel_build_options(modules, config_options):
  28. all_options = {option: True for option in config_options}
  29. all_options = all_options | {module.config_option: True for module in modules if module.config_option}
  30. return all_options
  31. def _get_kernel_build_module_deps(module, options, formatter):
  32. deps = [formatter(dep) for dep in deps]
  33. return deps
  34. def spu_driver_module_entry(hdrs = []):
  35. module_map = {}
  36. def register(name, path = None, config_option = None, srcs = [], config_srcs = {}, deps = []):
  37. _register_module_to_map(module_map, name, path, config_option, srcs, config_srcs, deps)
  38. return struct(
  39. register = register,
  40. get = module_map.get,
  41. hdrs = hdrs,
  42. module_map = module_map
  43. )
  44. def define_target_variant_modules(target, variant, registry, modules, config_options = []):
  45. kernel_build = "{}_{}".format(target, variant)
  46. kernel_build_label = "//msm-kernel:{}".format(kernel_build)
  47. modules = [registry.get(module_name) for module_name in modules]
  48. options = _get_kernel_build_options(modules, config_options)
  49. formatter = lambda strs : [s.replace("%b", kernel_build).replace("%t", target) for s in strs]
  50. headers = ["//msm-kernel:all_headers"] + registry.hdrs
  51. all_module_rules = []
  52. for module in modules:
  53. rule_name = "{}_{}".format(kernel_build, module.name)
  54. srcs = _get_kernel_build_module_srcs(kernel_build, module, formatter)
  55. ddk_submodule(
  56. name = rule_name,
  57. srcs = srcs,
  58. out = "{}.ko".format(module.name),
  59. deps = headers + formatter(module.deps),
  60. local_defines = options.keys()
  61. )
  62. all_module_rules.append(rule_name)
  63. ddk_module(
  64. name = "{}_spu-drivers".format(kernel_build),
  65. kernel_build = kernel_build_label,
  66. deps = all_module_rules
  67. )
  68. copy_to_dist_dir(
  69. name = "{}_spu-drivers_dist".format(kernel_build),
  70. data = [":{}_spu-drivers".format(kernel_build)],
  71. dist_dir = "../vendor/qcom/opensource/spu-drivers/out", ## TODO
  72. flat = True,
  73. wipe_dist_dir = False,
  74. allow_duplicate_filenames = False,
  75. mode_overrides = {"**/*": "644"},
  76. log = "info",
  77. )
  78. def define_consolidate_gki_modules(target, registry, modules, config_options = []):
  79. define_target_variant_modules(target, "consolidate", registry, modules, config_options)
  80. define_target_variant_modules(target, "gki", registry, modules, config_options)