diff --git a/BUILD.bazel b/BUILD.bazel index ea0f1c18692b..895a683cfee5 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -17,9 +17,12 @@ package( ], ) -load("//build/kernel/kleaf:common_kernels.bzl", "define_common_kernels", "define_db845c") +load(":msm_platforms.bzl", "define_msm_platforms") +define_msm_platforms() -define_common_kernels(target_configs = { +load("//build/kernel/kleaf:common_kernels.bzl", "define_common_kernels", "define_db845c") +load("@kernel_toolchain_info//:dict.bzl", "BRANCH") +define_common_kernels(branch = BRANCH, target_configs = { "kernel_aarch64": { "module_implicit_outs": [ "drivers/block/zram/zram.ko", diff --git a/BUILD.dtc b/BUILD.dtc new file mode 100644 index 000000000000..5503b13a49a1 --- /dev/null +++ b/BUILD.dtc @@ -0,0 +1,148 @@ +cc_library( + name = "libfdt", + copts = [ + "-Werror", + "-Wno-macro-redefined", + "-Wno-sign-compare", + ], + includes = ["libfdt"], + srcs = glob([ + "libfdt/*.h", + "libfdt/*.c", + ]), + visibility = ["//visibility:public"], +) + +copts = [ + "-Wall", + "-Werror", + "-Wno-sign-compare", + "-Wno-missing-field-initializers", + "-Wno-unused-parameter", +] + +genrule( + name = "lexer", + srcs = ["dtc-lexer.l"], + outs = ["dtc-lexer.lex.c"], + cmd = "lex -o$@ $(location dtc-lexer.l)" +) + +genrule( + name = "parser", + srcs = ["dtc-parser.y"], + outs = ["dtc-parser.tab.c", "dtc-parser.tab.h"], + cmd = """ + bison -b dtc-parser -d $(location dtc-parser.y) + cp ./*.tab.c $(location dtc-parser.tab.c) + cp ./*.tab.h $(location dtc-parser.tab.h) + """, +) + +cc_library( + name = "dtc_gen", + copts = copts, + srcs = [ + ":lexer", + ":parser", + ] + glob(["*.h"]), + includes = ["."], + visibility = ["//visibility:public"], +) + +cc_binary( + name = "dtc", + copts = copts, + defines = ["NO_YAML"], + srcs = [ + "checks.c", + "data.c", + "dtc.c", + "flattree.c", + "fstree.c", + "livetree.c", + "srcpos.c", + "treesource.c", + "util.c", + ] + glob(["*.h"]), + includes = ["."], + deps = [":libfdt", ":dtc_gen"], + visibility = ["//visibility:public"], +) + +cc_binary( + name = "fdtget", + copts = copts, + defines = ["NO_YAML"], + srcs = [ + "fdtget.c", + "util.c", + "util.h", + "version_non_gen.h", + ], + deps = [":libfdt"], + visibility = ["//visibility:public"], +) + +cc_binary( + name = "fdtput", + copts = copts, + defines = ["NO_YAML"], + srcs = [ + "fdtput.c", + "util.c", + "util.h", + "version_non_gen.h", + ], + deps = [":libfdt"], + visibility = ["//visibility:public"], +) + +cc_binary( + name = "fdtdump", + copts = copts, + defines = ["NO_YAML"], + srcs = [ + "fdtdump.c", + "util.c", + "util.h", + "version_non_gen.h", + ], + deps = [":libfdt"], + visibility = ["//visibility:public"], +) + +cc_binary( + name = "fdtoverlay", + copts = copts, + defines = ["NO_YAML"], + srcs = [ + "fdtoverlay.c", + "util.c", + "util.h", + "version_non_gen.h", + ], + deps = [":libfdt"], + visibility = ["//visibility:public"], +) + +cc_binary( + name = "fdtoverlaymerge", + copts = copts, + defines = ["NO_YAML"], + srcs = [ + "fdtoverlaymerge.c", + "util.c", + "util.h", + "version_non_gen.h", + ], + deps = [":libfdt"], + visibility = ["//visibility:public"], +) + +exports_files([ + "libfdt/fdt.h", + "libfdt/libfdt.h", + "libfdt/libfdt_env.h", +]) + diff --git a/build.config.msm.common b/build.config.msm.common index 615d23ee6bf6..9c042efc5663 100644 --- a/build.config.msm.common +++ b/build.config.msm.common @@ -19,6 +19,10 @@ CONFIG_TARGET=msm.${MSM_ARCH} function compile_external_dtc() { ( OUT_DIR=${COMMON_OUT_DIR}/external/dtc + if [ ! -d "$OUT_DIR" ]; then + return + fi + [ "${SKIP_MRPROPER}" != "1" ] && rm -rf ${OUT_DIR} cd ${ROOT_DIR}/external/dtc DTC_MAKE_ARGS=("CC=${HOSTCC}" "AR=${AR}") diff --git a/kalama.bzl b/kalama.bzl new file mode 100644 index 000000000000..8fb730318cc0 --- /dev/null +++ b/kalama.bzl @@ -0,0 +1,115 @@ +load(":target_variants.bzl", "targets", "variants") +load(":msm_kernel.bzl", "define_msm") + +target_name = "kalama" + +def define_kalama(): + _kalama_in_tree_modules = [ + # keep sorted + "arch/arm64/gunyah/gh_arm_drv.ko", + "drivers/clk/qcom/camcc-kalama.ko", + "drivers/clk/qcom/clk-dummy.ko", + "drivers/clk/qcom/clk-qcom.ko", + "drivers/clk/qcom/clk-rpmh.ko", + "drivers/clk/qcom/debugcc-kalama.ko", + "drivers/clk/qcom/dispcc-kalama.ko", + "drivers/clk/qcom/gcc-kalama.ko", + "drivers/clk/qcom/gdsc-regulator.ko", + "drivers/clk/qcom/gpucc-kalama.ko", + "drivers/clk/qcom/tcsrcc-kalama.ko", + "drivers/clk/qcom/videocc-kalama.ko", + "drivers/cpufreq/qcom-cpufreq-hw.ko", + "drivers/cpufreq/qcom-cpufreq-hw-debug.ko", + "drivers/cpuidle/governors/qcom_lpm.ko", + "drivers/dma-buf/heaps/qcom_dma_heaps.ko", + "drivers/firmware/qcom-scm.ko", + "drivers/hwspinlock/qcom_hwspinlock.ko", + "drivers/interconnect/icc-test.ko", + "drivers/interconnect/qcom/icc-bcm-voter.ko", + "drivers/interconnect/qcom/icc-debug.ko", + "drivers/interconnect/qcom/icc-rpmh.ko", + "drivers/interconnect/qcom/qnoc-kalama.ko", + "drivers/interconnect/qcom/qnoc-qos.ko", + "drivers/iommu/arm/arm-smmu/arm_smmu.ko", + "drivers/iommu/msm_dma_iommu_mapping.ko", + "drivers/iommu/qcom_iommu_util.ko", + "drivers/irqchip/qcom-pdc.ko", + "drivers/mailbox/qcom-ipcc.ko", + "drivers/mfd/qcom-spmi-pmic.ko", + "drivers/phy/qualcomm/phy-qcom-ufs.ko", + "drivers/phy/qualcomm/phy-qcom-ufs-qmp-v4-kalama.ko", + "drivers/pinctrl/qcom/pinctrl-kalama.ko", + "drivers/pinctrl/qcom/pinctrl-msm.ko", + "drivers/power/reset/qcom-dload-mode.ko", + "drivers/power/reset/qcom-reboot-reason.ko", + "drivers/regulator/debug-regulator.ko", + "drivers/regulator/proxy-consumer.ko", + "drivers/regulator/qti-fixed-regulator.ko", + "drivers/regulator/rpmh-regulator.ko", + "drivers/regulator/stub-regulator.ko", + "drivers/soc/qcom/boot_stats.ko", + "drivers/soc/qcom/cmd-db.ko", + "drivers/soc/qcom/eud.ko", + "drivers/soc/qcom/llcc-qcom.ko", + "drivers/soc/qcom/llcc_perfmon.ko", + "drivers/soc/qcom/mdt_loader.ko", + "drivers/soc/qcom/mem_buf/mem_buf.ko", + "drivers/soc/qcom/mem_buf/mem_buf_dev.ko", + "drivers/soc/qcom/msm_performance.ko", + "drivers/soc/qcom/qcom_aoss.ko", + "drivers/soc/qcom/qcom_rpmh.ko", + "drivers/soc/qcom/qcom_wdt_core.ko", + "drivers/soc/qcom/secure_buffer.ko", + "drivers/soc/qcom/smem.ko", + "drivers/soc/qcom/smp2p.ko", + "drivers/soc/qcom/smp2p_sleepstate.ko", + "drivers/soc/qcom/socinfo.ko", + "drivers/spmi/spmi-pmic-arb.ko", + "drivers/tty/hvc/hvc_gunyah.ko", + "drivers/ufs/host/ufs_qcom.ko", + "drivers/usb/dwc3/dwc3-msm.ko", + "drivers/usb/gadget/function/usb_f_ccid.ko", + "drivers/usb/gadget/function/usb_f_cdev.ko", + "drivers/usb/gadget/function/usb_f_qdss.ko", + "drivers/usb/phy/phy-generic.ko", + "drivers/usb/phy/phy-msm-snps-eusb2.ko", + "drivers/usb/phy/phy-msm-snps-hs.ko", + "drivers/usb/phy/phy-msm-ssusb-qmp.ko", + "drivers/usb/repeater/repeater.ko", + "drivers/usb/repeater/repeater-qti-pmic-eusb2.ko", + "drivers/virt/gunyah/gh_ctrl.ko", + "drivers/virt/gunyah/gh_dbl.ko", + "drivers/virt/gunyah/gh_irq_lend.ko", + "drivers/virt/gunyah/gh_mem_notifier.ko", + "drivers/virt/gunyah/gh_msgq.ko", + "drivers/virt/gunyah/gh_rm_drv.ko", + "drivers/virt/gunyah/gh_virt_wdt.ko", + "drivers/virt/gunyah/gunyah.ko", + "kernel/trace/qcom_ipc_logging.ko", + ] + + _kalama_consolidate_in_tree_modules = _kalama_in_tree_modules + [ + ] + + # Modules built but not copied to dist directory + _kalama_module_implicit_outs = [ + # keep sorted + "drivers/block/zram/zram.ko", + "mm/zsmalloc.ko", + ] + + if not target_name in targets: + fail("{} not defined in target_variants.bzl".format(target_name)) + + for variant in variants: + if variant == "consolidate": + mod_list = _kalama_consolidate_in_tree_modules + else: + mod_list = _kalama_in_tree_modules + + define_msm( + msm_target = target_name, + variant = variant, + in_tree_module_list = mod_list, + implicit_out_list = _kalama_module_implicit_outs, + ) diff --git a/msm_kernel.bzl b/msm_kernel.bzl new file mode 100644 index 000000000000..9879575533b2 --- /dev/null +++ b/msm_kernel.bzl @@ -0,0 +1,449 @@ +load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir") +load( + "//build/kernel/kleaf:kernel.bzl", + "kernel_build_abi", + "kernel_build_abi_dist", + "kernel_build_config", + "kernel_compile_commands", + "kernel_images", + "kernel_modules_install", + "merged_kernel_uapi_headers", +) +load( + "//build/bazel_extensions:msm_kernel_extensions.bzl", + "define_extras", + "get_build_config_fragments", + "get_dtb_list", + "get_dtbo_list", + "get_dtstree", + "get_vendor_ramdisk_binaries", +) +load(":super_image.bzl", "super_image") + +def define_build_config( + msm_target, + target, + variant, + boot_image_header_version, + base_address, + page_size, + super_image_size, + lz4_ramdisk, + 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") + """ + + # Remove sourcing lines from build config since we're just concatenating fragments below + native.genrule( + name = "{}_build_config_common_without_source".format(target), + srcs = ["build.config.common"], + outs = ["{}_build.config.common.generated".format(target)], + cmd_bash = "sed -e '/^\\. /d' $(location build.config.common) > $@", + ) + + # Generate the build config + native.genrule( + name = "{}_build_config_bazel".format(target), + srcs = [], + outs = ["build.config.msm.{}.generated".format(target)], + cmd_bash = """ + cat << 'EOF' > $@ +KERNEL_DIR="msm-kernel" +VARIANTS=(consolidate gki) +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+=' console=ttyMSM0,115200n8 earlycon=qcom_geni,0x00a9C000 qcom_geni_serial.con_enabled=1 ' +fi + +KERNEL_VENDOR_CMDLINE+=' bootconfig ' +VENDOR_BOOTCONFIG+='androidboot.first_stage_console=1 androidboot.hardware=qcom_kp' +EOF + """ % ( + msm_target, + variant, + boot_image_header_version, + base_address, + page_size, + super_image_size, + int(lz4_ramdisk) + ), + ) + + # Concatenate build config fragments to form the final config + kernel_build_config( + name = "{}_build_config".format(target), + srcs = [ + # do not sort + "build.config.constants", + ":{}_build_config_common_without_source".format(target), + "build.config.aarch64", + ":{}_build_config_bazel".format(target), + ] + [fragment for fragment in build_config_fragments] + [ + "build.config.msm.common", + "build.config.msm.gki", + ], + ) + +def define_kernel_build( + target, + base_kernel, + in_tree_module_list, + implicit_out_list, + dtb_list, + dtbo_list, + dtstree, + define_abi_targets, + define_compile_commands, + kmi_enforced): + """Creates a `kernel_build_abi` 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_abi` as an input. + + Args: + target: name of main Bazel target (e.g. `kalama_gki`) + base_kernel: base kernel to pass into `kernel_build` (e.g. `//common:kernel_aarch64`) + 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 + define_abi_targets: boolean determining if ABI targets should be defined + define_compile_commands: boolean determining if `compile_commands.json` should be generated + kmi_enforced: boolean determining if the KMI contract should be enforced + """ + out_list = [".config", "Module.symvers"] + if dtb_list: + out_list += dtb_list + if dtbo_list: + out_list += dtbo_list + + kernel_build_abi( + name = target, + module_outs = in_tree_module_list, + module_implicit_outs = implicit_out_list, + outs = out_list, + build_config = ":{}_build_config".format(target), + dtstree = dtstree, + base_kernel = base_kernel, + kmi_symbol_list = "//msm-kernel:android/abi_gki_aarch64_qcom" if define_abi_targets else None, + kmi_enforced = kmi_enforced, + additional_kmi_symbol_lists = ["{}_all_kmi_symbol_lists".format(base_kernel)] if define_abi_targets else None, + define_abi_targets = define_abi_targets, + abi_definition = "//msm-kernel:android/abi_gki_aarch64.xml" if define_abi_targets else None, + enable_interceptor = define_compile_commands, + 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), + ) + + if define_compile_commands: + kernel_compile_commands( + name = "{}_compile_commands".format(target), + kernel_build = ":{}".format(target), + ) + +def define_image_build( + target, + msm_target, + base_kernel, + build_boot = True, + build_dtbo = False, + build_initramfs = False, + build_vendor_boot = False, + build_vendor_kernel_boot = False, + build_vendor_dlkm = True, + build_system_dlkm = True, + boot_image_outs = None, + dtbo_list = [], + vendor_ramdisk_binaries = None): + """Creates a `kernel_images` target which will generate bootable device images + + Args: + target: name of main Bazel target (e.g. `kalama_gki`) + msm_target: name of target platform (e.g. "kalama") + base_kernel: kernel_build base kernel + build_boot: whether to build a boot image + build_dtbo: whether to build a dtbo image + build_initramfs: whether to build an initramfs image + build_vendor_boot: whether to build a vendor boot image + build_vendor_kernel_boot: whether to build a vendor kernel boot image + build_vendor_dlkm: whether to build a vendor dlkm image + build_system_dlkm: whether to build a system dlkm image + boot_image_outs: boot image outputs, + dtbo_list: list of device tree overlay blobs to be built into `dtbo.img` + vendor_ramdisk_binaries: ramdisk binaries (cpio archives) + """ + kernel_images( + name = "{}_images".format(target), + kernel_modules_install = ":{}_modules_install".format(target), + kernel_build = ":{}".format(target), + base_kernel_images = "{}_images".format(base_kernel), + build_boot = build_boot, + build_dtbo = build_dtbo, + build_initramfs = build_initramfs, + build_vendor_boot = build_vendor_boot, + build_vendor_kernel_boot = build_vendor_kernel_boot, + build_vendor_dlkm = build_vendor_dlkm, + build_system_dlkm = build_system_dlkm, + modules_list = "modules.list.msm.{}".format(msm_target), + vendor_dlkm_modules_blocklist = "modules.vendor_blocklist.msm.{}".format(msm_target), + 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_image_outs, + deps = [ + "modules.list.msm.{}".format(msm_target), + "modules.vendor_blocklist.msm.{}".format(msm_target), + ], + ) + + # Defined separately because `super.img` is not generated by upstream kleaf + super_image( + name = "{}_super_image".format(target), + kernel_modules_install = "{}_modules_install".format(target), + deps = [ + ":{}_images_system_dlkm_image".format(target), + ":{}_images_vendor_dlkm_image".format(target), + ], + ) + +def define_kernel_dist(target, base_kernel): + """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-/dist/` + with proper permissions, etc. + + Args: + target: name of main Bazel target (e.g. `kalama_gki`) + base_kernel: base kernel to fetch artifacts from (e.g. `//common:kernel_aarch64`) + """ + msm_dist_targets = [ + # do not sort + base_kernel, + "{}_headers".format(base_kernel), + ":{}".format(target), + ":{}_images".format(target), + ":{}_super_image".format(target), + ":{}_merged_kernel_uapi_headers".format(target), + ":{}_build_config".format(target), + ] + + kernel_build_abi_dist( + name = "{}_abi_dist".format(target), + kernel_build_abi = ":{}".format(target), + data = msm_dist_targets, + dist_dir = "out/{}/dist".format(target), + flat = True, + log = "info", + ) + + copy_to_dist_dir( + name = "{}_dist".format(target), + data = msm_dist_targets, + dist_dir = "out/msm-kernel-{}/dist".format(target.replace("_", "-")), + 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", + ) + +def define_dtc_dist(target): + """Create rules distribution target for device tree compiler and associated tools + + Args: + target: name of main Bazel target (e.g. `kalama_gki`) + """ + dtc_bin_targets = [ + "@dtc//:dtc", + "@dtc//:fdtget", + "@dtc//:fdtput", + "@dtc//:fdtdump", + "@dtc//:fdtoverlay", + "@dtc//:fdtoverlaymerge", + ] + dtc_lib_targets = [ + "@dtc//:dtc_gen", + "@dtc//:libfdt", + ] + dtc_inc_targets = [ + "@dtc//:libfdt/fdt.h", + "@dtc//:libfdt/libfdt.h", + "@dtc//:libfdt/libfdt_env.h", + ] + + dtc_tar_cmd = "mkdir -p bin lib include\n" + for label in dtc_bin_targets: + dtc_tar_cmd += "cp $(locations {}) bin/\n".format(label) + for label in dtc_lib_targets: + dtc_tar_cmd += "cp $(locations {}) lib/\n".format(label) + for label in dtc_inc_targets: + dtc_tar_cmd += "cp $(locations {}) include/\n".format(label) + dtc_tar_cmd += """ + chmod 755 bin/* lib/* + chmod 644 include/* + tar -czf "$@" bin lib include + """ + + native.genrule( + name = "{}_dtc_tarball".format(target), + srcs = dtc_bin_targets + dtc_lib_targets + dtc_inc_targets, + outs = ["{}_dtc.tar.gz".format(target)], + cmd = dtc_tar_cmd, + ) + + native.alias( + name = "{}_dtc".format(target), + actual = ":{}_dtc_tarball".format(target), + ) + + copy_to_dist_dir( + name = "{}_dtc_dist".format(target), + archives = [":{}_dtc_tarball".format(target)], + dist_dir = "out/msm-kernel-{}/host".format(target.replace("_", "-")), + flat = True, + wipe_dist_dir = True, + log = "info", + ) + +def define_abl_dist(target): + """Creates ABL distribution target + + Args: + target: name of main Bazel target (e.g. `kalama_gki`) + """ + native.alias( + name = "{}_abl".format(target), + actual = "//bootable/bootloader/edk2:{}_abl".format(target), + ) + + copy_to_dist_dir( + name = "{}_abl_dist".format(target), + archives = ["{}_abl".format(target)], + dist_dir = "out/msm-kernel-{}/dist".format(target.replace("_", "-")), + flat = True, + wipe_dist_dir = False, + log = "info", + ) + +def define_msm( + msm_target, + variant, + in_tree_module_list, + implicit_out_list = [], + define_compile_commands = False, + kmi_enforced = True, + boot_image_header_version = 4, + base_address = 0x80000000, + page_size = 4096, + super_image_size = 0x10000000, + lz4_ramdisk = True): + """Top-level kernel build definition macro for an MSM platform + + Args: + msm_target: name of target platform (e.g. "kalama") + variant: variant of kernel to build (e.g. "gki") + in_tree_module_list: list of in-tree modules + implicit_out_list: list of in-tree modules which are not copied to the dist directory + define_compile_commands: boolean determining if `compile_commands.json` should be generated + kmi_enforced: boolean determining if the KMI contract should be enforced + 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 + """ + target = msm_target + "_" + variant + + if variant == "consolidate": + base_kernel = "//common:kernel_aarch64_consolidate" + define_abi_targets = False + else: + base_kernel = "//common:kernel_aarch64" + define_abi_targets = True + + dtb_list = get_dtb_list(msm_target) + dtbo_list = get_dtbo_list(msm_target) + dtstree = get_dtstree(msm_target) + vendor_ramdisk_binaries = get_vendor_ramdisk_binaries(msm_target) + build_config_fragments = get_build_config_fragments(msm_target) + + define_build_config( + msm_target, + target, + variant, + boot_image_header_version, + base_address, + page_size, + super_image_size, + lz4_ramdisk, + build_config_fragments, + ) + + define_kernel_build( + target, + base_kernel, + in_tree_module_list, + implicit_out_list, + dtb_list, + dtbo_list, + dtstree, + define_abi_targets, + define_compile_commands, + kmi_enforced, + ) + + define_image_build( + target, + msm_target, + base_kernel, + build_boot = True, + build_dtbo = True if dtbo_list else False, + build_initramfs = True if vendor_ramdisk_binaries else False, + build_vendor_boot = True if dtbo_list else False, + dtbo_list = dtbo_list, + vendor_ramdisk_binaries = vendor_ramdisk_binaries, + boot_image_outs = None if dtb_list else ["boot.img"], + ) + + define_kernel_dist(target, base_kernel) + + define_abl_dist(target) + + define_dtc_dist(target) + + define_extras(target) diff --git a/msm_kernel_extensions.bzl b/msm_kernel_extensions.bzl new file mode 100644 index 000000000000..47fc57527b9e --- /dev/null +++ b/msm_kernel_extensions.bzl @@ -0,0 +1,17 @@ +def define_extras(target): + return + +def get_build_config_fragments(target): + return [] + +def get_dtb_list(target): + return None + +def get_dtbo_list(target): + return None + +def get_dtstree(target): + return None + +def get_vendor_ramdisk_binaries(target): + return None diff --git a/msm_platforms.bzl b/msm_platforms.bzl new file mode 100644 index 000000000000..3e03c2e5419a --- /dev/null +++ b/msm_platforms.bzl @@ -0,0 +1,6 @@ +load(":kalama.bzl", "define_kalama") +load(":pineapple.bzl", "define_pineapple") + +def define_msm_platforms(): + define_kalama() + define_pineapple() diff --git a/pineapple.bzl b/pineapple.bzl new file mode 100644 index 000000000000..2efea01bcbf8 --- /dev/null +++ b/pineapple.bzl @@ -0,0 +1,199 @@ +load(":target_variants.bzl", "targets", "variants") +load(":msm_kernel.bzl", "define_msm") + +target_name = "pineapple" + +def define_pineapple(): + _pineapple_in_tree_modules = [ + # keep sorted + "arch/arm64/gunyah/gh_arm_drv.ko", + "drivers/clk/qcom/camcc-pineapple.ko", + "drivers/clk/qcom/clk-dummy.ko", + "drivers/clk/qcom/clk-qcom.ko", + "drivers/clk/qcom/clk-rpmh.ko", + "drivers/clk/qcom/debugcc-pineapple.ko", + "drivers/clk/qcom/dispcc-pineapple.ko", + "drivers/clk/qcom/gcc-pineapple.ko", + "drivers/clk/qcom/gdsc-regulator.ko", + "drivers/clk/qcom/gpucc-pineapple.ko", + "drivers/clk/qcom/tcsrcc-pineapple.ko", + "drivers/clk/qcom/videocc-pineapple.ko", + "drivers/cpufreq/qcom-cpufreq-hw.ko", + "drivers/cpufreq/qcom-cpufreq-hw-debug.ko", + "drivers/cpuidle/governors/qcom_lpm.ko", + "drivers/dma-buf/heaps/qcom_dma_heaps.ko", + "drivers/dma/qcom/msm_gpi.ko", + "drivers/firmware/qcom-scm.ko", + "drivers/hwspinlock/qcom_hwspinlock.ko", + "drivers/hwtracing/coresight/coresight.ko", + "drivers/hwtracing/coresight/coresight-csr.ko", + "drivers/hwtracing/coresight/coresight-cti.ko", + "drivers/hwtracing/coresight/coresight-dummy.ko", + "drivers/hwtracing/coresight/coresight-funnel.ko", + "drivers/hwtracing/coresight/coresight-hwevent.ko", + "drivers/hwtracing/coresight/coresight-remote-etm.ko", + "drivers/hwtracing/coresight/coresight-replicator.ko", + "drivers/hwtracing/coresight/coresight-stm.ko", + "drivers/hwtracing/coresight/coresight-tgu.ko", + "drivers/hwtracing/coresight/coresight-tmc.ko", + "drivers/hwtracing/coresight/coresight-tpda.ko", + "drivers/hwtracing/coresight/coresight-tpdm.ko", + "drivers/hwtracing/coresight/coresight-trace-noc.ko", + "drivers/hwtracing/stm/stm_console.ko", + "drivers/hwtracing/stm/stm_core.ko", + "drivers/hwtracing/stm/stm_ftrace.ko", + "drivers/hwtracing/stm/stm_p_ost.ko", + "drivers/i2c/busses/i2c-msm-geni.ko", + "drivers/i3c/master/i3c-master-msm-geni.ko", + "drivers/input/misc/pm8941-pwrkey.ko", + "drivers/input/misc/qcom-hv-haptics.ko", + "drivers/interconnect/icc-test.ko", + "drivers/interconnect/qcom/icc-bcm-voter.ko", + "drivers/interconnect/qcom/icc-debug.ko", + "drivers/interconnect/qcom/icc-rpmh.ko", + "drivers/interconnect/qcom/qnoc-pineapple.ko", + "drivers/interconnect/qcom/qnoc-qos.ko", + "drivers/iommu/arm/arm-smmu/arm_smmu.ko", + "drivers/iommu/msm_dma_iommu_mapping.ko", + "drivers/iommu/qcom_iommu_debug.ko", + "drivers/iommu/qcom_iommu_util.ko", + "drivers/irqchip/msm_show_resume_irq.ko", + "drivers/irqchip/qcom-pdc.ko", + "drivers/leds/leds-qti-flash.ko", + "drivers/leds/leds-qti-tri-led.ko", + "drivers/mailbox/msm_qmp.ko", + "drivers/mailbox/qcom-ipcc.ko", + "drivers/mfd/qcom-spmi-pmic.ko", + "drivers/nvmem/nvmem_qcom-spmi-sdam.ko", + "drivers/pci/controller/pci-msm-drv.ko", + "drivers/perf/qcom_llcc_pmu.ko", + "drivers/phy/qualcomm/phy-qcom-ufs.ko", + "drivers/phy/qualcomm/phy-qcom-ufs-qmp-v4-kalama.ko", + "drivers/phy/qualcomm/phy-qcom-ufs-qrbtc-sdm845.ko", + "drivers/pinctrl/qcom/pinctrl-msm.ko", + "drivers/pinctrl/qcom/pinctrl-pineapple.ko", + "drivers/pinctrl/qcom/pinctrl-spmi-gpio.ko", + "drivers/pinctrl/qcom/pinctrl-spmi-mpp.ko", + "drivers/power/reset/qcom-pon.ko", + "drivers/power/reset/qcom-reboot-reason.ko", + "drivers/power/reset/reboot-mode.ko", + "drivers/power/supply/qti_battery_charger.ko", + "drivers/pwm/pwm-qti-lpg.ko", + "drivers/regulator/debug-regulator.ko", + "drivers/regulator/proxy-consumer.ko", + "drivers/regulator/qti-fixed-regulator.ko", + "drivers/regulator/rpmh-regulator.ko", + "drivers/regulator/stub-regulator.ko", + "drivers/remoteproc/qcom_pil_info.ko", + "drivers/remoteproc/qcom_q6v5.ko", + "drivers/remoteproc/qcom_q6v5_pas.ko", + "drivers/remoteproc/qcom_spss.ko", + "drivers/remoteproc/rproc_qcom_common.ko", + "drivers/rpmsg/qcom_glink.ko", + "drivers/rpmsg/qcom_glink_smem.ko", + "drivers/rpmsg/qcom_glink_spss.ko", + "drivers/rpmsg/qcom_smd.ko", + "drivers/rtc/rtc-pm8xxx.ko", + "drivers/slimbus/slim-qcom-ngd-ctrl.ko", + "drivers/slimbus/slimbus.ko", + "drivers/soc/qcom/altmode-glink.ko", + "drivers/soc/qcom/boot_stats.ko", + "drivers/soc/qcom/charger-ulog-glink.ko", + "drivers/soc/qcom/cmd-db.ko", + "drivers/soc/qcom/core_hang_detect.ko", + "drivers/soc/qcom/cpucp_log.ko", + "drivers/soc/qcom/crm.ko", + "drivers/soc/qcom/dcc_v2.ko", + "drivers/soc/qcom/dcvs/bwmon.ko", + "drivers/soc/qcom/dcvs/dcvs_fp.ko", + "drivers/soc/qcom/dcvs/memlat.ko", + "drivers/soc/qcom/dcvs/qcom-dcvs.ko", + "drivers/soc/qcom/dcvs/qcom-pmu-lib.ko", + "drivers/soc/qcom/llcc-qcom.ko", + "drivers/soc/qcom/llcc_perfmon.ko", + "drivers/soc/qcom/mdt_loader.ko", + "drivers/soc/qcom/mem_buf/mem_buf.ko", + "drivers/soc/qcom/mem_buf/mem_buf_dev.ko", + "drivers/soc/qcom/mem_buf/mem_buf_msgq.ko", + "drivers/soc/qcom/memory_dump_v2.ko", + "drivers/soc/qcom/msm_performance.ko", + "drivers/soc/qcom/pdr_interface.ko", + "drivers/soc/qcom/pmic-pon-log.ko", + "drivers/soc/qcom/pmic_glink.ko", + "drivers/soc/qcom/qcom_aoss.ko", + "drivers/soc/qcom/qcom_cpucp.ko", + "drivers/soc/qcom/qcom_cpuss_sleep_stats.ko", + "drivers/soc/qcom/qcom_ramdump.ko", + "drivers/soc/qcom/qcom_rpmh.ko", + "drivers/soc/qcom/qcom_stats.ko", + "drivers/soc/qcom/qmi_helpers.ko", + "drivers/soc/qcom/qti_battery_debug.ko", + "drivers/soc/qcom/rq_stats.ko", + "drivers/soc/qcom/secure_buffer.ko", + "drivers/soc/qcom/smem.ko", + "drivers/soc/qcom/smp2p.ko", + "drivers/soc/qcom/smp2p_sleepstate.ko", + "drivers/soc/qcom/socinfo.ko", + "drivers/soc/qcom/sys_pm_vx.ko", + "drivers/spi/spi-msm-geni.ko", + "drivers/spmi/spmi-glink-debug.ko", + "drivers/spmi/spmi-pmic-arb.ko", + "drivers/tty/hvc/hvc_gunyah.ko", + "drivers/tty/serial/msm_geni_serial.ko", + "drivers/ufs/host/ufs_qcom.ko", + "drivers/usb/dwc3/dwc3-msm.ko", + "drivers/usb/gadget/function/usb_f_ccid.ko", + "drivers/usb/gadget/function/usb_f_cdev.ko", + "drivers/usb/gadget/function/usb_f_qdss.ko", + "drivers/usb/phy/phy-generic.ko", + "drivers/usb/phy/phy-msm-snps-eusb2.ko", + "drivers/usb/phy/phy-msm-ssusb-qmp.ko", + "drivers/usb/phy/phy-qcom-emu.ko", + "drivers/usb/repeater/repeater.ko", + "drivers/usb/repeater/repeater-qti-pmic-eusb2.ko", + "drivers/usb/typec/ucsi/ucsi_glink.ko", + "drivers/virt/gunyah/gh_ctrl.ko", + "drivers/virt/gunyah/gh_dbl.ko", + "drivers/virt/gunyah/gh_irq_lend.ko", + "drivers/virt/gunyah/gh_mem_notifier.ko", + "drivers/virt/gunyah/gh_msgq.ko", + "drivers/virt/gunyah/gh_rm_drv.ko", + "drivers/virt/gunyah/gunyah.ko", + "kernel/trace/qcom_ipc_logging.ko", + "net/qrtr/qrtr.ko", + "net/qrtr/qrtr-smd.ko", + ] + + _pineapple_consolidate_in_tree_modules = _pineapple_in_tree_modules + [ + # keep sorted + "drivers/hwtracing/coresight/coresight-etm4x.ko", + "drivers/misc/lkdtm/lkdtm.ko", + "kernel/locking/locktorture.ko", + "kernel/rcu/rcutorture.ko", + "kernel/torture.ko", + "lib/atomic64_test.ko", + "lib/test_user_copy.ko", + ] + + # Modules built but not copied to dist directory + _pineapple_module_implicit_outs = [ + # keep sorted + "drivers/block/zram/zram.ko", + "mm/zsmalloc.ko", + ] + + if not target_name in targets: + fail("{} not defined in target_variants.bzl".format(target_name)) + + for variant in variants: + if variant == "consolidate": + mod_list = _pineapple_consolidate_in_tree_modules + else: + mod_list = _pineapple_in_tree_modules + + define_msm( + msm_target = target_name, + variant = variant, + in_tree_module_list = mod_list, + implicit_out_list = _pineapple_module_implicit_outs, + ) diff --git a/super_image.bzl b/super_image.bzl new file mode 100644 index 000000000000..1bfe37ad769a --- /dev/null +++ b/super_image.bzl @@ -0,0 +1,61 @@ +load("//build/kernel/kleaf/impl:image/image_utils.bzl", "image_utils") + +def _super_image_impl(ctx): + super_img = ctx.actions.declare_file("{}/super.img".format(ctx.label.name)) + super_img_size = ctx.attr.super_img_size + super_unsparsed_img = ctx.actions.declare_file("{}/super_unsparsed.img".format(ctx.label.name)) + staging_dir = super_img.dirname + "/staging" + + # Create a s bash array of input images + super_img_contents = "(" + for dep in ctx.attr.deps: + for f in dep.files.to_list(): + if f.extension == "img": + super_img_contents += f.path + " " + super_img_contents += ")" + + command = """ + # Build super + ( + SUPER_IMAGE_CONTENTS={super_img_contents} + SUPER_IMAGE_SIZE={super_img_size} + build_super + ) + # Move output files into place + mv "${{DIST_DIR}}/super.img" {super_img} + mv "${{DIST_DIR}}/super_unsparsed.img" {super_unsparsed_img} + """.format( + super_img = super_img.path, + super_img_size = super_img_size, + super_unsparsed_img = super_unsparsed_img.path, + super_img_contents = super_img_contents, + ) + + return image_utils.build_modules_image_impl_common( + ctx = ctx, + what = "super", + outputs = [super_img, super_unsparsed_img], + build_command = command, + modules_staging_dir = staging_dir, + mnemonic = "SuperImage", + ) + +super_image = rule( + implementation = _super_image_impl, + doc = """Build super image. + +Execute `build_super` in `build_utils.sh`. + +When included in a `copy_to_dist_dir` rule, this rule copies a `super.img` to `DIST_DIR`. +""", + attrs = image_utils.build_modules_image_attrs_common({ + "deps": attr.label_list( + allow_files = True, + mandatory = True, + ), + "super_img_size": attr.int( + default = 0x10000000, + doc = "Size of super.img", + ), + }), +) diff --git a/target_variants.bzl b/target_variants.bzl new file mode 100644 index 000000000000..15b5f0dd3c6d --- /dev/null +++ b/target_variants.bzl @@ -0,0 +1,14 @@ +targets = [ + # keep sorted + "kalama", + "pineapple", +] + +variants = [ + # keep sorted + "consolidate", + "gki", +] + +def get_all_variants(): + return [(t, v) for t in targets for v in variants]