bazel: support use bazel tool to build [2/6]
PD#SWPL-112151
Problem:
support use bazel tool to build
Solution:
1. support use bazel tool to build for gki2.0 and gki1.0
2. amlogic.bzl(build parameter), amlogic_utils.bzl(build function)
3. change define_db845c to define_common_amlogic
4. support build external modules
5. support build dtbo
6. use project config
7. rename external(out tree) modules name
Verify:
sc2
Change-Id: If644ea18c21624fd9ad8695b5a866ce593a11b7f
Signed-off-by: Wanwei Jiang <wanwei.jiang@amlogic.com>
diff --git a/amlogic_utils.bzl b/amlogic_utils.bzl
new file mode 100644
index 0000000..22a1b37
--- /dev/null
+++ b/amlogic_utils.bzl
@@ -0,0 +1,163 @@
+"""Functions that are useful in the common kernel package (usually `//common`)."""
+
+load("@bazel_skylib//lib:dicts.bzl", "dicts")
+load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
+load(
+ "//build/kernel/kleaf:kernel.bzl",
+ "kernel_abi",
+ "kernel_abi_dist",
+ "kernel_build",
+ "kernel_compile_commands",
+ "kernel_filegroup",
+ "kernel_images",
+ "kernel_kythe",
+ "kernel_modules_install",
+ "kernel_unstripped_modules_archive",
+ "merged_kernel_uapi_headers",
+)
+load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
+load("//build/kernel/kleaf/artifact_tests:kernel_test.bzl", "initramfs_modules_options_test")
+load("//build/kernel/kleaf/artifact_tests:device_modules_test.bzl", "device_modules_test")
+load("//build/kernel/kleaf/impl:gki_artifacts.bzl", "gki_artifacts")
+load("//build/kernel/kleaf/impl:out_headers_allowlist_archive.bzl", "out_headers_allowlist_archive")
+load(
+ "//build/kernel/kleaf/impl:constants.bzl",
+ "MODULE_OUTS_FILE_OUTPUT_GROUP",
+ "MODULE_OUTS_FILE_SUFFIX",
+ "TOOLCHAIN_VERSION_FILENAME",
+)
+load(
+ "//build/kernel/kleaf:constants.bzl",
+ "CI_TARGET_MAPPING",
+ "DEFAULT_GKI_OUTS",
+ "GKI_DOWNLOAD_CONFIGS",
+ "X86_64_OUTS",
+)
+load("//build/kernel/kleaf:print_debug.bzl", "print_debug")
+load("@kernel_toolchain_info//:dict.bzl", "BRANCH", "common_kernel_package")
+
+# Always collect_unstripped_modules for common kernels.
+_COLLECT_UNSTRIPPED_MODULES = True
+
+def define_common_amlogic(
+ name,
+ outs,
+ dtbo_srcs,
+ build_config = None,
+ module_outs = None,
+ define_abi_targets = None,
+ kmi_symbol_list = None,
+ kmi_symbol_list_add_only = None,
+ module_grouping = None,
+ unstripped_modules_archive = None,
+ gki_modules_list = None,
+ dist_dir = None,
+ ext_modules = None):
+ """Define target for db845c.
+
+ Note: This is a mixed build.
+
+ Requires [`define_common_kernels`](#define_common_kernels) to be called in the same package.
+
+ Args:
+ name: name of target. Usually `"db845c"`.
+ build_config: See [kernel_build.build_config](#kernel_build-build_config). If `None`,
+ default to `"build.config.db845c"`.
+ outs: See [kernel_build.outs](#kernel_build-outs).
+ module_outs: See [kernel_build.module_outs](#kernel_build-module_outs). The list of
+ in-tree kernel modules.
+ define_abi_targets: See [kernel_abi.define_abi_targets](#kernel_abi-define_abi_targets).
+ kmi_symbol_list: See [kernel_build.kmi_symbol_list](#kernel_build-kmi_symbol_list).
+ kmi_symbol_list_add_only: See [kernel_abi.kmi_symbol_list_add_only](#kernel_abi-kmi_symbol_list_add_only).
+ module_grouping: See [kernel_abi.module_grouping](#kernel_abi-module_grouping).
+ unstripped_modules_archive: See [kernel_abi.unstripped_modules_archive](#kernel_abi-unstripped_modules_archive).
+ gki_modules_list: List of gki modules to be copied to the dist directory.
+ If `None`, all gki kernel modules will be copied.
+ dist_dir: Argument to `copy_to_dist_dir`. If `None`, default is `"out/{BRANCH}/dist"`.
+ """
+
+ if build_config == None:
+ build_config = "build.config.db845c"
+
+ if kmi_symbol_list == None:
+ kmi_symbol_list = "//common:android/abi_gki_aarch64_db845c" if define_abi_targets else None
+
+ if kmi_symbol_list_add_only == None:
+ kmi_symbol_list_add_only = True if define_abi_targets else None
+
+ if gki_modules_list == None:
+ gki_modules_list = [":kernel_aarch64_modules"]
+
+ if dist_dir == None:
+ dist_dir = "out/{branch}/dist".format(branch = BRANCH)
+
+ # Also refer to the list of ext modules for ABI monitoring targets
+ _kernel_modules = ext_modules;
+
+ kernel_build(
+ name = name,
+ outs = outs,
+ srcs = [":common_kernel_sources"],
+ # List of in-tree kernel modules.
+ module_outs = module_outs,
+ build_config = build_config,
+ # Enable mixed build.
+ base_kernel = ":kernel_aarch64",
+ kmi_symbol_list = kmi_symbol_list,
+ collect_unstripped_modules = _COLLECT_UNSTRIPPED_MODULES,
+ strip_modules = True,
+ )
+
+ # enable ABI Monitoring
+ # based on the instructions here:
+ # https://android.googlesource.com/kernel/build/+/refs/heads/master/kleaf/docs/abi_device.md
+ # https://android-review.googlesource.com/c/kernel/build/+/2308912
+ kernel_abi(
+ name = name + "_abi",
+ kernel_build = name,
+ define_abi_targets = define_abi_targets,
+ kernel_modules = _kernel_modules,
+ kmi_symbol_list_add_only = kmi_symbol_list_add_only,
+ module_grouping = module_grouping,
+ unstripped_modules_archive = unstripped_modules_archive,
+ )
+
+ kernel_modules_install(
+ name = name + "_modules_install",
+ kernel_build = name,
+ # List of external modules.
+ kernel_modules = _kernel_modules,
+ )
+
+ merged_kernel_uapi_headers(
+ name = name + "_merged_kernel_uapi_headers",
+ kernel_build = name,
+ kernel_modules = _kernel_modules,
+ )
+
+ kernel_images(
+ name = name + "_images",
+ build_dtbo = True,
+ dtbo_srcs = [":" + name + "/" + e for e in dtbo_srcs],
+ build_initramfs = True,
+ kernel_build = name,
+ kernel_modules_install = name + "_modules_install",
+ )
+
+ dist_targets = [
+ name,
+ name + "_images",
+ name + "_modules_install",
+ # Mixed build: Additional GKI artifacts.
+ ":kernel_aarch64",
+ ":kernel_aarch64_additional_artifacts",
+ name + "_merged_kernel_uapi_headers",
+ ]
+
+ copy_to_dist_dir(
+ name = name + "_dist",
+ data = dist_targets + gki_modules_list,
+ dist_dir = dist_dir,
+ flat = True,
+ log = "info",
+ )