build: Initial bazel support for gen4auto targets

Add the changes required to build gen4auto targets via
bazel build system.

Change-Id: I5a2ecc0c7f5d7dbab831790219dd5d1c1e89ecd8
Signed-off-by: Sankalp Negi <quic_snegi@quicinc.com>
This commit is contained in:
Sankalp Negi 2023-05-04 02:38:55 -07:00
parent 9744e6576e
commit 0bef7129bf
7 changed files with 378 additions and 1 deletions

25
build.config.msm.auto Normal file
View File

@ -0,0 +1,25 @@
################################################################################
# boot image macros
BUILD_BOOT_IMG=1
# Common MSM configuration for building non-GKI-based kernels
DEFCONFIG="generic_auto_defconfig"
function build_defconfig_fragments() {
if [[ "${VARIANT}" =~ ^(perf_defconfig|debug_defconfig)$ ]]; then
apply_defconfig_fragment ${KERNEL_DIR}/arch/${ARCH}/configs/vendor/${MSM_ARCH}.config vendor/${MSM_ARCH}_defconfig
if [ "${VARIANT}" = perf_defconfig ]; then
return
fi
apply_defconfig_fragment ${KERNEL_DIR}/arch/${ARCH}/configs/vendor/${MSM_ARCH}_debug.config vendor/${MSM_ARCH}-debug_defconfig
else
echo "Variant '${VARIANT}' unsupported"
exit 1
fi
}
build_defconfig_fragments

35
build.config.msm.gen4auto Normal file
View File

@ -0,0 +1,35 @@
################################################################################
## Inheriting configs from ACK
. ${ROOT_DIR}/common/build.config.common
. ${ROOT_DIR}/common/build.config.aarch64
################################################################################
## Variant setup
MSM_ARCH=gen4auto
VARIANTS=(perf_defconfig debug_defconfig)
[ -z "${VARIANT}" ] && VARIANT=debug_defconfig
if [ -e "${ROOT_DIR}/msm-kernel" -a "${KERNEL_DIR}" = "common" ]; then
KERNEL_DIR="msm-kernel"
fi
ABL_SRC=bootable/bootloader/edk2
BOOT_IMAGE_HEADER_VERSION=2
BASE_ADDRESS=0x80000000
PAGE_SIZE=4096
DTB_IMG_CREATE=1
SKIP_VENDOR_BOOT=1
PREFERRED_USERSPACE=le
TRIM_UNUSED_MODULES=1
TARGET_HAS_SEPARATE_RD=1
[ -z "${DT_OVERLAY_SUPPORT}" ] && DT_OVERLAY_SUPPORT=1
if [ "${KERNEL_CMDLINE_CONSOLE_AUTO}" != "0" ]; then
KERNEL_CMDLINE+=' console=ttyMSM0,115200n8 earlycon=qcom_geni,0xa8c000 qcom_geni_serial.con_enabled=1 loglevel=8 '
fi
################################################################################
## Inheriting MSM configs
. ${KERNEL_DIR}/build.config.msm.common
. ${KERNEL_DIR}/build.config.msm.auto

View File

@ -6,3 +6,4 @@ build.config.msm.kalama.vm
build.config.msm.pineapple.allyes build.config.msm.pineapple.allyes
build.config.msm.blair build.config.msm.blair
build.config.msm.gen3auto build.config.msm.gen3auto
build.config.msm.gen4auto

24
gen4auto.bzl Normal file
View File

@ -0,0 +1,24 @@
load(":target_variants.bzl", "qx_variants")
load(":msm_kernel_qx.bzl", "define_msm_qx")
load(":image_opts.bzl", "boot_image_opts")
target_name = "gen4auto"
def define_gen4auto():
_gen4auto_qx_in_tree_modules = [
# keep sorted
]
for variant in qx_variants:
mod_list = _gen4auto_qx_in_tree_modules
define_msm_qx(
msm_target = target_name,
variant = variant,
defconfig = "build.config.msm.auto",
in_tree_module_list = mod_list,
boot_image_opts = boot_image_opts(
boot_image_header_version = 2,
base_address = 0x80000000,
page_size = 4096),
)

276
msm_kernel_qx.bzl Normal file
View File

