msm_kernel_la.bzl 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582
  1. load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
  2. load(
  3. "//build/kernel/kleaf:kernel.bzl",
  4. "kernel_abi",
  5. "kernel_abi_dist",
  6. "kernel_build",
  7. "kernel_build_config",
  8. "kernel_compile_commands",
  9. "kernel_images",
  10. "kernel_modules_install",
  11. "kernel_uapi_headers_cc_library",
  12. "merged_kernel_uapi_headers",
  13. "super_image",
  14. "unsparsed_image",
  15. "super_image_kunit",
  16. "super_image_consolidate"
  17. )
  18. load(
  19. "//build:msm_kernel_extensions.bzl",
  20. "define_extras",
  21. "get_build_config_fragments",
  22. "get_dtb_list",
  23. "get_dtbo_list",
  24. "get_dtstree",
  25. "get_gki_ramdisk_prebuilt_binary",
  26. "get_vendor_ramdisk_binaries",
  27. )
  28. load("@bazel_skylib//rules:write_file.bzl", "write_file")
  29. load(":msm_common.bzl", "define_top_level_config", "gen_config_without_source_lines", "get_out_dir")
  30. load(":msm_dtc.bzl", "define_dtc_dist")
  31. load(":msm_abl.bzl", "define_abl_dist")
  32. load(":avb_boot_img.bzl", "avb_sign_boot_image")
  33. load(":dpm_image.bzl", "define_dpm_image")
  34. load(":image_opts.bzl", "boot_image_opts")
  35. load(":target_variants.bzl", "la_variants")
  36. load(":modules.bzl", "COMMON_GKI_MODULES_LIST")
  37. load(":modules_unprotected.bzl", "get_unprotected_vendor_modules_list")
  38. load(":sec_dtb.bzl", "sec_dtb")
  39. load(":lego.bzl", "lego_dtbo_list")
  40. load(":kunit.bzl", "kunit_module_list")
  41. def _define_build_config(
  42. msm_target,
  43. target,
  44. variant,
  45. boot_image_opts = boot_image_opts(),
  46. build_config_fragments = []):
  47. """Creates a kernel_build_config for an MSM target
  48. Creates a `kernel_build_config` for input to a `kernel_build` rule.
  49. Args:
  50. msm_target: name of target platform (e.g. "kalama")
  51. variant: variant of kernel to build (e.g. "gki")
  52. """
  53. # keep earlycon addr in earlycon cmdline param only when provided explicitly in target's bazel file
  54. # otherwise, rely on stdout-path
  55. earlycon_param = "={}".format(boot_image_opts.earlycon_addr) if boot_image_opts.earlycon_addr != None else ""
  56. earlycon_param = '[ "$KERNEL_CMDLINE_CONSOLE_AUTO" != "0" ] && KERNEL_VENDOR_CMDLINE+=\' earlycon{} \''.format(earlycon_param)
  57. write_file(
  58. name = "{}_build_config_bazel".format(target),
  59. out = "build.config.msm.{}.generated".format(target),
  60. content = [
  61. 'KERNEL_DIR="msm-kernel"',
  62. "VARIANTS=({})".format(" ".join(la_variants)),
  63. "MSM_ARCH={}".format(msm_target.replace("-", "_")),
  64. "VARIANT={}".format(variant.replace("-", "_")),
  65. "ABL_SRC=bootable/bootloader/edk2",
  66. "BOOT_IMAGE_HEADER_VERSION={}".format(boot_image_opts.boot_image_header_version),
  67. "BASE_ADDRESS=0x%X" % boot_image_opts.base_address,
  68. "PAGE_SIZE={}".format(boot_image_opts.page_size),
  69. "BUILD_VENDOR_DLKM=1",
  70. "PREPARE_SYSTEM_DLKM=1",
  71. "SUPER_IMAGE_SIZE=0x%X" % boot_image_opts.super_image_size,
  72. "TRIM_UNUSED_MODULES=1",
  73. "BUILD_INIT_BOOT_IMG=1",
  74. "LZ4_RAMDISK={}".format(int(boot_image_opts.lz4_ramdisk)),
  75. '[ -z "$DT_OVERLAY_SUPPORT" ] && DT_OVERLAY_SUPPORT=1',
  76. earlycon_param,
  77. "KERNEL_VENDOR_CMDLINE+=' {} '".format(" ".join(boot_image_opts.kernel_vendor_cmdline_extras)),
  78. "VENDOR_BOOTCONFIG+='androidboot.first_stage_console=1 androidboot.hardware=qcom_kp'",
  79. "", # Needed for newline at end of file
  80. ],
  81. )
  82. top_level_config = define_top_level_config(target)
  83. common_config = gen_config_without_source_lines("build.config.common", target)
  84. # Concatenate build config fragments to form the final config
  85. kernel_build_config(
  86. name = "{}_build_config".format(target),
  87. srcs = [
  88. # do not sort
  89. top_level_config,
  90. "build.config.constants",
  91. common_config,
  92. "build.config.aarch64",
  93. ":{}_build_config_bazel".format(target),
  94. ] + [fragment for fragment in build_config_fragments] + [
  95. "build.config.msm.common",
  96. "build.config.msm.gki",
  97. "build.config.msm.gki.sec",
  98. "build.config.lego",
  99. ],
  100. )
  101. board_cmdline_extras = " ".join(boot_image_opts.board_kernel_cmdline_extras)
  102. if board_cmdline_extras:
  103. write_file(
  104. name = "{}_extra_cmdline".format(target),
  105. out = "board_extra_cmdline_{}".format(target),
  106. content = [board_cmdline_extras, ""],
  107. )
  108. board_bc_extras = " ".join(boot_image_opts.board_bootconfig_extras)
  109. if board_bc_extras:
  110. write_file(
  111. name = "{}_extra_bootconfig".format(target),
  112. out = "board_extra_bootconfig_{}".format(target),
  113. content = [board_bc_extras, ""],
  114. )
  115. def _define_kernel_build(
  116. target,
  117. msm_target,
  118. base_kernel,
  119. in_tree_module_list,
  120. dtb_list,
  121. dtbo_list,
  122. dtstree,
  123. define_abi_targets,
  124. kmi_enforced):
  125. """Creates a `kernel_build` and other associated definitions
  126. This is where the main kernel build target is created (e.g. `//msm-kernel:kalama_gki`).
  127. Many other rules will take this `kernel_build` as an input.
  128. Args:
  129. target: name of main Bazel target (e.g. `kalama_gki`)
  130. base_kernel: base kernel to pass into `kernel_build` (e.g. `//common:kernel_aarch64`)
  131. in_tree_module_list: list of in-tree modules
  132. dtb_list: device tree blobs expected to be built
  133. dtbo_list: device tree overlay blobs expected to be built
  134. define_abi_targets: boolean determining if ABI targets should be defined
  135. kmi_enforced: boolean determining if the KMI contract should be enforced
  136. """
  137. out_list = [".config", "Module.symvers"]
  138. if dtb_list:
  139. out_list += dtb_list
  140. if dtbo_list:
  141. out_list += dtbo_list
  142. common_gki_mod_list = [] + COMMON_GKI_MODULES_LIST
  143. for mod in get_unprotected_vendor_modules_list(msm_target):
  144. common_gki_mod_list.remove(mod)
  145. kernel_build(
  146. name = target,
  147. module_outs = in_tree_module_list,
  148. module_implicit_outs = common_gki_mod_list,
  149. outs = out_list,
  150. build_config = ":{}_build_config".format(target),
  151. dtstree = dtstree,
  152. base_kernel = base_kernel,
  153. kmi_symbol_list = "android/abi_gki_aarch64_qcom" if define_abi_targets else None,
  154. additional_kmi_symbol_lists = ["{}_all_kmi_symbol_lists".format(base_kernel)] if define_abi_targets else None,
  155. protected_exports_list = "android/abi_gki_protected_exports_aarch64" if define_abi_targets else None,
  156. protected_modules_list = "android/gki_aarch64_protected_modules" if define_abi_targets else None,
  157. collect_unstripped_modules = True,
  158. visibility = ["//visibility:public"],
  159. )
  160. if define_abi_targets:
  161. kernel_abi(
  162. name = "{}_abi".format(target),
  163. kernel_build = ":{}".format(target),
  164. define_abi_targets = True,
  165. kmi_enforced = kmi_enforced,
  166. module_grouping = False,
  167. kmi_symbol_list_add_only = True,
  168. visibility = ["//visibility:public"],
  169. )
  170. kernel_modules_install(
  171. name = "{}_modules_install".format(target),
  172. kernel_build = ":{}".format(target),
  173. )
  174. merged_kernel_uapi_headers(
  175. name = "{}_merged_kernel_uapi_headers".format(target),
  176. kernel_build = ":{}".format(target),
  177. )
  178. kernel_compile_commands(
  179. name = "{}_compile_commands".format(target),
  180. kernel_build = ":{}".format(target),
  181. )
  182. def _define_image_build(
  183. target,
  184. msm_target,
  185. base_kernel,
  186. variant,
  187. build_boot = True,
  188. build_dtbo = False,
  189. build_initramfs = False,
  190. build_vendor_boot = False,
  191. build_vendor_kernel_boot = False,
  192. build_vendor_dlkm = True,
  193. build_system_dlkm = False,
  194. boot_image_opts = boot_image_opts(),
  195. boot_image_outs = None,
  196. dtbo_list = [],
  197. vendor_ramdisk_binaries = None,
  198. gki_ramdisk_prebuilt_binary = None,
  199. in_tree_module_list = [],
  200. dpm_overlay = False):
  201. """Creates a `kernel_images` target which will generate bootable device images
  202. Args:
  203. target: name of main Bazel target (e.g. `kalama_gki`)
  204. msm_target: name of target platform (e.g. "kalama")
  205. base_kernel: kernel_build base kernel
  206. build_boot: whether to build a boot image
  207. build_dtbo: whether to build a dtbo image
  208. build_initramfs: whether to build an initramfs image
  209. build_vendor_boot: whether to build a vendor boot image
  210. build_vendor_kernel_boot: whether to build a vendor kernel boot image
  211. build_vendor_dlkm: whether to build a vendor dlkm image
  212. build_system_dlkm: whether to build a system dlkm image
  213. boot_image_outs: boot image outputs,
  214. dtbo_list: list of device tree overlay blobs to be built into `dtbo.img`
  215. vendor_ramdisk_binaries: ramdisk binaries (cpio archives)
  216. """
  217. # Generate the vendor_dlkm list
  218. native.genrule(
  219. name = "{}_vendor_dlkm_modules_list_generated".format(target),
  220. srcs = [],
  221. outs = ["modules.list.vendor_dlkm.{}".format(target)],
  222. cmd_bash = """
  223. touch "$@"
  224. for module in {mod_list}; do
  225. basename "$$module" >> "$@"
  226. done
  227. """.format(mod_list = " ".join(in_tree_module_list)),
  228. )
  229. kernel_images(
  230. name = "{}_images".format(target),
  231. kernel_modules_install = ":{}_modules_install".format(target),
  232. kernel_build = ":{}".format(target),
  233. base_kernel_images = "{}_images".format(base_kernel),
  234. build_boot = build_boot,
  235. build_dtbo = build_dtbo,
  236. build_initramfs = build_initramfs,
  237. build_vendor_boot = build_vendor_boot,
  238. build_vendor_kernel_boot = build_vendor_kernel_boot,
  239. build_vendor_dlkm = build_vendor_dlkm,
  240. build_system_dlkm = build_system_dlkm,
  241. modules_list = "modules.list.msm.{}".format(msm_target),
  242. system_dlkm_modules_list = "android/gki_system_dlkm_modules",
  243. vendor_dlkm_modules_list = ":{}_vendor_dlkm_modules_list_generated".format(target),
  244. system_dlkm_modules_blocklist = "modules.systemdlkm_blocklist.msm.{}".format(msm_target),
  245. vendor_dlkm_modules_blocklist = "modules.vendor_blocklist.msm.{}".format(msm_target),
  246. dtbo_srcs = [":{}/".format(target) + d for d in dtbo_list] if dtbo_list else None,
  247. vendor_ramdisk_binaries = vendor_ramdisk_binaries,
  248. gki_ramdisk_prebuilt_binary = gki_ramdisk_prebuilt_binary,
  249. boot_image_outs = boot_image_outs,
  250. deps = [
  251. "modules.list.msm.{}".format(msm_target),
  252. "modules.vendor_blocklist.msm.{}".format(msm_target),
  253. "modules.systemdlkm_blocklist.msm.{}".format(msm_target),
  254. "android/gki_system_dlkm_modules",
  255. ],
  256. )
  257. if build_boot:
  258. artifacts = "{}_images".format(target)
  259. else:
  260. artifacts = "{}_gki_artifacts".format(base_kernel)
  261. avb_sign_boot_image(
  262. name = "{}_avb_sign_boot_image".format(target),
  263. artifacts = artifacts,
  264. avbtool = "//prebuilts/kernel-build-tools:linux-x86/bin/avbtool",
  265. key = "//tools/mkbootimg:gki/testdata/testkey_rsa4096.pem",
  266. props = [
  267. "com.android.build.boot.os_version:13",
  268. "com.android.build.boot.security_patch:2023-05-05",
  269. ],
  270. boot_partition_size = int(boot_image_opts.boot_partition_size),
  271. )
  272. if dpm_overlay:
  273. define_dpm_image(target)
  274. native.filegroup(
  275. name = "{}_system_dlkm_image_file".format(target),
  276. srcs = ["{}_images".format(base_kernel)],
  277. output_group = "system_dlkm.img",
  278. )
  279. native.filegroup(
  280. name = "{}_vendor_dlkm_image_file".format(target),
  281. srcs = [":{}_images".format(target)],
  282. output_group = "vendor_dlkm.img",
  283. )
  284. if "lib/kunit/kunit_manager.ko" in kunit_module_list:
  285. # If build with --kunit option, then kunit ko list will be generated ini kunit_module_list of kunit.bzl. If there is no --kunit option, kunit_module_list is empty.
  286. super_image_kunit(
  287. name = "{}_super_image".format(target),
  288. system_dlkm_image = ":{}_system_dlkm_image_file".format(target),
  289. vendor_dlkm_image = ":{}_vendor_dlkm_image_file".format(target),
  290. )
  291. elif variant == "consolidate":
  292. # Defined separately because `super.img` is not generated by upstream kleaf
  293. super_image_consolidate(
  294. name = "{}_super_image".format(target),
  295. system_dlkm_image = ":{}_system_dlkm_image_file".format(target),
  296. vendor_dlkm_image = ":{}_vendor_dlkm_image_file".format(target),
  297. )
  298. else:
  299. # Defined separately because `super.img` is not generated by upstream kleaf
  300. super_image(
  301. name = "{}_super_image".format(target),
  302. system_dlkm_image = ":{}_system_dlkm_image_file".format(target),
  303. vendor_dlkm_image = ":{}_vendor_dlkm_image_file".format(target),
  304. )
  305. unsparsed_image(
  306. name = "{}_unsparsed_image".format(target),
  307. src = "{}_super_image".format(target),
  308. out = "super_unsparsed.img",
  309. )
  310. def _define_kernel_dist(
  311. target,
  312. msm_target,
  313. variant,
  314. base_kernel,
  315. define_abi_targets,
  316. boot_image_opts = boot_image_opts(),
  317. dpm_overlay = False):
  318. """Creates distribution targets for kernel builds
  319. When Bazel builds everything, the outputs end up buried in `bazel-bin`.
  320. These rules are used to copy the build artifacts to `out/msm-kernel-<target>/dist/`
  321. with proper permissions, etc.
  322. Args:
  323. target: name of main Bazel target (e.g. `kalama_gki`)
  324. msm_target: name of just the platform target (e.g. `kalama`)
  325. variant: name of just the variant (e.g. `gki`)
  326. base_kernel: base kernel to fetch artifacts from (e.g. `//common:kernel_aarch64`)
  327. define_abi_targets: boolean determining if ABI targets should be defined
  328. """
  329. dist_dir = get_out_dir(msm_target, variant) + "/dist"
  330. msm_dist_targets = [base_kernel]
  331. if define_abi_targets:
  332. msm_dist_targets.append("{}_gki_artifacts".format(base_kernel))
  333. native.genrule(
  334. name = "{}_system_dlkm_module_blocklist".format(target),
  335. srcs = ["modules.systemdlkm_blocklist.msm.{}".format(msm_target)],
  336. outs = ["{}/system_dlkm.modules.blocklist".format(target)],
  337. cmd = """
  338. mkdir -p "$$(dirname "$@")"
  339. sed -e '/^#/d' -e '/^$$/d' $(SRCS) > "$@"
  340. """,
  341. )
  342. msm_dist_targets.extend([
  343. # do not sort
  344. "{}_images_system_dlkm_image".format(base_kernel),
  345. "{}_headers".format(base_kernel),
  346. ":{}".format(target),
  347. ":{}_images".format(target),
  348. ":{}_super_image".format(target),
  349. ":{}_unsparsed_image".format(target),
  350. ":{}_merged_kernel_uapi_headers".format(target),
  351. ":{}_build_config".format(target),
  352. ":{}_system_dlkm_module_blocklist".format(target),
  353. ])
  354. vendor_unprotected_dlkm = " ".join(get_unprotected_vendor_modules_list(msm_target))
  355. if vendor_unprotected_dlkm:
  356. msm_dist_targets.extend(["{}_vendor_dlkm_module_unprotectedlist".format(target)])
  357. msm_dist_targets.append("{}_avb_sign_boot_image".format(target))
  358. if dpm_overlay:
  359. msm_dist_targets.append(":{}_dpm_image".format(target))
  360. board_cmdline_extras = " ".join(boot_image_opts.board_kernel_cmdline_extras)
  361. if board_cmdline_extras:
  362. msm_dist_targets.append("{}_extra_cmdline".format(target))
  363. board_bc_extras = " ".join(boot_image_opts.board_bootconfig_extras)
  364. if board_bc_extras:
  365. msm_dist_targets.append("{}_extra_bootconfig".format(target))
  366. if define_abi_targets:
  367. kernel_abi_dist(
  368. name = "{}_dist".format(target),
  369. kernel_abi = ":{}_abi".format(target),
  370. kernel_build_add_vmlinux = False,
  371. data = msm_dist_targets,
  372. dist_dir = dist_dir,
  373. flat = True,
  374. wipe_dist_dir = True,
  375. allow_duplicate_filenames = True,
  376. mode_overrides = {
  377. # do not sort
  378. "**/*.elf": "755",
  379. "**/vmlinux": "755",
  380. "**/Image": "755",
  381. "**/*.dtb*": "755",
  382. "**/LinuxLoader*": "755",
  383. "**/*": "644",
  384. },
  385. log = "info",
  386. )
  387. else:
  388. copy_to_dist_dir(
  389. name = "{}_dist".format(target),
  390. data = msm_dist_targets,
  391. dist_dir = dist_dir,
  392. flat = True,
  393. wipe_dist_dir = True,
  394. allow_duplicate_filenames = True,
  395. mode_overrides = {
  396. # do not sort
  397. "**/*.elf": "755",
  398. "**/vmlinux": "755",
  399. "**/Image": "755",
  400. "**/*.dtb*": "755",
  401. "**/LinuxLoader*": "755",
  402. "**/*": "644",
  403. },
  404. log = "info",
  405. )
  406. def _define_uapi_library(target):
  407. """Define a cc_library for userspace programs to use
  408. Args:
  409. target: kernel_build target name (e.g. "kalama_gki")
  410. """
  411. kernel_uapi_headers_cc_library(
  412. name = "{}_uapi_header_library".format(target),
  413. kernel_build = ":{}".format(target),
  414. )
  415. def define_msm_la(
  416. msm_target,
  417. variant,
  418. in_tree_module_list,
  419. kmi_enforced = True,
  420. dpm_overlay = False,
  421. boot_image_opts = boot_image_opts()):
  422. """Top-level kernel build definition macro for an MSM platform
  423. Args:
  424. msm_target: name of target platform (e.g. "kalama")
  425. variant: variant of kernel to build (e.g. "gki")
  426. in_tree_module_list: list of in-tree modules
  427. kmi_enforced: boolean determining if the KMI contract should be enforced
  428. dpm_overlay: boolean determining if a `dpm.img` should be generated
  429. boot_image_header_version: boot image header version (for `boot.img`)
  430. base_address: edk2 base address
  431. page_size: kernel page size
  432. super_image_size: size of super image partition
  433. lz4_ramdisk: whether to use an lz4-compressed ramdisk
  434. """
  435. if not variant in la_variants:
  436. fail("{} not defined in target_variants.bzl la_variants!".format(variant))
  437. # Enforce format of "//msm-kernel:target-foo_variant-bar" (underscore is the delimeter
  438. # between target and variant)
  439. target = msm_target.replace("_", "-") + "_" + variant.replace("_", "-")
  440. if variant == "consolidate":
  441. base_kernel = "//common:kernel_aarch64_consolidate"
  442. define_abi_targets = False
  443. else:
  444. base_kernel = "//common:kernel_aarch64"
  445. define_abi_targets = True
  446. dtb_list = get_dtb_list(msm_target)
  447. dtbo_list = get_dtbo_list(msm_target)
  448. dtstree = get_dtstree(msm_target)
  449. vendor_ramdisk_binaries = get_vendor_ramdisk_binaries(target)
  450. gki_ramdisk_prebuilt_binary = get_gki_ramdisk_prebuilt_binary()
  451. build_config_fragments = get_build_config_fragments(msm_target)
  452. vendor_dlkm_module_unprotected_list = get_unprotected_vendor_modules_list(msm_target)
  453. dtbo_list = dtbo_list + sec_dtb(
  454. target = msm_target,
  455. binary = "dtbo_list"
  456. )
  457. dtbo_list = dtbo_list + lego_dtbo_list
  458. # Can't enable dpm_overlay if no overlays are listed
  459. if len(dtbo_list) == 0 and dpm_overlay:
  460. dpm_overlay = False
  461. vendor_unprotected_dlkm = " ".join(vendor_dlkm_module_unprotected_list)
  462. if vendor_unprotected_dlkm:
  463. write_file(
  464. name = "{}_vendor_dlkm_module_unprotectedlist".format(target),
  465. out = "{}/vendor_dlkm.modules.unprotectedlist".format(target),
  466. content = [vendor_unprotected_dlkm, ""],
  467. )
  468. in_tree_module_list += vendor_dlkm_module_unprotected_list
  469. _define_build_config(
  470. msm_target,
  471. target,
  472. variant,
  473. boot_image_opts = boot_image_opts,
  474. build_config_fragments = build_config_fragments,
  475. )
  476. _define_kernel_build(
  477. target,
  478. msm_target,
  479. base_kernel,
  480. in_tree_module_list,
  481. dtb_list,
  482. dtbo_list,
  483. dtstree,
  484. define_abi_targets,
  485. kmi_enforced,
  486. )
  487. _define_image_build(
  488. target,
  489. msm_target,
  490. base_kernel,
  491. variant,
  492. # When building a GKI target, we take the kernel and boot.img directly from
  493. # common, so no need to build here.
  494. build_boot = False if define_abi_targets else True,
  495. build_dtbo = True if dtbo_list else False,
  496. build_initramfs = True,
  497. build_vendor_boot = True,
  498. dtbo_list = dtbo_list,
  499. vendor_ramdisk_binaries = vendor_ramdisk_binaries,
  500. gki_ramdisk_prebuilt_binary = gki_ramdisk_prebuilt_binary,
  501. boot_image_opts = boot_image_opts,
  502. boot_image_outs = None if dtb_list else ["boot.img", "init_boot.img"],
  503. in_tree_module_list = in_tree_module_list,
  504. dpm_overlay = dpm_overlay,
  505. )
  506. _define_kernel_dist(
  507. target,
  508. msm_target,
  509. variant,
  510. base_kernel,
  511. define_abi_targets,
  512. boot_image_opts = boot_image_opts,
  513. dpm_overlay = dpm_overlay,
  514. )
  515. _define_uapi_library(target)
  516. define_abl_dist(target, msm_target, variant)
  517. define_dtc_dist(target, msm_target, variant)
  518. define_extras(target)