From 1312198e534f4df397a94d424de7d0c8e8a0fe78 Mon Sep 17 00:00:00 2001 From: John Moon Date: Thu, 27 Jul 2023 11:18:17 -0700 Subject: [PATCH] ANDROID: build: Replace genrules with write_file where possible Currently, there are a few places where we use Bazel's native genrule rule to generate files that consist of simple strings (usually with cat << EOF or echo "str" >> "$@" semantics). It was recently pointed out to us that the Skylib library (already available from Kleaf) has a "write_file" rule which is better than our genrule method for creating files from strings. It's better because it has a simpler interface, does not rely on any Starlark-external tools (i.e. bash), and does not require all of the strings to be formatted in one operation which makes the rule slightly more readable. Replace file-creating genrules where it makes sense to do so. This change has no impact on actual build logic as the output files are logically identical. Change-Id: I2cef369e299d42b2677ddea833c43d9c80eff32c Signed-off-by: John Moon --- msm_common.bzl | 20 +++++------ msm_kernel_la.bzl | 83 +++++++++++++++++----------------------------- msm_kernel_le.bzl | 56 ++++++++++++------------------- msm_kernel_lxc.bzl | 55 ++++++++++++------------------ msm_kernel_vm.bzl | 56 ++++++++++--------------------- 5 files changed, 101 insertions(+), 169 deletions(-) diff --git a/msm_common.bzl b/msm_common.bzl index 4864a6225db3..73542c870689 100644 --- a/msm_common.bzl +++ b/msm_common.bzl @@ -1,17 +1,17 @@ +load("@bazel_skylib//rules:write_file.bzl", "write_file") + def define_top_level_config(target): """Define common top-level variables in build.config""" rule_name = "{}_top_level_config".format(target) - native.genrule( + write_file( name = rule_name, - srcs = [], - outs = ["build.config.bazel.top.level.{}".format(target)], - cmd_bash = """ - cat << 'EOF' > "$@" -# === define_top_level_config === -BUILDING_WITH_BAZEL=true -# === end define_top_level_config === -EOF - """, + out = "build.config.bazel.top.level.{}".format(target), + content = [ + "# === define_top_level_config ===", + "BUILDING_WITH_BAZEL=true", + "# === end define_top_level_config ===", + "", # Needed for newline at end of file + ], ) return ":{}".format(rule_name) diff --git a/msm_kernel_la.bzl b/msm_kernel_la.bzl index 10d19695c098..d3d880462603 100644 --- a/msm_kernel_la.bzl +++ b/msm_kernel_la.bzl @@ -22,6 +22,7 @@ load( "get_gki_ramdisk_prebuilt_binary", "get_vendor_ramdisk_binaries", ) +load("@bazel_skylib//rules:write_file.bzl", "write_file") load(":msm_common.bzl", "define_top_level_config", "gen_config_without_source_lines", "get_out_dir") load(":msm_dtc.bzl", "define_dtc_dist") load(":msm_abl.bzl", "define_abl_dist") @@ -46,50 +47,30 @@ def _define_build_config( variant: variant of kernel to build (e.g. "gki") """ - gen_config_command = """ - cat << 'EOF' > "$@" -KERNEL_DIR="msm-kernel" -VARIANTS=(%s) -MSM_ARCH=%s -VARIANT=%s -ABL_SRC=bootable/bootloader/edk2 -BOOT_IMAGE_HEADER_VERSION=%d -BASE_ADDRESS=0x%X -PAGE_SIZE=%d -BUILD_VENDOR_DLKM=1 -PREPARE_SYSTEM_DLKM=1 -SUPER_IMAGE_SIZE=0x%X -TRIM_UNUSED_MODULES=1 -BUILD_INIT_BOOT_IMG=1 -LZ4_RAMDISK=%d -[ -z "$$DT_OVERLAY_SUPPORT" ] && DT_OVERLAY_SUPPORT=1 - -if [ "$$KERNEL_CMDLINE_CONSOLE_AUTO" != "0" ]; then - KERNEL_VENDOR_CMDLINE+=' earlycon=%s ' -fi - -KERNEL_VENDOR_CMDLINE+=' %s ' -VENDOR_BOOTCONFIG+='androidboot.first_stage_console=1 androidboot.hardware=qcom_kp' -EOF - """ % ( - " ".join(la_variants), - msm_target.replace("-", "_"), - variant.replace("-", "_"), - boot_image_opts.boot_image_header_version, - boot_image_opts.base_address, - boot_image_opts.page_size, - boot_image_opts.super_image_size, - int(boot_image_opts.lz4_ramdisk), - boot_image_opts.earlycon_addr, - " ".join(boot_image_opts.kernel_vendor_cmdline_extras), - ) - - # Generate the build config - native.genrule( + write_file( name = "{}_build_config_bazel".format(target), - srcs = [], - outs = ["build.config.msm.{}.generated".format(target)], - cmd_bash = gen_config_command, + out = "build.config.msm.{}.generated".format(target), + content = [ + 'KERNEL_DIR="msm-kernel"', + "VARIANTS=({})".format(" ".join(la_variants)), + "MSM_ARCH={}".format(msm_target.replace("-", "_")), + "VARIANT={}".format(variant.replace("-", "_")), + "ABL_SRC=bootable/bootloader/edk2", + "BOOT_IMAGE_HEADER_VERSION={}".format(boot_image_opts.boot_image_header_version), + "BASE_ADDRESS=0x%X" % boot_image_opts.base_address, + "PAGE_SIZE={}".format(boot_image_opts.page_size), + "BUILD_VENDOR_DLKM=1", + "PREPARE_SYSTEM_DLKM=1", + "SUPER_IMAGE_SIZE=0x%X" % boot_image_opts.super_image_size, + "TRIM_UNUSED_MODULES=1", + "BUILD_INIT_BOOT_IMG=1", + "LZ4_RAMDISK={}".format(int(boot_image_opts.lz4_ramdisk)), + '[ -z "$DT_OVERLAY_SUPPORT" ] && DT_OVERLAY_SUPPORT=1', + '[ "$KERNEL_CMDLINE_CONSOLE_AUTO" != "0" ] && KERNEL_VENDOR_CMDLINE+=\' earlycon={} \''.format(boot_image_opts.earlycon_addr), + "KERNEL_VENDOR_CMDLINE+=' {} '".format(" ".join(boot_image_opts.kernel_vendor_cmdline_extras)), + "VENDOR_BOOTCONFIG+='androidboot.first_stage_console=1 androidboot.hardware=qcom_kp'", + "", # Needed for newline at end of file + ], ) top_level_config = define_top_level_config(target) @@ -113,22 +94,18 @@ EOF board_cmdline_extras = " ".join(boot_image_opts.board_kernel_cmdline_extras) if board_cmdline_extras: - native.genrule( + write_file( name = "{}_extra_cmdline".format(target), - outs = ["board_extra_cmdline_{}".format(target)], - cmd_bash = """ - echo {} > "$@" - """.format(board_cmdline_extras), + out = "board_extra_cmdline_{}".format(target), + content = [board_cmdline_extras, ""], ) board_bc_extras = " ".join(boot_image_opts.board_bootconfig_extras) if board_bc_extras: - native.genrule( + write_file( name = "{}_extra_bootconfig".format(target), - outs = ["board_extra_bootconfig_{}".format(target)], - cmd_bash = """ - echo {} > "$@" - """.format(board_bc_extras), + out = "board_extra_bootconfig_{}".format(target), + content = [board_bc_extras, ""], ) def _define_kernel_build( diff --git a/msm_kernel_le.bzl b/msm_kernel_le.bzl index 93f2eb283845..ce5739b83636 100644 --- a/msm_kernel_le.bzl +++ b/msm_kernel_le.bzl @@ -19,6 +19,7 @@ load( "get_dtstree", "get_vendor_ramdisk_binaries", ) +load("@bazel_skylib//rules:write_file.bzl", "write_file") load(":msm_common.bzl", "define_top_level_config", "gen_config_without_source_lines", "get_out_dir") load(":msm_dtc.bzl", "define_dtc_dist") load(":msm_abl.bzl", "define_abl_dist") @@ -42,42 +43,27 @@ def _define_build_config( variant: variant of kernel to build (e.g. "gki") """ - gen_config_command = """ - cat << 'EOF' > "$@" -KERNEL_DIR="msm-kernel" -VARIANTS=(%s) -MSM_ARCH=%s -VARIANT=%s -ABL_SRC=bootable/bootloader/edk2 -BOOT_IMAGE_HEADER_VERSION=%d -BASE_ADDRESS=0x%X -PAGE_SIZE=%d -TARGET_HAS_SEPARATE_RD=1 -PREFERRED_USERSPACE=le -BUILD_BOOT_IMG=1 -SKIP_UNPACKING_RAMDISK=1 -BUILD_INITRAMFS=1 -[ -z "$${DT_OVERLAY_SUPPORT}" ] && DT_OVERLAY_SUPPORT=1 - -if [ "$${KERNEL_CMDLINE_CONSOLE_AUTO}" != "0" ]; then - KERNEL_VENDOR_CMDLINE+=' console=ttyMSM0,115200n8 earlycon=qcom_geni,0x00a9C000 qcom_geni_serial.con_enabled=1 ' -fi -EOF - """ % ( - " ".join([v.replace("-", "_") for v in le_variants]), # VARIANTS - msm_target.replace("-", "_"), - variant.replace("-", "_"), - boot_image_opts.boot_image_header_version, - boot_image_opts.base_address, - boot_image_opts.page_size, - ) - - # Generate the build config - native.genrule( + write_file( name = "{}_build_config_bazel".format(target), - srcs = [], - outs = ["build.config.msm.{}.generated".format(target)], - cmd_bash = gen_config_command, + out = "build.config.msm.{}.generated".format(target), + content = [ + 'KERNEL_DIR="msm-kernel"', + "VARIANTS=({})".format(" ".join([v.replace("-", "_") for v in le_variants])), + "MSM_ARCH={}".format(msm_target.replace("-", "_")), + "VARIANT={}".format(variant.replace("-", "_")), + "ABL_SRC=bootable/bootloader/edk2", + "BOOT_IMAGE_HEADER_VERSION={}".format(boot_image_opts.boot_image_header_version), + "BASE_ADDRESS=0x%X" % boot_image_opts.base_address, + "PAGE_SIZE={}".format(boot_image_opts.page_size), + "TARGET_HAS_SEPARATE_RD=1", + "PREFERRED_USERSPACE=le", + "BUILD_BOOT_IMG=1", + "SKIP_UNPACKING_RAMDISK=1", + "BUILD_INITRAMFS=1", + '[ -z "$DT_OVERLAY_SUPPORT" ] && DT_OVERLAY_SUPPORT=1', + '[ "$KERNEL_CMDLINE_CONSOLE_AUTO" != "0" ] && KERNEL_VENDOR_CMDLINE+=\' console=ttyMSM0,115200n8 earlycon=qcom_geni,0x00a9C000 qcom_geni_serial.con_enabled=1 \'', + "", # Needed for newline at end of file + ], ) top_level_config = define_top_level_config(target) diff --git a/msm_kernel_lxc.bzl b/msm_kernel_lxc.bzl index f78be54d231c..a3f2609c9916 100644 --- a/msm_kernel_lxc.bzl +++ b/msm_kernel_lxc.bzl @@ -20,6 +20,7 @@ load( "get_dtstree", "get_vendor_ramdisk_binaries", ) +load("@bazel_skylib//rules:write_file.bzl", "write_file") load(":msm_common.bzl", "define_top_level_config", "gen_config_without_source_lines", "get_out_dir") load(":msm_dtc.bzl", "define_dtc_dist") load(":msm_abl.bzl", "define_abl_dist") @@ -42,40 +43,28 @@ def _define_build_config( variant: variant of kernel to build (e.g. "gki") """ - gen_config_command = """ - cat << 'EOF' > "$@" -KERNEL_DIR="msm-kernel" -SOC_NAME="monaco_auto" -VARIANTS=(%s) -MSM_ARCH=%s -VARIANT=%s -ABL_SRC=bootable/bootloader/edk2 -BOOT_IMAGE_HEADER_VERSION=%d -BASE_ADDRESS=0x%X -PAGE_SIZE=%d -TARGET_HAS_SEPARATE_RD=1 -PREFERRED_USERSPACE=lxc -BUILD_BOOT_IMG=1 -SKIP_UNPACKING_RAMDISK=1 -BUILD_INITRAMFS=1 -[ -z "$${DT_OVERLAY_SUPPORT}" ] && DT_OVERLAY_SUPPORT=1 -KERNEL_VENDOR_CMDLINE+=' console=ttyMSM0,115200n8 earlycon=qcom_geni,0x99c000 qcom_geni_serial.con_enabled=1 loglevel=8 nokaslr printk.devkmsg=on root=/dev/ram0 rw rootwait' -EOF - """ % ( - " ".join([v.replace("-", "_") for v in lxc_variants]), # VARIANTS - msm_target.replace("-", "_"), - variant.replace("-", "_"), - boot_image_opts.boot_image_header_version, - boot_image_opts.base_address, - boot_image_opts.page_size, - ) - - # Generate the build config - native.genrule( + write_file( name = "{}_build_config_bazel".format(target), - srcs = [], - outs = ["build.config.msm.{}.generated".format(target)], - cmd_bash = gen_config_command, + out = "build.config.msm.{}.generated".format(target), + content = [ + 'KERNEL_DIR="msm-kernel"', + 'SOC_NAME="monaco_auto"', + "VARIANTS=({})".format(" ".join([v.replace("-", "_") for v in lxc_variants])), + "MSM_ARCH={}".format(msm_target.replace("-", "_")), + "VARIANT={}".format(variant.replace("-", "_")), + "ABL_SRC=bootable/bootloader/edk2", + "BOOT_IMAGE_HEADER_VERSION={}".format(boot_image_opts.boot_image_header_version), + "BASE_ADDRESS=0x%X" % boot_image_opts.base_address, + "PAGE_SIZE={}".format(boot_image_opts.page_size), + "TARGET_HAS_SEPARATE_RD=1", + "PREFERRED_USERSPACE=lxc", + "BUILD_BOOT_IMG=1", + "SKIP_UNPACKING_RAMDISK=1", + "BUILD_INITRAMFS=1", + '[ -z "$DT_OVERLAY_SUPPORT" ] && DT_OVERLAY_SUPPORT=1', + "KERNEL_VENDOR_CMDLINE+=' console=ttyMSM0,115200n8 earlycon=qcom_geni,0x99c000 qcom_geni_serial.con_enabled=1 loglevel=8 nokaslr printk.devkmsg=on root=/dev/ram0 rw rootwait '", + "", # Needed for newline at end of file + ], ) top_level_config = define_top_level_config(target) diff --git a/msm_kernel_vm.bzl b/msm_kernel_vm.bzl index 8147c2c6bf28..71ce37332346 100644 --- a/msm_kernel_vm.bzl +++ b/msm_kernel_vm.bzl @@ -20,6 +20,7 @@ load( "get_dtstree", "get_vendor_ramdisk_binaries", ) +load("@bazel_skylib//rules:write_file.bzl", "write_file") load(":msm_common.bzl", "define_top_level_config", "gen_config_without_source_lines", "get_out_dir") load(":msm_dtc.bzl", "define_dtc_dist") load(":image_opts.bzl", "vm_image_opts") @@ -65,45 +66,24 @@ def _define_build_config( else: msm_arch = msm_target.replace("-", "_") - gen_config_command = """ - cat << 'EOF' > "$@" -KERNEL_DIR="msm-kernel" -VARIANTS=(%s) -MSM_ARCH=%s -VARIANT=%s - -PREFERRED_USERSPACE=%s -VM_DTB_IMG_CREATE=%d - -KERNEL_OFFSET=0x%X -DTB_OFFSET=0x%X -RAMDISK_OFFSET=0x%X -CMDLINE_CPIO_OFFSET=0x%X - -VM_SIZE_EXT4=%d -DUMMY_IMG_SIZE=%d - -EOF - """ % ( - " ".join([v.replace("-", "_") for v in vm_variants]), # VARIANTS - msm_arch, # MSM_ARCH - variant.replace("-", "_"), # VARIANT - vm_image_opts.preferred_usespace, # PREFERED_USERSPACE - int(vm_image_opts.vm_dtb_img_create), # VM_DTB_IMG_CREATE - vm_image_opts.kernel_offset, # KERNEL_OFFSET - vm_image_opts.dtb_offset, # DTB_OFFSET - vm_image_opts.ramdisk_offset, # RAMDISK_OFFSET - vm_image_opts.cmdline_cpio_offset, # CMDLINE_CPIO_OFFSET - vm_image_opts.vm_size_ext4, # VM_SIZE_EXT4 - vm_image_opts.dummy_img_size, # DUMMY_IMG_SIZE - ) - - # Generate the build config - native.genrule( + write_file( name = "{}_build_config_bazel".format(target), - srcs = [], - outs = ["build.config.msm.{}.generated".format(target)], - cmd_bash = gen_config_command, + out = "build.config.msm.{}.generated".format(target), + content = [ + 'KERNEL_DIR="msm-kernel"', + "VARIANTS=({})".format(" ".join([v.replace("-", "_") for v in vm_variants])), + "MSM_ARCH={}".format(msm_arch), + "VARIANT={}".format(variant.replace("-", "_")), + "PREFERRED_USERSPACE={}".format(vm_image_opts.preferred_usespace), + "VM_DTB_IMG_CREATE={}".format(int(vm_image_opts.vm_dtb_img_create)), + "KERNEL_OFFSET=0x%X" % vm_image_opts.kernel_offset, + "DTB_OFFSET=0x%X" % vm_image_opts.dtb_offset, + "RAMDISK_OFFSET=0x%X" % vm_image_opts.ramdisk_offset, + "CMDLINE_CPIO_OFFSET=0x%X" % vm_image_opts.cmdline_cpio_offset, + "VM_SIZE_EXT4={}".format(vm_image_opts.vm_size_ext4), + "DUMMY_IMG_SIZE={}".format(vm_image_opts.dummy_img_size), + "", # Needed for newline at end of file + ], ) top_level_config = define_top_level_config(target)