From 52e66a3dac02e7096c07c532881f16f807068ef4 Mon Sep 17 00:00:00 2001
From: "qinglin.li" <qinglin.li@amlogic.com>
Date: Thu, 20 Apr 2023 17:56:06 +0800
Subject: [PATCH] Revert "Remove build.sh."

This reverts commit 670b2ff547c0739352a200422e4e8a7149145947.

Change-Id: Ifcb58e40904c910794a21f1a894a71a71be6293b
Signed-off-by: qinglin.li <qinglin.li@amlogic.com>
---
 build.sh | 1084 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 1084 insertions(+)
 create mode 100755 build.sh

diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..018f3a4
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,1084 @@
+#!/bin/bash
+
+# Copyright (C) 2019 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Usage:
+#   build/build.sh <make options>*
+# or:
+#   To define custom out and dist directories:
+#     OUT_DIR=<out dir> DIST_DIR=<dist dir> build/build.sh <make options>*
+#   To use a custom build config:
+#     BUILD_CONFIG=<path to the build.config> <make options>*
+#
+# Examples:
+#   To define custom out and dist directories:
+#     OUT_DIR=output DIST_DIR=dist build/build.sh -j24 V=1
+#   To use a custom build config:
+#     BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh -j24 V=1
+#
+# The following environment variables are considered during execution:
+#
+#   BUILD_CONFIG
+#     Build config file to initialize the build environment from. The location
+#     is to be defined relative to the repo root directory.
+#     Defaults to 'build.config'.
+#
+#   BUILD_CONFIG_FRAGMENTS
+#     A whitespace-separated list of additional build config fragments to be
+#     sourced after the main build config file. Typically used for sanitizers or
+#     other special builds.
+#
+#   FAST_BUILD
+#     If defined, trade run-time optimizations for build speed. In other words,
+#     if given a choice between a faster build and a run-time optimization,
+#     choose the shorter build time. For example, use ThinLTO for faster
+#     linking and reduce the lz4 compression level to speed up ramdisk
+#     compression. This trade-off is desirable for incremental kernel
+#     development where fast turnaround times are critical for productivity.
+#
+#   OUT_DIR
+#     Base output directory for the kernel build.
+#     Defaults to <REPO_ROOT>/out/<BRANCH>.
+#
+#   DIST_DIR
+#     Base output directory for the kernel distribution.
+#     Defaults to <OUT_DIR>/dist
+#
+#   MAKE_GOALS
+#     List of targets passed to Make when compiling the kernel.
+#     Typically: Image, modules, and a DTB (if applicable).
+#
+#   EXT_MODULES
+#     Space separated list of external kernel modules to be build.
+#
+#   EXT_MODULES_MAKEFILE
+#     Location of a makefile to build external modules. If set, it will get
+#     called with all the necessary parameters to build and install external
+#     modules.  This allows for building them in parallel using makefile
+#     parallelization.
+#
+#   KCONFIG_EXT_PREFIX
+#     Path prefix relative to either ROOT_DIR or KERNEL_DIR that points to
+#     a directory containing an external Kconfig file named Kconfig.ext. When
+#     set, kbuild will source ${KCONFIG_EXT_PREFIX}Kconfig.ext which can be
+#     used to set configs for external modules in the defconfig.
+#
+#   UNSTRIPPED_MODULES
+#     Space separated list of modules to be copied to <DIST_DIR>/unstripped
+#     for debugging purposes.
+#
+#   COMPRESS_UNSTRIPPED_MODULES
+#     If set to "1", then compress the unstripped modules into a tarball.
+#
+#   COMPRESS_MODULES
+#     If set to "1", then compress all modules into a tarball. The default
+#     is without defining COMPRESS_MODULES.
+#
+#   LD
+#     Override linker (flags) to be used.
+#
+#   HERMETIC_TOOLCHAIN
+#     When set, the PATH during kernel build will be restricted to a set of
+#     known prebuilt directories and selected host tools that are usually not
+#     provided by prebuilt toolchains.
+#
+#  ADDITIONAL_HOST_TOOLS
+#     A whitespace separated set of tools that will be allowed to be used from
+#     the host when running the build with HERMETIC_TOOLCHAIN=1.
+#
+#   ABI_DEFINITION
+#     Location of the abi definition file relative to <REPO_ROOT>/KERNEL_DIR
+#     If defined (usually in build.config), also copy that abi definition to
+#     <OUT_DIR>/dist/abi.xml when creating the distribution.
+#
+#   KMI_SYMBOL_LIST
+#     Location of the main KMI symbol list file relative to
+#     <REPO_ROOT>/KERNEL_DIR If defined (usually in build.config), also copy
+#     that symbol list definition to <OUT_DIR>/dist/abi_symbollist when
+#     creating the distribution.
+#
+#   ADDITIONAL_KMI_SYMBOL_LISTS
+#     Location of secondary KMI symbol list files relative to
+#     <REPO_ROOT>/KERNEL_DIR. If defined, these additional symbol lists will be
+#     appended to the main one before proceeding to the distribution creation.
+#
+#   KMI_ENFORCED
+#     This is an indicative option to signal that KMI is enforced in this build
+#     config. If set to "1", downstream KMI checking tools might respect it and
+#     react to it by failing if KMI differences are detected.
+#
+#   GENERATE_VMLINUX_BTF
+#     If set to "1", generate a vmlinux.btf that is stripped of any debug
+#     symbols, but contains type and symbol information within a .BTF section.
+#     This is suitable for ABI analysis through BTF.
+#
+# Environment variables to influence the stages of the kernel build.
+#
+#   SKIP_MRPROPER
+#     if set to "1", skip `make mrproper`
+#
+#   SKIP_DEFCONFIG
+#     if set to "1", skip `make defconfig`
+#
+#   SKIP_IF_VERSION_MATCHES
+#     if defined, skip compiling anything if the kernel version in vmlinux
+#     matches the expected kernel version. This is useful for mixed build, where
+#     GKI kernel does not change frequently and we can simply skip everything
+#     in build.sh. Note: if the expected version string contains "dirty", then
+#     this flag would have not cause build.sh to exit early.
+#
+#   PRE_DEFCONFIG_CMDS
+#     Command evaluated before `make defconfig`
+#
+#   POST_DEFCONFIG_CMDS
+#     Command evaluated after `make defconfig` and before `make`.
+#
+#   POST_KERNEL_BUILD_CMDS
+#     Command evaluated after `make`.
+#
+#   LTO=[full|thin|none]
+#     If set to "full", force any kernel with LTO_CLANG support to be built
+#     with full LTO, which is the most optimized method. This is the default,
+#     but can result in very slow build times, especially when building
+#     incrementally. (This mode does not require CFI to be disabled.)
+#     If set to "thin", force any kernel with LTO_CLANG support to be built
+#     with ThinLTO, which trades off some optimizations for incremental build
+#     speed. This is nearly always what you want for local development. (This
+#     mode does not require CFI to be disabled.)
+#     If set to "none", force any kernel with LTO_CLANG support to be built
+#     without any LTO (upstream default), which results in no optimizations
+#     and also disables LTO-dependent features like CFI. This mode is not
+#     recommended because CFI will not be able to catch bugs if it is
+#     disabled.
+#
+#   TAGS_CONFIG
+#     if defined, calls ./scripts/tags.sh utility with TAGS_CONFIG as argument
+#     and exit once tags have been generated
+#
+#   IN_KERNEL_MODULES
+#     if defined, install kernel modules
+#
+#   SKIP_EXT_MODULES
+#     if defined, skip building and installing of external modules
+#
+#   DO_NOT_STRIP_MODULES
+#     if set to "1", keep debug information for distributed modules.
+#     Note, modules will still be stripped when copied into the ramdisk.
+#
+#   EXTRA_CMDS
+#     Command evaluated after building and installing kernel and modules.
+#
+#   DIST_CMDS
+#     Command evaluated after copying files to DIST_DIR
+#
+#   SKIP_CP_KERNEL_HDR
+#     if defined, skip installing kernel headers.
+#
+#   BUILD_BOOT_IMG
+#     if defined, build a boot.img binary that can be flashed into the 'boot'
+#     partition of an Android device. The boot image contains a header as per the
+#     format defined by https://source.android.com/devices/bootloader/boot-image-header
+#     followed by several components like kernel, ramdisk, DTB etc. The ramdisk
+#     component comprises of a GKI ramdisk cpio archive concatenated with a
+#     vendor ramdisk cpio archive which is then gzipped. It is expected that
+#     all components are present in ${DIST_DIR}.
+#
+#     When the BUILD_BOOT_IMG flag is defined, the following flags that point to the
+#     various components needed to build a boot.img also need to be defined.
+#     - MKBOOTIMG_PATH=<path to the mkbootimg.py script which builds boot.img>
+#       (defaults to tools/mkbootimg/mkbootimg.py)
+#     - GKI_RAMDISK_PREBUILT_BINARY=<Name of the GKI ramdisk prebuilt which includes
+#       the generic ramdisk components like init and the non-device-specific rc files>
+#     - VENDOR_RAMDISK_BINARY=<Space separated list of vendor ramdisk binaries
+#        which includes the device-specific components of ramdisk like the fstab
+#        file and the device-specific rc files. If specifying multiple vendor ramdisks
+#        and identical file paths exist in the ramdisks, the file from last ramdisk is used.>
+#     - KERNEL_BINARY=<name of kernel binary, eg. Image.lz4, Image.gz etc>
+#     - BOOT_IMAGE_HEADER_VERSION=<version of the boot image header>
+#       (defaults to 3)
+#     - BOOT_IMAGE_FILENAME=<name of the output file>
+#       (defaults to "boot.img")
+#     - KERNEL_CMDLINE=<string of kernel parameters for boot>
+#     - KERNEL_VENDOR_CMDLINE=<string of kernel parameters for vendor boot image,
+#       vendor_boot when BOOT_IMAGE_HEADER_VERSION >= 3; boot otherwise>
+#     - VENDOR_FSTAB=<Path to the vendor fstab to be included in the vendor
+#       ramdisk>
+#     - TAGS_OFFSET=<physical address for kernel tags>
+#     - RAMDISK_OFFSET=<ramdisk physical load address>
+#     If the BOOT_IMAGE_HEADER_VERSION is less than 3, two additional variables must
+#     be defined:
+#     - BASE_ADDRESS=<base address to load the kernel at>
+#     - PAGE_SIZE=<flash page size>
+#     If BOOT_IMAGE_HEADER_VERSION >= 3, a vendor_boot image will be built
+#     unless SKIP_VENDOR_BOOT is defined. A vendor_boot will also be generated if
+#     BUILD_VENDOR_BOOT_IMG is set.
+#
+#     BUILD_VENDOR_BOOT_IMG is incompatible with SKIP_VENDOR_BOOT, and is effectively a
+#     nop if BUILD_BOOT_IMG is set.
+#     - MODULES_LIST=<file to list of modules> list of modules to use for
+#       vendor_boot.modules.load. If this property is not set, then the default
+#       modules.load is used.
+#     - TRIM_UNUSED_MODULES. If set, then modules not mentioned in
+#       modules.load are removed from initramfs. If MODULES_LIST is unset, then
+#       having this variable set effectively becomes a no-op.
+#     - MODULES_BLOCKLIST=<modules.blocklist file> A list of modules which are
+#       blocked from being loaded. This file is copied directly to staging directory,
+#       and should be in the format:
+#       blocklist module_name
+#     - MKBOOTIMG_EXTRA_ARGS=<space-delimited mkbootimg arguments>
+#       Refer to: ./mkbootimg.py --help
+#     If BOOT_IMAGE_HEADER_VERSION >= 4, the following variable can be defined:
+#     - VENDOR_BOOTCONFIG=<string of bootconfig parameters>
+#     - INITRAMFS_VENDOR_RAMDISK_FRAGMENT_NAME=<name of the ramdisk fragment>
+#       If BUILD_INITRAMFS is specified, then build the .ko and depmod files as
+#       a standalone vendor ramdisk fragment named as the given string.
+#     - INITRAMFS_VENDOR_RAMDISK_FRAGMENT_MKBOOTIMG_ARGS=<mkbootimg arguments>
+#       Refer to: https://source.android.com/devices/bootloader/partitions/vendor-boot-partitions#mkbootimg-arguments
+#
+#   VENDOR_RAMDISK_CMDS
+#     When building vendor boot image, VENDOR_RAMDISK_CMDS enables the build
+#     config file to specify command(s) for further altering the prebuilt vendor
+#     ramdisk binary. For example, the build config file could add firmware files
+#     on the vendor ramdisk (lib/firmware) for testing purposes.
+#
+#   SKIP_UNPACKING_RAMDISK
+#     If set, skip unpacking the vendor ramdisk and copy it as is, without
+#     modifications, into the boot image. Also skip the mkbootfs step.
+#
+#   AVB_SIGN_BOOT_IMG
+#     if defined, sign the boot image using the AVB_BOOT_KEY. Refer to
+#     https://android.googlesource.com/platform/external/avb/+/master/README.md
+#     for details on what Android Verified Boot is and how it works. The kernel
+#     prebuilt tool `avbtool` is used for signing.
+#
+#     When AVB_SIGN_BOOT_IMG is defined, the following flags need to be
+#     defined:
+#     - AVB_BOOT_PARTITION_SIZE=<size of the boot partition in bytes>
+#     - AVB_BOOT_KEY=<absolute path to the key used for signing> The Android test
+#       key has been uploaded to the kernel/prebuilts/build-tools project here:
+#       https://android.googlesource.com/kernel/prebuilts/build-tools/+/refs/heads/master/linux-x86/share/avb
+#     - AVB_BOOT_ALGORITHM=<AVB_BOOT_KEY algorithm used> e.g. SHA256_RSA2048. For the
+#       full list of supported algorithms, refer to the enum AvbAlgorithmType in
+#       https://android.googlesource.com/platform/external/avb/+/refs/heads/master/libavb/avb_crypto.h
+#     - AVB_BOOT_PARTITION_NAME=<name of the boot partition>
+#       (defaults to BOOT_IMAGE_FILENAME without extension; by default, "boot")
+#
+#   BUILD_INITRAMFS
+#     if set to "1", build a ramdisk containing all .ko files and resulting
+#     depmod artifacts
+#
+#   BUILD_SYSTEM_DLKM
+#     if set to "1", build a system_dlkm.img containing all signed GKI modules
+#     and resulting depmod artifacts. GKI build exclusive; DO NOT USE with device
+#     build configs files.
+#
+#   SYSTEM_DLKM_MODULES_LIST
+#     location (relative to the repo root directory) of an optional file
+#     containing the list of kernel modules which shall be copied into a
+#     system_dlkm partition image.
+#
+#   MODULES_OPTIONS
+#     A /lib/modules/modules.options file is created on the ramdisk containing
+#     the contents of this variable, lines should be of the form: options
+#     <modulename> <param1>=<val> <param2>=<val> ...
+#
+#   MODULES_ORDER
+#     location of an optional file containing the list of modules that are
+#     expected to be built for the current configuration, in the modules.order
+#     format, relative to the kernel source tree.
+#
+#   GKI_MODULES_LIST
+#     location of an optional file containing the list of GKI modules, relative
+#     to the kernel source tree. This should be set in downstream builds to
+#     ensure the ABI tooling correctly differentiates vendor/OEM modules and GKI
+#     modules. This should not be set in the upstream GKI build.config.
+#
+#   VENDOR_DLKM_MODULES_LIST
+#     location (relative to the repo root directory) of an optional file
+#     containing the list of kernel modules which shall be copied into a
+#     vendor_dlkm partition image. Any modules passed into MODULES_LIST which
+#     become part of the vendor_boot.modules.load will be trimmed from the
+#     vendor_dlkm.modules.load.
+#
+#   VENDOR_DLKM_MODULES_BLOCKLIST
+#     location (relative to the repo root directory) of an optional file
+#     containing a list of modules which are blocked from being loaded. This
+#     file is copied directly to the staging directory and should be in the
+#     format: blocklist module_name
+#
+#   VENDOR_DLKM_PROPS
+#     location (relative to the repo root directory) of a text file containing
+#     the properties to be used for creation of a vendor_dlkm image
+#     (filesystem, partition size, etc). If this is not set (and
+#     VENDOR_DLKM_MODULES_LIST is), a default set of properties will be used
+#     which assumes an ext4 filesystem and a dynamic partition.
+#
+#   LZ4_RAMDISK
+#     if set to "1", any ramdisks generated will be lz4 compressed instead of
+#     gzip compressed.
+#
+#   LZ4_RAMDISK_COMPRESS_ARGS
+#     Command line arguments passed to lz4 command to control compression
+#     level (defaults to "-12 --favor-decSpeed"). For iterative kernel
+#     development where faster compression is more desirable than a high
+#     compression ratio, it can be useful to control the compression ratio.
+#
+#   TRIM_NONLISTED_KMI
+#     if set to "1", enable the CONFIG_UNUSED_KSYMS_WHITELIST kernel config
+#     option to un-export from the build any un-used and non-symbol-listed
+#     (as per KMI_SYMBOL_LIST) symbol.
+#
+#   KMI_SYMBOL_LIST_STRICT_MODE
+#     if set to "1", add a build-time check between the KMI_SYMBOL_LIST and the
+#     KMI resulting from the build, to ensure they match 1-1.
+#
+#   KMI_STRICT_MODE_OBJECTS
+#     optional list of objects to consider for the KMI_SYMBOL_LIST_STRICT_MODE
+#     check. Defaults to 'vmlinux'.
+#
+#   GKI_DIST_DIR
+#     optional directory from which to copy GKI artifacts into DIST_DIR
+#
+#   GKI_BUILD_CONFIG
+#     If set, builds a second set of kernel images using GKI_BUILD_CONFIG to
+#     perform a "mixed build." Mixed builds creates "GKI kernel" and "vendor
+#     modules" from two different trees. The GKI kernel tree can be the Android
+#     Common Kernel and the vendor modules tree can be a complete vendor kernel
+#     tree. GKI_DIST_DIR (above) is set and the GKI kernel's DIST output is
+#     copied to this DIST output. This allows a vendor tree kernel image to be
+#     effectively discarded and a GKI kernel Image used from an Android Common
+#     Kernel. Any variables prefixed with GKI_ are passed into into the GKI
+#     kernel's build.sh invocation.
+#
+#     This is incompatible with GKI_PREBUILTS_DIR.
+#
+#   GKI_PREBUILTS_DIR
+#     If set, copies an existing set of GKI kernel binaries to the DIST_DIR to
+#     perform a "mixed build," as with GKI_BUILD_CONFIG. This allows you to
+#     skip the additional compilation, if interested.
+#
+#     This is incompatible with GKI_BUILD_CONFIG.
+#
+#     The following must be present:
+#       vmlinux
+#       System.map
+#       vmlinux.symvers
+#       modules.builtin
+#       modules.builtin.modinfo
+#       Image.lz4
+#
+#   BUILD_DTBO_IMG
+#     if defined, package a dtbo.img using the provided *.dtbo files. The image
+#     will be created under the DIST_DIR.
+#
+#     The following flags control how the dtbo image is packaged.
+#     MKDTIMG_DTBOS=<list of *.dtbo files> used to package the dtbo.img. The
+#     *.dtbo files should be compiled by kbuild via the "make dtbs" command or
+#     by adding each *.dtbo to the MAKE_GOALS.
+#     MKDTIMG_FLAGS=<list of flags> to be passed to mkdtimg.
+#
+#   DTS_EXT_DIR
+#     Set this variable to compile an out-of-tree device tree. The value of
+#     this variable is set to the kbuild variable "dtstree" which is used to
+#     compile the device tree, it will be used to lookup files in FILES as well.
+#     If this is set, then it's likely the dt-bindings are out-of-tree as well.
+#     So be sure to set DTC_INCLUDE in the BUILD_CONFIG file to the include path
+#     containing the dt-bindings.
+#
+#     Update the MAKE_GOALS variable and the FILES variable to specify
+#     the target dtb files with the path under ${DTS_EXT_DIR}, so that they
+#     could be compiled and copied to the dist directory. Like the following:
+#         DTS_EXT_DIR=common-modules/virtual-device
+#         MAKE_GOALS="${MAKE_GOALS} k3399-rock-pi-4b.dtb"
+#         FILES="${FILES} rk3399-rock-pi-4b.dtb"
+#     where the dts file path is
+#     common-modules/virtual-device/rk3399-rock-pi-4b.dts
+#
+#   BUILD_VENDOR_KERNEL_BOOT
+#     if set to "1", build a vendor_kernel_boot for kernel artifacts, such as kernel modules.
+#     Since we design this partition to isolate kernel artifacts from vendor_boot image,
+#     vendor_boot would not be repack and built if we set this property to "1".
+#
+#   BUILD_GKI_CERTIFICATION_TOOLS
+#     if set to "1", build a gki_certification_tools.tar.gz, which contains
+#     the utilities used to certify GKI boot-*.img files.
+#
+#   BUILD_GKI_ARTIFACTS
+#     if defined when $ARCH is arm64, build a boot-img.tar.gz archive that
+#     contains several GKI boot-*.img files with different kernel compression
+#     format. Each boot image contains a boot header v4 as per the format
+#     defined by https://source.android.com/devices/bootloader/boot-image-header
+#     , followed by a kernel (no ramdisk). The kernel binaries are from
+#     ${DIST_DIR}, e.g., Image, Image.gz, Image.lz4, etc. Individual
+#     boot-*.img files are also generated, e.g., boot.img, boot-gz.img and
+#     boot-lz4.img. It is expected that all components are present in
+#     ${DIST_DIR}.
+#
+#     if defined when $ARCH is x86_64, build a boot.img with the kernel image,
+#     bzImage under ${DIST_DIR}. Additionally, create an archive boot-img.tar.gz
+#     containing boot.img.
+#
+#     if defined when $ARCH is neither arm64 nor x86_64, print an error message
+#     then exist the build process.
+#
+#     When the BUILD_GKI_ARTIFACTS flag is defined, the following flags also
+#     need to be defined.
+#     - MKBOOTIMG_PATH=<path to the mkbootimg.py script which builds boot.img>
+#       (defaults to tools/mkbootimg/mkbootimg.py)
+#     - BUILD_GKI_BOOT_IMG_SIZE=<The size of the boot.img to build>
+#       This is required, and the file ${DIST_DIR}/Image must exist.
+#     - BUILD_GKI_BOOT_IMG_GZ_SIZE=<The size of the boot-gz.img to build>
+#       This is required only when ${DIST_DIR}/Image.gz is present.
+#     - BUILD_GKI_BOOT_IMG_LZ4_SIZE=<The size of the boot-lz4.img to build>
+#       This is required only when ${DIST_DIR}/Image.lz4 is present.
+#     - BUILD_GKI_BOOT_IMG_<COMPRESSION>_SIZE=<The size of the
+#       boot-${compression}.img to build> This is required
+#       only when ${DIST_DIR}/Image.${compression} is present.
+
+# Note: For historic reasons, internally, OUT_DIR will be copied into
+# COMMON_OUT_DIR, and OUT_DIR will be then set to
+# ${COMMON_OUT_DIR}/${KERNEL_DIR}. This has been done to accommodate existing
+# build.config files that expect ${OUT_DIR} to point to the output directory of
+# the kernel build.
+#
+# The kernel is built in ${COMMON_OUT_DIR}/${KERNEL_DIR}.
+# Out-of-tree modules are built in ${COMMON_OUT_DIR}/${EXT_MOD} where
+# ${EXT_MOD} is the path to the module source code.
+
+set -e
+
+# Save environment for mixed build support.
+OLD_ENVIRONMENT=$(mktemp)
+export -p > ${OLD_ENVIRONMENT}
+
+export ROOT_DIR=$($(dirname $(readlink -f $0))/gettop.sh)
+source "${ROOT_DIR}/build/build_utils.sh"
+source "${ROOT_DIR}/build/_setup_env.sh"
+
+(
+    [[ "$KLEAF_SUPPRESS_BUILD_SH_DEPRECATION_WARNING" == "1" ]] && exit 0 || true
+    echo     "Inferring equivalent Bazel command..."
+    bazel_command_code=0
+    eq_bazel_command=$(
+        ${ROOT_DIR}/build/kernel/kleaf/convert_to_bazel.sh # error messages goes to stderr
+    ) || bazel_command_code=$?
+    echo     "*****************************************************************************" >&2
+    echo     "* WARNING: build.sh is deprecated for this branch. Please migrate to Bazel.  " >&2
+    echo     "*   See build/kernel/kleaf/README.md                                         " >&2
+    if [[ $bazel_command_code -eq 0 ]]; then
+        echo "*          Possibly equivalent Bazel command:                                " >&2
+        echo "*" >&2
+        echo "*   \$ $eq_bazel_command" >&2
+        echo "*" >&2
+    else
+        echo "WARNING: Unable to infer an equivalent Bazel command.                        " >&2
+    fi
+    echo     "* To suppress this warning, set KLEAF_SUPPRESS_BUILD_SH_DEPRECATION_WARNING=1" >&2
+    echo     "*****************************************************************************" >&2
+    echo >&2
+)
+# Suppress deprecation warning for recursive build.sh invocation with GKI_BUILD_CONFIG
+export KLEAF_SUPPRESS_BUILD_SH_DEPRECATION_WARNING=1
+
+MAKE_ARGS=( "$@" )
+export MAKEFLAGS="-j$(nproc) ${MAKEFLAGS}"
+export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
+export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private)
+export KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
+export INITRAMFS_STAGING_DIR=${MODULES_STAGING_DIR}/initramfs_staging
+export SYSTEM_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/system_dlkm_staging
+export VENDOR_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/vendor_dlkm_staging
+export MKBOOTIMG_STAGING_DIR="${MODULES_STAGING_DIR}/mkbootimg_staging"
+
+if [ -n "${SKIP_VENDOR_BOOT}" -a -n "${BUILD_VENDOR_BOOT_IMG}" ]; then
+  echo "ERROR: SKIP_VENDOR_BOOT is incompatible with BUILD_VENDOR_BOOT_IMG." >&2
+  exit 1
+fi
+
+if [ -n "${GKI_BUILD_CONFIG}" ]; then
+  if [ -n "${GKI_PREBUILTS_DIR}" ]; then
+      echo "ERROR: GKI_BUILD_CONFIG is incompatible with GKI_PREBUILTS_DIR." >&2
+      exit 1
+  fi
+
+  GKI_OUT_DIR=${GKI_OUT_DIR:-${COMMON_OUT_DIR}/gki_kernel}
+  GKI_DIST_DIR=${GKI_DIST_DIR:-${GKI_OUT_DIR}/dist}
+
+  if [[ "${MAKE_GOALS}" =~ image|Image|vmlinux ]]; then
+    echo " Compiling Image and vmlinux in device kernel is not supported in mixed build mode"
+    exit 1
+  fi
+
+  # Inherit SKIP_MRPROPER, LTO, SKIP_DEFCONFIG unless overridden by corresponding GKI_* variables
+  GKI_ENVIRON=("SKIP_MRPROPER=${SKIP_MRPROPER}" "LTO=${LTO}" "SKIP_DEFCONFIG=${SKIP_DEFCONFIG}" "SKIP_IF_VERSION_MATCHES=${SKIP_IF_VERSION_MATCHES}")
+  # Explicitly unset EXT_MODULES since they should be compiled against the device kernel
+  GKI_ENVIRON+=("EXT_MODULES=")
+  # Explicitly unset GKI_BUILD_CONFIG in case it was set by in the old environment
+  # e.g. GKI_BUILD_CONFIG=common/build.config.gki.x86 ./build/build.sh would cause
+  # gki build recursively
+  GKI_ENVIRON+=("GKI_BUILD_CONFIG=")
+  # Explicitly unset KCONFIG_EXT_PREFIX in case it was set by the older environment.
+  GKI_ENVIRON+=("KCONFIG_EXT_PREFIX=")
+  # Any variables prefixed with GKI_ get set without that prefix in the GKI build environment
+  # e.g. GKI_BUILD_CONFIG=common/build.config.gki.aarch64 -> BUILD_CONFIG=common/build.config.gki.aarch64
+  GKI_ENVIRON+=($(export -p | sed -n -E -e 's/.* GKI_([^=]+=.*)$/\1/p' | tr '\n' ' '))
+  GKI_ENVIRON+=("OUT_DIR=${GKI_OUT_DIR}")
+  GKI_ENVIRON+=("DIST_DIR=${GKI_DIST_DIR}")
+  ( env -i bash -c "source ${OLD_ENVIRONMENT}; rm -f ${OLD_ENVIRONMENT}; export ${GKI_ENVIRON[*]} ; ./build/build.sh $*" ) || exit 1
+
+  # Dist dir must have vmlinux.symvers, modules.builtin.modinfo, modules.builtin
+  MAKE_ARGS+=("KBUILD_MIXED_TREE=$(readlink -m ${GKI_DIST_DIR})")
+else
+  rm -f ${OLD_ENVIRONMENT}
+fi
+
+if [ -n "${KCONFIG_EXT_PREFIX}" ]; then
+  # Since this is a prefix, make sure it ends with "/"
+  if [[ ! "${KCONFIG_EXT_PREFIX}" =~ \/$ ]]; then
+    KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}/
+  fi
+
+  # KCONFIG_EXT_PREFIX needs to be relative to KERNEL_DIR but we allow one to set
+  # it relative to ROOT_DIR for ease of use. So figure out what was used.
+  if [ -f "${ROOT_DIR}/${KCONFIG_EXT_PREFIX}Kconfig.ext" ]; then
+    # KCONFIG_EXT_PREFIX is currently relative to ROOT_DIR. So recalculate it to be
+    # relative to KERNEL_DIR
+    KCONFIG_EXT_PREFIX=$(realpath ${ROOT_DIR}/${KCONFIG_EXT_PREFIX} --relative-to ${KERNEL_DIR})
+  elif [ ! -f "${KERNEL_DIR}/${KCONFIG_EXT_PREFIX}Kconfig.ext" ]; then
+    echo "Couldn't find the Kconfig.ext in ${KCONFIG_EXT_PREFIX}" >&2
+    exit 1
+  fi
+
+  # Since this is a prefix, make sure it ends with "/"
+  if [[ ! "${KCONFIG_EXT_PREFIX}" =~ \/$ ]]; then
+    KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}/
+  fi
+  MAKE_ARGS+=("KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}")
+fi
+
+if [ -n "${DTS_EXT_DIR}" ]; then
+  if [[ "${MAKE_GOALS}" =~ dtbs|\.dtb|\.dtbo ]]; then
+    # DTS_EXT_DIR needs to be relative to KERNEL_DIR but we allow one to set
+    # it relative to ROOT_DIR for ease of use. So figure out what was used.
+    if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
+      # DTS_EXT_DIR is currently relative to ROOT_DIR. So recalcuate it to be
+      # relative to KERNEL_DIR
+      DTS_EXT_DIR=$(realpath ${ROOT_DIR}/${DTS_EXT_DIR} --relative-to ${KERNEL_DIR})
+    elif [ ! -d "${KERNEL_DIR}/${DTS_EXT_DIR}" ]; then
+      echo "Couldn't find the dtstree -- ${DTS_EXT_DIR}" >&2
+      exit 1
+    fi
+    MAKE_ARGS+=("dtstree=${DTS_EXT_DIR}")
+  fi
+fi
+
+cd ${ROOT_DIR}
+
+if [ -n "${SKIP_IF_VERSION_MATCHES}" ]; then
+  if [ -f "${DIST_DIR}/vmlinux" ]; then
+    kernelversion="$(cd ${KERNEL_DIR} && make -s ${TOOL_ARGS} O=${OUT_DIR} kernelrelease)"
+    # Split grep into 2 steps. "Linux version" will always be towards top and fast to find. Don't
+    # need to search the entire vmlinux for it
+    if [[ ! "$kernelversion" =~ .*dirty.* ]] && \
+       grep -o -a -m1 "Linux version [^ ]* " ${DIST_DIR}/vmlinux | grep -q " ${kernelversion} " ; then
+      echo "========================================================"
+      echo " Skipping build because kernel version matches ${kernelversion}"
+      exit 0
+    fi
+  fi
+fi
+
+mkdir -p ${OUT_DIR} ${DIST_DIR}
+
+if [ -n "${GKI_PREBUILTS_DIR}" ]; then
+  echo "========================================================"
+  echo " Copying GKI prebuilts"
+  GKI_PREBUILTS_DIR=$(readlink -m ${GKI_PREBUILTS_DIR})
+  if [ ! -d "${GKI_PREBUILTS_DIR}" ]; then
+    echo "ERROR: ${GKI_PREBULTS_DIR} does not exist." >&2
+    exit 1
+  fi
+  for file in ${GKI_PREBUILTS_DIR}/*; do
+    filename=$(basename ${file})
+    if ! $(cmp -s ${file} ${DIST_DIR}/${filename}); then
+      cp -v ${file} ${DIST_DIR}/${filename}
+    fi
+  done
+  MAKE_ARGS+=("KBUILD_MIXED_TREE=${GKI_PREBUILTS_DIR}")
+fi
+
+echo "========================================================"
+echo " Setting up for build"
+if [ "${SKIP_MRPROPER}" != "1" ] ; then
+  set -x
+  (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" mrproper)
+  set +x
+fi
+
+if [ -n "${PRE_DEFCONFIG_CMDS}" ]; then
+  echo "========================================================"
+  echo " Running pre-defconfig command(s):"
+  set -x
+  eval ${PRE_DEFCONFIG_CMDS}
+  set +x
+fi
+
+if [ "${SKIP_DEFCONFIG}" != "1" ] ; then
+  set -x
+  (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
+  set +x
+
+  if [ -n "${POST_DEFCONFIG_CMDS}" ]; then
+    echo "========================================================"
+    echo " Running pre-make command(s):"
+    set -x
+    eval ${POST_DEFCONFIG_CMDS}
+    set +x
+  fi
+fi
+
+if [ "${LTO}" = "none" -o "${LTO}" = "thin" -o "${LTO}" = "full" ]; then
+  echo "========================================================"
+  echo " Modifying LTO mode to '${LTO}'"
+
+  set -x
+  if [ "${LTO}" = "none" ]; then
+    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
+      -d LTO_CLANG \
+      -e LTO_NONE \
+      -d LTO_CLANG_THIN \
+      -d LTO_CLANG_FULL \
+      -d THINLTO \
+      --set-val FRAME_WARN 0
+  elif [ "${LTO}" = "thin" ]; then
+    # This is best-effort; some kernels don't support LTO_THIN mode
+    # THINLTO was the old name for LTO_THIN, and it was 'default y'
+    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
+      -e LTO_CLANG \
+      -d LTO_NONE \
+      -e LTO_CLANG_THIN \
+      -d LTO_CLANG_FULL \
+      -e THINLTO
+  elif [ "${LTO}" = "full" ]; then
+    # THINLTO was the old name for LTO_THIN, and it was 'default y'
+    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
+      -e LTO_CLANG \
+      -d LTO_NONE \
+      -d LTO_CLANG_THIN \
+      -e LTO_CLANG_FULL \
+      -d THINLTO
+  fi
+  (cd ${OUT_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" olddefconfig)
+  set +x
+elif [ -n "${LTO}" ]; then
+  echo "LTO= must be one of 'none', 'thin' or 'full'."
+  exit 1
+fi
+
+if [ -n "${TAGS_CONFIG}" ]; then
+  echo "========================================================"
+  echo " Running tags command:"
+  set -x
+  (cd ${KERNEL_DIR} && SRCARCH=${ARCH} ./scripts/tags.sh ${TAGS_CONFIG})
+  set +x
+  exit 0
+fi
+
+# Truncate abi.prop file
+ABI_PROP=${DIST_DIR}/abi.prop
+: > ${ABI_PROP}
+
+if [ -n "${ABI_DEFINITION}" ]; then
+
+  ABI_XML=${DIST_DIR}/abi.xml
+
+  echo "KMI_DEFINITION=abi.xml" >> ${ABI_PROP}
+  echo "KMI_MONITORED=1"        >> ${ABI_PROP}
+
+  if [ "${KMI_ENFORCED}" = "1" ]; then
+    echo "KMI_ENFORCED=1" >> ${ABI_PROP}
+  fi
+fi
+
+if [ -n "${KMI_SYMBOL_LIST}" ]; then
+  ABI_SL=${DIST_DIR}/abi_symbollist
+  echo "KMI_SYMBOL_LIST=abi_symbollist" >> ${ABI_PROP}
+fi
+
+# define the kernel binary and modules archive in the $ABI_PROP
+echo "KERNEL_BINARY=vmlinux" >> ${ABI_PROP}
+if [ "${COMPRESS_UNSTRIPPED_MODULES}" = "1" ]; then
+  echo "MODULES_ARCHIVE=${UNSTRIPPED_MODULES_ARCHIVE}" >> ${ABI_PROP}
+fi
+
+# Copy the abi_${arch}.xml file from the sources into the dist dir
+if [ -n "${ABI_DEFINITION}" ]; then
+  echo "========================================================"
+  echo " Copying abi definition to ${ABI_XML}"
+  pushd $ROOT_DIR/$KERNEL_DIR
+    cp "${ABI_DEFINITION}" ${ABI_XML}
+  popd
+fi
+
+# Copy the abi symbol list file from the sources into the dist dir
+if [ -n "${KMI_SYMBOL_LIST}" ]; then
+  ${ROOT_DIR}/build/abi/process_symbols --out-dir="$DIST_DIR" --out-file=abi_symbollist \
+    --report-file=abi_symbollist.report --in-dir="$ROOT_DIR/$KERNEL_DIR" \
+    "${KMI_SYMBOL_LIST}" ${ADDITIONAL_KMI_SYMBOL_LISTS} --verbose
+  pushd $ROOT_DIR/$KERNEL_DIR
+  if [ "${TRIM_NONLISTED_KMI}" = "1" ]; then
+      # Create the raw symbol list
+      cat ${ABI_SL} | \
+              ${ROOT_DIR}/build/abi/flatten_symbol_list > \
+              ${OUT_DIR}/abi_symbollist.raw
+
+      # Update the kernel configuration
+      ./scripts/config --file ${OUT_DIR}/.config \
+              -d UNUSED_SYMBOLS -e TRIM_UNUSED_KSYMS \
+              --set-str UNUSED_KSYMS_WHITELIST ${OUT_DIR}/abi_symbollist.raw
+      (cd ${OUT_DIR} && \
+              make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" olddefconfig)
+      # Make sure the config is applied
+      grep CONFIG_UNUSED_KSYMS_WHITELIST ${OUT_DIR}/.config > /dev/null || {
+        echo "ERROR: Failed to apply TRIM_NONLISTED_KMI kernel configuration" >&2
+        echo "Does your kernel support CONFIG_UNUSED_KSYMS_WHITELIST?" >&2
+        exit 1
+      }
+
+    elif [ "${KMI_SYMBOL_LIST_STRICT_MODE}" = "1" ]; then
+      echo "ERROR: KMI_SYMBOL_LIST_STRICT_MODE requires TRIM_NONLISTED_KMI=1" >&2
+    exit 1
+  fi
+  popd # $ROOT_DIR/$KERNEL_DIR
+elif [ "${TRIM_NONLISTED_KMI}" = "1" ]; then
+  echo "ERROR: TRIM_NONLISTED_KMI requires a KMI_SYMBOL_LIST" >&2
+  exit 1
+elif [ "${KMI_SYMBOL_LIST_STRICT_MODE}" = "1" ]; then
+  echo "ERROR: KMI_SYMBOL_LIST_STRICT_MODE requires a KMI_SYMBOL_LIST" >&2
+  exit 1
+fi
+
+echo "========================================================"
+echo " Building kernel"
+
+set -x
+(cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" ${MAKE_GOALS})
+set +x
+
+if [ -n "${POST_KERNEL_BUILD_CMDS}" ]; then
+  echo "========================================================"
+  echo " Running post-kernel-build command(s):"
+  set -x
+  eval ${POST_KERNEL_BUILD_CMDS}
+  set +x
+fi
+
+if [ -n "${MODULES_ORDER}" ]; then
+  echo "========================================================"
+  echo " Checking the list of modules:"
+  if ! diff -u "${KERNEL_DIR}/${MODULES_ORDER}" "${OUT_DIR}/modules.order"; then
+    echo "ERROR: modules list out of date" >&2
+    echo "Update it with:" >&2
+    echo "cp ${OUT_DIR}/modules.order ${KERNEL_DIR}/${MODULES_ORDER}" >&2
+    exit 1
+  fi
+fi
+
+if [ "${KMI_SYMBOL_LIST_STRICT_MODE}" = "1" ]; then
+  echo "========================================================"
+  echo " Comparing the KMI and the symbol lists:"
+  set -x
+
+  gki_modules_list="${ROOT_DIR}/${KERNEL_DIR}/android/gki_system_dlkm_modules"
+  KMI_STRICT_MODE_OBJECTS="vmlinux $(sed 's/\.ko$//' ${gki_modules_list} | tr '\n' ' ')" \
+    ${ROOT_DIR}/build/abi/compare_to_symbol_list "${OUT_DIR}/Module.symvers"             \
+    "${OUT_DIR}/abi_symbollist.raw"
+  set +x
+fi
+
+rm -rf ${MODULES_STAGING_DIR}
+mkdir -p ${MODULES_STAGING_DIR}
+
+if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
+  MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
+fi
+
+if [ "${BUILD_INITRAMFS}" = "1" -o  -n "${IN_KERNEL_MODULES}" ]; then
+  echo "========================================================"
+  echo " Installing kernel modules into staging directory"
+
+  (cd ${OUT_DIR} &&                                                           \
+   make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG}                        \
+        INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
+fi
+
+if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES_MAKEFILE}" ]]; then
+  echo "========================================================"
+  echo " Building and installing external modules using ${EXT_MODULES_MAKEFILE}"
+
+  make -f "${EXT_MODULES_MAKEFILE}" KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
+          O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG}                 \
+          INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr"              \
+          INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}"
+fi
+
+if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
+  echo "========================================================"
+  echo " Building external modules and installing them into staging directory"
+
+  for EXT_MOD in ${EXT_MODULES}; do
+    # The path that we pass in via the variable M needs to be a relative path
+    # relative to the kernel source directory. The source files will then be
+    # looked for in ${KERNEL_DIR}/${EXT_MOD_REL} and the object files (i.e. .o
+    # and .ko) files will be stored in ${OUT_DIR}/${EXT_MOD_REL}. If we
+    # instead set M to an absolute path, then object (i.e. .o and .ko) files
+    # are stored in the module source directory which is not what we want.
+    EXT_MOD_REL=$(realpath ${ROOT_DIR}/${EXT_MOD} --relative-to ${KERNEL_DIR})
+    # The output directory must exist before we invoke make. Otherwise, the
+    # build system behaves horribly wrong.
+    mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
+    set -x
+    make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR}  \
+                       O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
+    make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR}  \
+                       O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG}         \
+                       INSTALL_MOD_PATH=${MODULES_STAGING_DIR}                \
+                       INSTALL_MOD_DIR="extra/${EXT_MOD}"                     \
+                       INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr"      \
+                       "${MAKE_ARGS[@]}" modules_install
+    set +x
+  done
+
+fi
+
+if [ "${BUILD_GKI_CERTIFICATION_TOOLS}" = "1"  ]; then
+  GKI_CERTIFICATION_TOOLS_TAR="gki_certification_tools.tar.gz"
+  echo "========================================================"
+  echo " Generating ${GKI_CERTIFICATION_TOOLS_TAR}"
+  GKI_CERTIFICATION_BINARIES=(avbtool certify_bootimg)
+  GKI_CERTIFICATION_TOOLS_ROOT="${ROOT_DIR}/prebuilts/kernel-build-tools/linux-x86"
+  GKI_CERTIFICATION_FILES="${GKI_CERTIFICATION_BINARIES[@]/#/bin/}"
+  tar -czf ${DIST_DIR}/${GKI_CERTIFICATION_TOOLS_TAR} \
+    -C ${GKI_CERTIFICATION_TOOLS_ROOT} ${GKI_CERTIFICATION_FILES}
+fi
+
+echo "========================================================"
+echo " Generating test_mappings.zip"
+TEST_MAPPING_FILES=${OUT_DIR}/test_mapping_files.txt
+find ${ROOT_DIR} -name TEST_MAPPING \
+  -not -path "${ROOT_DIR}/\.git*" \
+  -not -path "${ROOT_DIR}/\.repo*" \
+  -not -path "${ROOT_DIR}/out*" \
+  > ${TEST_MAPPING_FILES}
+soong_zip -o ${DIST_DIR}/test_mappings.zip -C ${ROOT_DIR} -l ${TEST_MAPPING_FILES}
+
+if [ -n "${EXTRA_CMDS}" ]; then
+  echo "========================================================"
+  echo " Running extra build command(s):"
+  set -x
+  eval ${EXTRA_CMDS}
+  set +x
+fi
+
+OVERLAYS_OUT=""
+for ODM_DIR in ${ODM_DIRS}; do
+  OVERLAY_DIR=${ROOT_DIR}/device/${ODM_DIR}/overlays
+
+  if [ -d ${OVERLAY_DIR} ]; then
+    OVERLAY_OUT_DIR=${OUT_DIR}/overlays/${ODM_DIR}
+    mkdir -p ${OVERLAY_OUT_DIR}
+    make -C ${OVERLAY_DIR} DTC=${OUT_DIR}/scripts/dtc/dtc                     \
+                           OUT_DIR=${OVERLAY_OUT_DIR} "${MAKE_ARGS[@]}"
+    OVERLAYS=$(find ${OVERLAY_OUT_DIR} -name "*.dtbo")
+    OVERLAYS_OUT="$OVERLAYS_OUT $OVERLAYS"
+  fi
+done
+
+echo "========================================================"
+echo " Copying files"
+for FILE in ${FILES}; do
+  if [ -f ${OUT_DIR}/${FILE} ]; then
+    echo "  $FILE"
+    cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
+  elif [[ "${FILE}" =~ \.dtb|\.dtbo ]]  && \
+      [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
+    # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
+    echo "  $FILE"
+    cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
+  else
+    echo "  $FILE is not a file, skipping"
+  fi
+done
+
+if [ -f ${OUT_DIR}/vmlinux-gdb.py ]; then
+  echo "========================================================"
+  KERNEL_GDB_SCRIPTS_TAR=${DIST_DIR}/kernel-gdb-scripts.tar.gz
+  echo " Copying kernel gdb scripts to $KERNEL_GDB_SCRIPTS_TAR"
+  (cd $OUT_DIR && tar -czf $KERNEL_GDB_SCRIPTS_TAR --dereference vmlinux-gdb.py scripts/gdb/linux/*.py)
+fi
+
+for FILE in ${OVERLAYS_OUT}; do
+  OVERLAY_DIST_DIR=${DIST_DIR}/$(dirname ${FILE#${OUT_DIR}/overlays/})
+  echo "  ${FILE#${OUT_DIR}/}"
+  mkdir -p ${OVERLAY_DIST_DIR}
+  cp ${FILE} ${OVERLAY_DIST_DIR}/
+done
+
+if [ -z "${SKIP_CP_KERNEL_HDR}" ]; then
+  echo "========================================================"
+  echo " Installing UAPI kernel headers:"
+  mkdir -p "${KERNEL_UAPI_HEADERS_DIR}/usr"
+  make -C ${OUT_DIR} O=${OUT_DIR} ${TOOL_ARGS}                                \
+          INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" "${MAKE_ARGS[@]}" \
+          headers_install
+  # The kernel makefiles create files named ..install.cmd and .install which
+  # are only side products. We don't want those. Let's delete them.
+  find ${KERNEL_UAPI_HEADERS_DIR} \( -name ..install.cmd -o -name .install \) -exec rm '{}' +
+  KERNEL_UAPI_HEADERS_TAR=${DIST_DIR}/kernel-uapi-headers.tar.gz
+  echo " Copying kernel UAPI headers to ${KERNEL_UAPI_HEADERS_TAR}"
+  tar -czf ${KERNEL_UAPI_HEADERS_TAR} --directory=${KERNEL_UAPI_HEADERS_DIR} usr/
+fi
+
+if [ -z "${SKIP_CP_KERNEL_HDR}" ] ; then
+  echo "========================================================"
+  KERNEL_HEADERS_TAR=${DIST_DIR}/kernel-headers.tar.gz
+  echo " Copying kernel headers to ${KERNEL_HEADERS_TAR}"
+  pushd $ROOT_DIR/$KERNEL_DIR
+    find arch include $OUT_DIR -name *.h -print0               \
+            | tar -czf $KERNEL_HEADERS_TAR                     \
+              --absolute-names                                 \
+              --dereference                                    \
+              --transform "s,.*$OUT_DIR,,"                     \
+              --transform "s,^,kernel-headers/,"               \
+              --null -T -
+  popd
+fi
+
+if [ "${GENERATE_VMLINUX_BTF}" = "1" ]; then
+  echo "========================================================"
+  echo " Generating ${DIST_DIR}/vmlinux.btf"
+
+  (
+    cd ${DIST_DIR}
+    cp -a vmlinux vmlinux.btf
+    pahole -J vmlinux.btf
+    llvm-strip --strip-debug vmlinux.btf
+  )
+
+fi
+
+if [ -n "${GKI_DIST_DIR}" ]; then
+  echo "========================================================"
+  echo " Copying files from GKI kernel"
+  cp -rv ${GKI_DIST_DIR}/* ${DIST_DIR}/
+fi
+
+if [ -n "${DIST_CMDS}" ]; then
+  echo "========================================================"
+  echo " Running extra dist command(s):"
+  # if DIST_CMDS requires UAPI headers, make sure a warning appears!
+  if [ ! -d "${KERNEL_UAPI_HEADERS_DIR}/usr" ]; then
+    echo "WARN: running without UAPI headers"
+  fi
+  set -x
+  eval ${DIST_CMDS}
+  set +x
+fi
+
+MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
+if [ -n "${MODULES}" ]; then
+  if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
+    echo "========================================================"
+    echo " Copying modules files"
+    cp -p ${MODULES} ${DIST_DIR}
+    if [ "${COMPRESS_MODULES}" = "1" ]; then
+      echo " Archiving modules to ${MODULES_ARCHIVE}"
+      tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
+    fi
+  fi
+  if [ "${BUILD_INITRAMFS}" = "1" ]; then
+    echo "========================================================"
+    echo " Creating initramfs"
+    rm -rf ${INITRAMFS_STAGING_DIR}
+    create_modules_staging "${MODULES_LIST}" ${MODULES_STAGING_DIR} \
+      ${INITRAMFS_STAGING_DIR} "${MODULES_BLOCKLIST}" "-e"
+
+    MODULES_ROOT_DIR=$(echo ${INITRAMFS_STAGING_DIR}/lib/modules/*)
+    cp ${MODULES_ROOT_DIR}/modules.load ${DIST_DIR}/modules.load
+    if [ -n "${BUILD_VENDOR_BOOT_IMG}" ]; then
+      cp ${MODULES_ROOT_DIR}/modules.load ${DIST_DIR}/vendor_boot.modules.load
+    elif [ -n "${BUILD_VENDOR_KERNEL_BOOT}" ]; then
+      cp ${MODULES_ROOT_DIR}/modules.load ${DIST_DIR}/vendor_kernel_boot.modules.load
+    fi
+    echo "${MODULES_OPTIONS}" > ${MODULES_ROOT_DIR}/modules.options
+
+    mkbootfs "${INITRAMFS_STAGING_DIR}" >"${MODULES_STAGING_DIR}/initramfs.cpio"
+    ${RAMDISK_COMPRESS} "${MODULES_STAGING_DIR}/initramfs.cpio" >"${DIST_DIR}/initramfs.img"
+  fi
+fi
+
+if [ "${BUILD_SYSTEM_DLKM}" = "1"  ]; then
+  build_system_dlkm
+fi
+
+if [ -n "${VENDOR_DLKM_MODULES_LIST}" ]; then
+  build_vendor_dlkm
+fi
+
+if [ -n "${UNSTRIPPED_MODULES}" ]; then
+  echo "========================================================"
+  echo " Copying unstripped module files for debugging purposes (not loaded on device)"
+  mkdir -p ${UNSTRIPPED_DIR}
+  for MODULE in ${UNSTRIPPED_MODULES}; do
+    find ${MODULES_PRIVATE_DIR} -name ${MODULE} -exec cp {} ${UNSTRIPPED_DIR} \;
+  done
+  if [ "${COMPRESS_UNSTRIPPED_MODULES}" = "1" ]; then
+    tar -czf ${DIST_DIR}/${UNSTRIPPED_MODULES_ARCHIVE} -C $(dirname ${UNSTRIPPED_DIR}) $(basename ${UNSTRIPPED_DIR})
+    rm -rf ${UNSTRIPPED_DIR}
+  fi
+fi
+
+[ -n "${GKI_MODULES_LIST}" ] && cp ${ROOT_DIR}/${KERNEL_DIR}/${GKI_MODULES_LIST} ${DIST_DIR}/
+
+echo "========================================================"
+echo " Files copied to ${DIST_DIR}"
+
+if [ -n "${BUILD_BOOT_IMG}" -o -n "${BUILD_VENDOR_BOOT_IMG}" \
+      -o -n "${BUILD_VENDOR_KERNEL_BOOT}" ] ; then
+  build_boot_images
+fi
+
+if [ -n "${BUILD_GKI_ARTIFACTS}" ] ; then
+  build_gki_artifacts
+fi
+
+if [ -n "${BUILD_DTBO_IMG}" ]; then
+  make_dtbo
+fi
+
+# No trace_printk use on build server build
+if readelf -a ${DIST_DIR}/vmlinux 2>&1 | grep -q trace_printk_fmt; then
+  echo "========================================================"
+  echo "WARN: Found trace_printk usage in vmlinux."
+  echo ""
+  echo "trace_printk will cause trace_printk_init_buffers executed in kernel"
+  echo "start, which will increase memory and lead warning shown during boot."
+  echo "We should not carry trace_printk in production kernel."
+  echo ""
+  if [ ! -z "${STOP_SHIP_TRACEPRINTK}" ]; then
+    echo "ERROR: stop ship on trace_printk usage." 1>&2
+    exit 1
+  fi
+fi
-- 
2.25.1

