ANDROID: build: Add define_dpm_image macro

Currently, there's no way to generate a dpm.img file from the Bazel
build. As this should be generated when a dpm overlay dtbo exists,
generate it in that case.

To make use of this macro, just set dpm_overlay = True when defining
an LA target.

Change-Id: I10222499737ffb9b43cb2bac235ada66c8cae2e5
Signed-off-by: John Moon <quic_johmoo@quicinc.com>
This commit is contained in:
John Moon 2023-10-04 14:46:18 -07:00
parent bfa0380f01
commit 5136a9f974
3 changed files with 48 additions and 2 deletions

32
dpm_image.bzl Normal file
View File

@ -0,0 +1,32 @@
load("@//build/kernel/kleaf:hermetic_tools.bzl", "hermetic_genrule")
def define_dpm_image(tv):
target = tv.split("_")[0]
hermetic_genrule(
name = "{}_dpm_image".format(tv),
srcs = [
"//msm-kernel:{}_build_config".format(tv),
"//msm-kernel:{}/{}-dpm-overlay.dtbo".format(tv, target),
],
outs = ["{}/dpm.img".format(tv)],
cmd = """
# Stub out append_cmd
append_cmd() {{
:
}}
set +u
source "$(location //msm-kernel:{tv}_build_config)"
set -u
$(location //prebuilts/kernel-build-tools:linux-x86/bin/mkdtboimg) \
create "$@" --page_size="$$PAGE_SIZE" \
"$(location //msm-kernel:{tv}/{target}-dpm-overlay.dtbo)"
""".format(
tv = tv,
target = target,
),
tools = [
"//prebuilts/kernel-build-tools:linux-x86/bin/mkdtboimg",
],
)

View File

@ -28,6 +28,7 @@ load(":msm_common.bzl", "define_top_level_config", "gen_config_without_source_li
load(":msm_dtc.bzl", "define_dtc_dist") load(":msm_dtc.bzl", "define_dtc_dist")
load(":msm_abl.bzl", "define_abl_dist") load(":msm_abl.bzl", "define_abl_dist")
load(":avb_boot_img.bzl", "avb_sign_boot_image") load(":avb_boot_img.bzl", "avb_sign_boot_image")
load(":dpm_image.bzl", "define_dpm_image")
load(":image_opts.bzl", "boot_image_opts") load(":image_opts.bzl", "boot_image_opts")
load(":target_variants.bzl", "la_variants") load(":target_variants.bzl", "la_variants")
load(":modules.bzl", "COMMON_GKI_MODULES_LIST") load(":modules.bzl", "COMMON_GKI_MODULES_LIST")
@ -195,7 +196,8 @@ def _define_image_build(
dtbo_list = [], dtbo_list = [],
vendor_ramdisk_binaries = None, vendor_ramdisk_binaries = None,
gki_ramdisk_prebuilt_binary = None, gki_ramdisk_prebuilt_binary = None,
in_tree_module_list = []): in_tree_module_list = [],
dpm_overlay = False):
"""Creates a `kernel_images` target which will generate bootable device images """Creates a `kernel_images` target which will generate bootable device images
Args: Args:
@ -273,6 +275,9 @@ def _define_image_build(
boot_partition_size = int(boot_image_opts.boot_partition_size), boot_partition_size = int(boot_image_opts.boot_partition_size),
) )
if dpm_overlay:
define_dpm_image(target)
native.filegroup( native.filegroup(
name = "{}_system_dlkm_image_file".format(target), name = "{}_system_dlkm_image_file".format(target),
srcs = ["{}_images".format(base_kernel)], srcs = ["{}_images".format(base_kernel)],
@ -303,7 +308,8 @@ def _define_kernel_dist(
variant, variant,
base_kernel, base_kernel,
define_abi_targets, define_abi_targets,
boot_image_opts = boot_image_opts()): boot_image_opts = boot_image_opts(),
dpm_overlay = False):
"""Creates distribution targets for kernel builds """Creates distribution targets for kernel builds
When Bazel builds everything, the outputs end up buried in `bazel-bin`. When Bazel builds everything, the outputs end up buried in `bazel-bin`.
@ -339,6 +345,9 @@ def _define_kernel_dist(
msm_dist_targets.append("{}_avb_sign_boot_image".format(target)) msm_dist_targets.append("{}_avb_sign_boot_image".format(target))
if dpm_overlay:
msm_dist_targets.append(":{}_dpm_image".format(target))
board_cmdline_extras = " ".join(boot_image_opts.board_kernel_cmdline_extras) board_cmdline_extras = " ".join(boot_image_opts.board_kernel_cmdline_extras)
if board_cmdline_extras: if board_cmdline_extras:
msm_dist_targets.append("{}_extra_cmdline".format(target)) msm_dist_targets.append("{}_extra_cmdline".format(target))
@ -404,6 +413,7 @@ def define_msm_la(
variant, variant,
in_tree_module_list, in_tree_module_list,
kmi_enforced = True, kmi_enforced = True,
dpm_overlay = False,
boot_image_opts = boot_image_opts()): boot_image_opts = boot_image_opts()):
"""Top-level kernel build definition macro for an MSM platform """Top-level kernel build definition macro for an MSM platform
@ -412,6 +422,7 @@ def define_msm_la(
variant: variant of kernel to build (e.g. "gki") variant: variant of kernel to build (e.g. "gki")
in_tree_module_list: list of in-tree modules in_tree_module_list: list of in-tree modules
kmi_enforced: boolean determining if the KMI contract should be enforced kmi_enforced: boolean determining if the KMI contract should be enforced
dpm_overlay: boolean determining if a `dpm.img` should be generated
boot_image_header_version: boot image header version (for `boot.img`) boot_image_header_version: boot image header version (for `boot.img`)
base_address: edk2 base address base_address: edk2 base address
page_size: kernel page size page_size: kernel page size
@ -475,6 +486,7 @@ def define_msm_la(
boot_image_opts = boot_image_opts, boot_image_opts = boot_image_opts,
boot_image_outs = None if dtb_list else ["boot.img", "init_boot.img"], boot_image_outs = None if dtb_list else ["boot.img", "init_boot.img"],
in_tree_module_list = in_tree_module_list, in_tree_module_list = in_tree_module_list,
dpm_overlay = dpm_overlay,
) )
_define_kernel_dist( _define_kernel_dist(
@ -484,6 +496,7 @@ def define_msm_la(
base_kernel, base_kernel,
define_abi_targets, define_abi_targets,
boot_image_opts = boot_image_opts, boot_image_opts = boot_image_opts,
dpm_overlay = dpm_overlay,
) )
_define_uapi_library(target) _define_uapi_library(target)

View File

@ -316,4 +316,5 @@ def define_pineapple():
board_kernel_cmdline_extras = board_kernel_cmdline_extras, board_kernel_cmdline_extras = board_kernel_cmdline_extras,
board_bootconfig_extras = board_bootconfig_extras, board_bootconfig_extras = board_bootconfig_extras,
), ),
dpm_overlay = True,
) )