@ -0,0 +1,276 @@
load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
load("//build/bazel_common_rules/test_mappings:test_mappings.bzl", "test_mappings_dist")
load("//build/kernel/kleaf:constants.bzl", "aarch64_outs")
load(
"//build/kernel/kleaf:kernel.bzl",
"kernel_build",
"kernel_build_config",
"kernel_compile_commands",
"kernel_images",
"kernel_modules_install",
"merged_kernel_uapi_headers",
)
load(
"//build:msm_kernel_extensions.bzl",
"define_extras",
"get_build_config_fragments",
"get_dtb_list",
"get_dtbo_list",
"get_dtstree",
"get_vendor_ramdisk_binaries",
)
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")
load(":image_opts.bzl", "boot_image_opts")
load(":target_variants.bzl", "qx_variants")
def _define_build_config(
msm_target,
target,
variant,
defconfig,
boot_image_opts = boot_image_opts(),
build_config_fragments = []):
"""Creates a kernel_build_config for an MSM target
Creates a `kernel_build_config` for input to a `kernel_build` rule.
Args:
msm_target: name of target platform (e.g. "kalama")
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=qx
BUILD_BOOT_IMG=1
SKIP_UNPACKING_RAMDISK=1
BUILD_INITRAMFS=1
[ -z "$${DT_OVERLAY_SUPPORT}" ] && DT_OVERLAY_SUPPORT=1
KERNEL_VENDOR_CMDLINE+=' console=hvc0 earlycon=hvc0 hvc_dcc.enable=1 loglevel=8 nokaslr printk.devkmsg=on root=/dev/ram0 rw rootwait'
EOF
""" % (
" ".join([v.replace("-", "_") for v in qx_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(
name = "{}_build_config_bazel".format(target),
srcs = [],
outs = ["build.config.msm.{}.generated".format(target)],
cmd_bash = gen_config_command,
)
top_level_config = define_top_level_config(target)
common_config = gen_config_without_source_lines("build.config.common", target)
# Concatenate build config fragments to form the final config
kernel_build_config(
name = "{}_build_config".format(target),
srcs = [
# do not sort
top_level_config,
"build.config.constants",
common_config,
"build.config.aarch64",
":{}_build_config_bazel".format(target),
] + [fragment for fragment in build_config_fragments] + [
"build.config.msm.common",
defconfig,
],
)
def _define_kernel_build(
target,
in_tree_module_list,
dtb_list,
dtbo_list,
dtstree):
"""Creates a `kernel_build` and other associated definitions
This is where the main kernel build target is created (e.g. `//msm-kernel:kalama_gki`).
Many other rules will take this `kernel_build` as an input.
Args:
target: name of main Bazel target (e.g. `kalama_gki`)
in_tree_module_list: list of in-tree modules
dtb_list: device tree blobs expected to be built
dtbo_list: device tree overlay blobs expected to be built
"""
out_list = [".config", "Module.symvers"]
if dtb_list:
out_list += dtb_list
if dtbo_list:
out_list += dtbo_list
# Add basic kernel outputs
out_list += aarch64_outs
# LE builds don't build compressed, so remove from list
out_list.remove("Image.lz4")
out_list.remove("Image.gz")
kernel_build(
name = target,
module_outs = in_tree_module_list,
outs = out_list,
build_config = ":{}_build_config".format(target),
dtstree = dtstree,
kmi_symbol_list = None,
additional_kmi_symbol_lists = None,
abi_definition = None,
visibility = ["//visibility:public"],
)
kernel_modules_install(
name = "{}_modules_install".format(target),
kernel_build = ":{}".format(target),
)
merged_kernel_uapi_headers(
name = "{}_merged_kernel_uapi_headers".format(target),
kernel_build = ":{}".format(target),
)
kernel_compile_commands(
name = "{}_compile_commands".format(target),
kernel_build = ":{}".format(target),
)
def _define_kernel_dist(target, msm_target, variant):
"""Creates distribution targets for kernel builds
When Bazel builds everything, the outputs end up buried in `bazel-bin`.
These rules are used to copy the build artifacts to `out/msm-kernel-<target>/dist/`
with proper permissions, etc.
Args:
target: name of main Bazel target (e.g. `kalama_gki`)
"""
dist_dir = get_out_dir(msm_target, variant) + "/dist"
qx_target = msm_target.split("-")[0];
msm_dist_targets = [
# do not sort
":{}".format(target),
":{}_images".format(target),
":{}_merged_kernel_uapi_headers".format(target),
":{}_build_config".format(target),
]
copy_to_dist_dir(
name = "{}_dist".format(target),
data = msm_dist_targets,
dist_dir = dist_dir,
flat = True,
wipe_dist_dir = True,
allow_duplicate_filenames = True,
mode_overrides = {
# do not sort
"**/*.elf": "755",
"**/vmlinux": "755",
"**/Image": "755",
"**/*.dtb*": "755",
"**/LinuxLoader*": "755",
"**/*": "644",
},
log = "info",
)
native.alias(
name = "{}_test_mapping".format(target),
actual = ":{}_dist".format(target),
)
test_mappings_dist(
name = "{}_test_mapping_dist".format(target),
dist_dir = dist_dir,
)
def define_msm_qx(
msm_target,
variant,
defconfig,
in_tree_module_list,
boot_image_opts = boot_image_opts()):
"""Top-level kernel build definition macro for an MSM platform
Args:
msm_target: name of target platform (e.g. "gen4auto")
variant: variant of kernel to build (e.g. "perf-defconfig")
in_tree_module_list: list of in-tree modules
boot_image_header_version: boot image header version (for `boot.img`)
base_address: edk2 base address
page_size: kernel page size
super_image_size: size of super image partition
lz4_ramdisk: whether to use an lz4-compressed ramdisk
"""
if not variant in qx_variants:
fail("{} not defined in target_variants.bzl qx_variants!".format(variant))
# Enforce format of "//msm-kernel:target-foo_variant-bar" (underscore is the delimeter
# between target and variant)
target = msm_target.replace("_", "-") + "_" + variant.replace("_", "-")
qx_target = msm_target.split("-")[0];
dtb_list = get_dtb_list(qx_target)
dtbo_list = get_dtbo_list(qx_target)
dtstree = get_dtstree(qx_target)
vendor_ramdisk_binaries = ["//prebuilts/qcom_boot_artifacts:le-initrd.gz"]
build_config_fragments = get_build_config_fragments(qx_target)
_define_build_config(
qx_target,
target,
variant,
defconfig,
boot_image_opts = boot_image_opts,
build_config_fragments = build_config_fragments,
)
_define_kernel_build(
target,
in_tree_module_list,
dtb_list,
dtbo_list,
dtstree,
)
kernel_images(
name = "{}_images".format(target),
kernel_modules_install = ":{}_modules_install".format(target),
kernel_build = ":{}".format(target),
build_boot = True,
build_dtbo = True if dtbo_list else False,
build_initramfs = True,
dtbo_srcs = [":{}/".format(target) + d for d in dtbo_list] if dtbo_list else None,
vendor_ramdisk_binaries = vendor_ramdisk_binaries,
boot_image_outs = ["boot.img"],
)
_define_kernel_dist(target, msm_target, variant)
define_abl_dist(target, msm_target, variant)
define_dtc_dist(target, msm_target, variant)

View File

@ -1,5 +1,6 @@
load(":gen3auto.bzl", "define_gen3auto") load(":gen3auto.bzl", "define_gen3auto")
load(":autogvm.bzl", "define_autogvm") load(":autogvm.bzl", "define_autogvm")
load(":gen4auto.bzl", "define_gen4auto")
load(":pineapple.bzl", "define_pineapple") load(":pineapple.bzl", "define_pineapple")
load(":pineapple_tuivm.bzl", "define_pineapple_tuivm") load(":pineapple_tuivm.bzl", "define_pineapple_tuivm")
load(":pineapple_oemvm.bzl", "define_pineapple_oemvm") load(":pineapple_oemvm.bzl", "define_pineapple_oemvm")
@ -14,6 +15,7 @@ def define_msm_platforms():
define_signing_keys() define_signing_keys()
define_gen3auto() define_gen3auto()
define_autogvm() define_autogvm()
define_gen4auto()
define_pineapple() define_pineapple()
define_pineapple_tuivm() define_pineapple_tuivm()
define_pineapple_oemvm() define_pineapple_oemvm()

View File

@ -12,6 +12,17 @@ la_variants = [
"gki", "gki",
] ]
qx_variants = [
# keep sorted
"debug-defconfig",
"perf-defconfig",
]
qx_targets = [
# keep sorted
"gen4auto",
]
le_targets = [ le_targets = [
# keep sorted # keep sorted
"pineapple-allyes", "pineapple-allyes",
@ -45,8 +56,11 @@ def get_all_la_variants():
def get_all_le_variants(): def get_all_le_variants():
return [(t, v) for t in le_targets for v in le_variants] return [(t, v) for t in le_targets for v in le_variants]
def get_all_qx_variants():
return [(t, v) for t in qx_targets for v in qx_variants]
def get_all_vm_variants(): def get_all_vm_variants():
return [(t, v) for t in vm_targets for v in vm_variants] return [(t, v) for t in vm_targets for v in vm_variants]
def get_all_variants(): def get_all_variants():
return get_all_la_variants() + get_all_le_variants() + get_all_vm_variants() return get_all_la_variants() + get_all_le_variants() + get_all_qx_variants() + get_all_vm_variants()