securemsm_kernel.bzl 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. load(
  2. "//build/kernel/kleaf:kernel.bzl",
  3. "ddk_module",
  4. "kernel_modules_install",
  5. )
  6. load(
  7. ":securemsm_modules.bzl",
  8. "securemsm_modules",
  9. "securemsm_modules_by_config",
  10. )
  11. load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
  12. def _replace_formatting_codes(target, variant, s):
  13. kernel_build = "{}_{}".format(target, variant)
  14. return s.replace("%b", kernel_build).replace("%t", target)
  15. def _console_print(target, variant, module, message):
  16. if module:
  17. print("{}: {}: securemsm-kernel: {}: {}".format(target, variant, module, message))
  18. else:
  19. print("{}: {}: securemsm-kernel: {} ".format(target, variant, message))
  20. def _get_options(target, variant, target_config_option, modules, extra_options):
  21. all_options = {option: True for option in extra_options}
  22. redundant_options = []
  23. for option in securemsm_modules_by_config:
  24. module_name = securemsm_modules_by_config[option]
  25. if option in all_options:
  26. if module_name in modules:
  27. redundant_options.append(option)
  28. else:
  29. _console_print(target, variant, None, 'WARNING: Config option "{}" corresponds to securemsm module {}, but this module is not listed in module list!'.format(option, module_name))
  30. else:
  31. all_options[option] = True
  32. if target_config_option in all_options:
  33. redundant_options.append(target_config_option)
  34. else:
  35. all_options[target_config_option] = True
  36. if redundant_options:
  37. _console_print(target, variant, None, "INFO: The following options are already declared either by a module or the target, no need to redeclare: \n{}".format("\n".join(redundant_options)))
  38. return all_options
  39. def _get_module_srcs(target, variant, module, options):
  40. srcs = [] + module["default_srcs"] + module["srcs"]
  41. module_path = "{}/".format(module["path"]) if module["path"] else ""
  42. for option in module["config_srcs"]:
  43. srcs.extend(module["config_srcs"][option].get(option in options, []))
  44. globbed_srcs = native.glob(["{}{}".format(module_path, _replace_formatting_codes(target, variant, src)) for src in srcs])
  45. if not globbed_srcs:
  46. _console_print(target, variant, module["name"], "WARNING: Module has no sources attached!")
  47. return globbed_srcs
  48. def define_target_variant_modules(target, variant, modules, extra_options = [], config_option = None):
  49. kernel_build_variant = "{}_{}".format(target, variant)
  50. options = _get_options(target, variant, config_option, modules, extra_options)
  51. module_rules = []
  52. target_local_defines = []
  53. modules = [securemsm_modules[module_name] for module_name in modules]
  54. tv = "{}_{}".format(target, variant)
  55. target_local_defines = ["SMCINVOKE_TRACE_INCLUDE_PATH=../../../{}/smcinvoke".format(native.package_name())]
  56. for config in extra_options:
  57. target_local_defines.append(config)
  58. for module in modules:
  59. rule_name = "{}_{}".format(kernel_build_variant, module["name"])
  60. module_srcs = _get_module_srcs(target, variant, module, options)
  61. ddk_module(
  62. name = rule_name,
  63. kernel_build = "//msm-kernel:{}".format(kernel_build_variant),
  64. srcs = module_srcs,
  65. out = "{}.ko".format(module["name"]),
  66. deps = ["//msm-kernel:all_headers"] + [_replace_formatting_codes(target, variant, dep) for dep in module["deps"]],
  67. hdrs = module["hdrs"],
  68. local_defines = target_local_defines,
  69. copts = module["copts"],
  70. )
  71. module_rules.append(rule_name)
  72. copy_to_dist_dir(
  73. name = "{}_securemsm-kernel_dist".format(kernel_build_variant),
  74. data = module_rules,
  75. dist_dir = "out/target/product/{}/dlkm/lib/modules/".format(target),
  76. flat = True,
  77. wipe_dist_dir = False,
  78. allow_duplicate_filenames = False,
  79. mode_overrides = {"**/*": "644"},
  80. log = "info",
  81. )
  82. kernel_modules_install(
  83. name = "{}_modules_install".format(kernel_build_variant),
  84. kernel_build = "//msm-kernel:{}".format(kernel_build_variant),
  85. kernel_modules = module_rules,
  86. )
  87. def define_consolidate_gki_modules(target, modules, extra_options = [], config_option = None):
  88. define_target_variant_modules(target, "consolidate", modules, extra_options, config_option)
  89. define_target_variant_modules(target, "gki", modules, extra_options, config_option)
  90. define_target_variant_modules(target, "perf", modules, extra_options, config_option)