blob: 224f0b3d5f978d3a8b16adc30b746ec9d94ad8bb [file] [log] [blame]
Wanwei Jiang2218b892023-03-17 17:31:21 +08001"""Functions that are useful in the common kernel package (usually `//common`)."""
2
3load("@bazel_skylib//lib:dicts.bzl", "dicts")
4load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
5load(
6 "//build/kernel/kleaf:kernel.bzl",
7 "kernel_abi",
8 "kernel_abi_dist",
9 "kernel_build",
10 "kernel_compile_commands",
11 "kernel_filegroup",
12 "kernel_images",
13 "kernel_kythe",
14 "kernel_modules_install",
15 "kernel_unstripped_modules_archive",
16 "merged_kernel_uapi_headers",
17)
18load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
19load("//build/kernel/kleaf/artifact_tests:kernel_test.bzl", "initramfs_modules_options_test")
20load("//build/kernel/kleaf/artifact_tests:device_modules_test.bzl", "device_modules_test")
21load("//build/kernel/kleaf/impl:gki_artifacts.bzl", "gki_artifacts")
22load("//build/kernel/kleaf/impl:out_headers_allowlist_archive.bzl", "out_headers_allowlist_archive")
23load(
24 "//build/kernel/kleaf/impl:constants.bzl",
25 "MODULE_OUTS_FILE_OUTPUT_GROUP",
26 "MODULE_OUTS_FILE_SUFFIX",
27 "TOOLCHAIN_VERSION_FILENAME",
28)
29load(
30 "//build/kernel/kleaf:constants.bzl",
31 "CI_TARGET_MAPPING",
32 "DEFAULT_GKI_OUTS",
33 "GKI_DOWNLOAD_CONFIGS",
34 "X86_64_OUTS",
35)
36load("//build/kernel/kleaf:print_debug.bzl", "print_debug")
37load("@kernel_toolchain_info//:dict.bzl", "BRANCH", "common_kernel_package")
38
39# Always collect_unstripped_modules for common kernels.
40_COLLECT_UNSTRIPPED_MODULES = True
41
42def define_common_amlogic(
43 name,
44 outs,
45 dtbo_srcs,
46 build_config = None,
47 module_outs = None,
48 define_abi_targets = None,
49 kmi_symbol_list = None,
50 kmi_symbol_list_add_only = None,
51 module_grouping = None,
52 unstripped_modules_archive = None,
53 gki_modules_list = None,
54 dist_dir = None,
55 ext_modules = None):
Wanwei Jiang92c89432023-05-15 23:57:16 +080056 """Define target for amlogic.
Wanwei Jiang2218b892023-03-17 17:31:21 +080057
58 Note: This is a mixed build.
59
60 Requires [`define_common_kernels`](#define_common_kernels) to be called in the same package.
61
62 Args:
Wanwei Jiang92c89432023-05-15 23:57:16 +080063 name: name of target. Usually `"amlogic"`.
Wanwei Jiang2218b892023-03-17 17:31:21 +080064 build_config: See [kernel_build.build_config](#kernel_build-build_config). If `None`,
Wanwei Jiang92c89432023-05-15 23:57:16 +080065 default to `"common_drivers/build.config.amlogic.bazel"`.
Wanwei Jiang2218b892023-03-17 17:31:21 +080066 outs: See [kernel_build.outs](#kernel_build-outs).
67 module_outs: See [kernel_build.module_outs](#kernel_build-module_outs). The list of
68 in-tree kernel modules.
69 define_abi_targets: See [kernel_abi.define_abi_targets](#kernel_abi-define_abi_targets).
70 kmi_symbol_list: See [kernel_build.kmi_symbol_list](#kernel_build-kmi_symbol_list).
71 kmi_symbol_list_add_only: See [kernel_abi.kmi_symbol_list_add_only](#kernel_abi-kmi_symbol_list_add_only).
72 module_grouping: See [kernel_abi.module_grouping](#kernel_abi-module_grouping).
73 unstripped_modules_archive: See [kernel_abi.unstripped_modules_archive](#kernel_abi-unstripped_modules_archive).
74 gki_modules_list: List of gki modules to be copied to the dist directory.
75 If `None`, all gki kernel modules will be copied.
76 dist_dir: Argument to `copy_to_dist_dir`. If `None`, default is `"out/{BRANCH}/dist"`.
77 """
78
79 if build_config == None:
Wanwei Jiang92c89432023-05-15 23:57:16 +080080 build_config = "common_drivers/build.config.amlogic.bazel"
Wanwei Jiang2218b892023-03-17 17:31:21 +080081
82 if kmi_symbol_list == None:
Wanwei Jiang92c89432023-05-15 23:57:16 +080083 kmi_symbol_list = "//common:android/abi_gki_aarch64_amlogic" if define_abi_targets else None
Wanwei Jiang2218b892023-03-17 17:31:21 +080084
85 if kmi_symbol_list_add_only == None:
86 kmi_symbol_list_add_only = True if define_abi_targets else None
87
88 if gki_modules_list == None:
89 gki_modules_list = [":kernel_aarch64_modules"]
90
91 if dist_dir == None:
92 dist_dir = "out/{branch}/dist".format(branch = BRANCH)
93
94 # Also refer to the list of ext modules for ABI monitoring targets
95 _kernel_modules = ext_modules;
96
97 kernel_build(
98 name = name,
99 outs = outs,
100 srcs = [":common_kernel_sources"],
101 # List of in-tree kernel modules.
102 module_outs = module_outs,
103 build_config = build_config,
104 # Enable mixed build.
105 base_kernel = ":kernel_aarch64",
106 kmi_symbol_list = kmi_symbol_list,
107 collect_unstripped_modules = _COLLECT_UNSTRIPPED_MODULES,
108 strip_modules = True,
109 )
110
111 # enable ABI Monitoring
112 # based on the instructions here:
113 # https://android.googlesource.com/kernel/build/+/refs/heads/master/kleaf/docs/abi_device.md
114 # https://android-review.googlesource.com/c/kernel/build/+/2308912
115 kernel_abi(
116 name = name + "_abi",
117 kernel_build = name,
118 define_abi_targets = define_abi_targets,
119 kernel_modules = _kernel_modules,
120 kmi_symbol_list_add_only = kmi_symbol_list_add_only,
121 module_grouping = module_grouping,
122 unstripped_modules_archive = unstripped_modules_archive,
123 )
124
125 kernel_modules_install(
126 name = name + "_modules_install",
127 kernel_build = name,
128 # List of external modules.
129 kernel_modules = _kernel_modules,
130 )
131
132 merged_kernel_uapi_headers(
133 name = name + "_merged_kernel_uapi_headers",
134 kernel_build = name,
135 kernel_modules = _kernel_modules,
136 )
137
138 kernel_images(
139 name = name + "_images",
140 build_dtbo = True,
141 dtbo_srcs = [":" + name + "/" + e for e in dtbo_srcs],
142 build_initramfs = True,
143 kernel_build = name,
144 kernel_modules_install = name + "_modules_install",
145 )
146
147 dist_targets = [
148 name,
149 name + "_images",
150 name + "_modules_install",
151 # Mixed build: Additional GKI artifacts.
152 ":kernel_aarch64",
153 ":kernel_aarch64_additional_artifacts",
154 name + "_merged_kernel_uapi_headers",
155 ]
156
157 copy_to_dist_dir(
158 name = name + "_dist",
159 data = dist_targets + gki_modules_list,
160 dist_dir = dist_dir,
161 flat = True,
162 log = "info",
163 )