blob: 56c9d59721d4dded2fad593f5ec330f5c16bff31 [file]
#!/bin/bash
function show_help {
echo "USAGE: $0 [--nongki] [--abi]"
echo
echo " --arch for ARCH, build 64 or 32 bit kernel, arm|arm64[default], require parameter value"
echo " --abi for ABI, call build_abi.sh not build.sh, 1|0[default], not require parameter value"
echo " --build_config for BUILD_CONFIG, common_drivers/build.config.amlogic[default]|common/build.config.gki.aarch64, require parameter value"
echo " --symbol_strict for KMI_SYMBOL_LIST_STRICT_MODE, 1[default]|0, require parameter value"
echo " --lto for LTO, full|thin[default]|none, require parameter value"
echo " --menuconfig for only menuconfig, not require parameter value"
echo " --basicconfig for basicconfig, m(menuconfig)[default]|n"
echo " --image for only build kernel, not require parameter value"
echo " --modules for only build modules, not require parameter value"
echo " --dtbs for only build dtbs, not require parameter value"
echo " --kernel_dir for KERNEL_DIR, common[default]|other dir, require parameter value"
echo " --common_drivers_dir for COMMON_DRIVERS_DIR, common[default]|other dir, require parameter value"
echo " --build_dir for BUILD_DIR, build[default]|other dir, require parameter value"
echo " --check_defconfig for check defconfig"
echo " --modules_depend for check modules depend"
echo " --android_project for android project build"
echo " --gki_20 for build gki 2.0 kernel: gki_defconfig + amlogic_gki.fragment"
echo " --gki_10 for build gki 1.0 kernel: gki_defconfig + amlogic_gki.fragment + amlogic_gki.10"
echo " --gki_debug for build gki debug kernel: gki_defconfig + amlogic_gki.fragment + amlogic_gki.10 + amlogic_gki.debug"
echo " for note: current can't use --gki_10, amlogic_gki.10 for optimize, amlogic_gki.debug for debug, and follow GKI1.0"
echo " so build GKI1.0 Image need with --gki_debug, default parameter --gki_debug"
echo " --fast_build for fast build"
echo " --upgrade for android upgrade builtin module optimize vendor_boot size"
echo " --android_version for android version"
echo " --manual_insmod_module for insmod ko manually when kernel is booting.It's usually used in debug test"
echo " --patch for only am patches"
echo " --check_gki_20 for gki 2.0 check kernel build"
echo " --dev_config for use the config specified by oem instead of amlogic like ./mk.sh --dev_config a_config+b_config+c_config"
echo " --bazel for choose bazel tool to build"
}
VA=
ARGS=()
for i in "$@"
do
case $i in
--arch)
ARCH=$2
VA=1
shift
;;
--abi)
ABI=1
shift
;;
--build_config)
BUILD_CONFIG=$2
VA=1
shift
;;
--lto)
LTO=$2
VA=1
shift
;;
--symbol_strict)
KMI_SYMBOL_LIST_STRICT_MODE=$2
VA=1
shift
;;
--menuconfig)
MENUCONFIG=1
shift
;;
--basicconfig)
if [ "$2" = "m" ] || [ "$2" = "n" ]; then
BASICCONFIG=$2
else
BASICCONFIG="m"
fi
VA=1
shift
;;
--image)
IMAGE=1
shift
;;
--modules)
MODULES=1
shift
break
;;
--dtbs)
DTB_BUILD=1
shift
;;
--kernel_dir)
KERNEL_DIR=$2
VA=1
shift
;;
--common_drivers_dir)
COMMON_DRIVERS_DIR=$2
VA=1
shift
;;
--build_dir)
BUILD_DIR=$2
VA=1
shift
;;
--check_defconfig)
CHECK_DEFCONFIG=1
shift
;;
--modules_depend)
MODULES_DEPEND=1
shift
;;
--android_project)
ANDROID_PROJECT=$2
VA=1
shift
;;
--gki_20)
GKI_CONFIG=gki_20
shift
;;
--gki_10)
GKI_CONFIG=gki_10
shift
;;
--gki_debug)
GKI_CONFIG=gki_debug
shift
;;
--fast_build)
FAST_BUILD=1
shift
;;
--upgrade)
UPGRADE_PROJECT=1
shift
;;
--android_version)
ANDROID_VERSION=$2
VA=1
shift
;;
--manual_insmod_module)
MANUAL_INSMOD_MODULE=1
shift
;;
--patch)
ONLY_PATCH=1
shift
;;
--check_gki_20)
CHECK_GKI_20=1
GKI_CONFIG=gki_20
LTO=none
shift
;;
--dev_config)
DEV_CONFIGS=$2
VA=1
shift
;;
--bazel)
BAZEL=1
shift
;;
-h|--help)
show_help
exit 0
;;
*)
if [[ -n $1 ]];
then
if [[ -z ${VA} ]];
then
ARGS+=("$1")
fi
fi
VA=
shift
;;
esac
done
if [ "${ARCH}" = "arm" ]; then
ARGS+=("LOADADDR=0x108000")
else
ARCH=arm64
fi
set -- "${ARGS[@]}" # other parameters are used as script parameters of build_abi.sh or build.sh
# amlogic parameters default value
if [[ ${ONLY_PATCH} -eq "1" ]]; then
CURRENT_DIR=`pwd`
cd $(dirname $0)
fi
if [[ -z "${ABI}" ]]; then
ABI=0
fi
if [[ -z "${LTO}" ]]; then
LTO=thin
fi
if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
ANDROID_PROJECT=ohm
fi
if [[ -z "${KERNEL_DIR}" ]]; then
KERNEL_DIR=common
fi
if [[ ! -f ${KERNEL_DIR}/init/main.c ]]; then
echo "The directory of kernel does not exist";
exit
fi
if [[ -z "${COMMON_DRIVERS_DIR}" ]]; then
if [[ -d ${KERNEL_DIR}/../common_drivers ]]; then
COMMON_DRIVERS_DIR=../common_drivers
elif [[ -d "${KERNEL_DIR}/common_drivers" ]]; then
COMMON_DRIVERS_DIR=common_drivers
fi
fi
if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh ]]; then
echo "The directory of common_drivers does not exist";
exit
fi
if [[ -z "${BUILD_CONFIG}" ]]; then
if [ "${ARCH}" = "arm64" ]; then
BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
elif [ "${ARCH}" = "arm" ]; then
BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
fi
fi
if [[ -z "${BUILD_DIR}" ]]; then
BUILD_DIR=build
fi
version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
version_message="common${version_message##*android}"
if [[ -n ${FULL_KERNEL_VERSION} ]]; then
if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
echo "kernel version is not match!!"
exit
fi
else
FULL_KERNEL_VERSION=${version_message}
fi
#first auto patch when param parse end
if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
fi
if [[ ${ONLY_PATCH} -eq "1" ]]; then
cd ${CURRENT_DIR}
exit
fi
if [[ ! -f ${BUILD_DIR}/build_abi.sh ]]; then
echo "The directory of build does not exist";
exit
fi
ROOT_DIR=$(readlink -f $(dirname $0))
if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
ROOT_DIR=`pwd`
if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
echo "the file path of $0 is incorrect"
exit
fi
fi
export ROOT_DIR
CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
MODULES_DEPEND=${MODULES_DEPEND:-0}
if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
RM_KERNEL_BUILD_VAR_FILE=1
fi
GKI_CONFIG=${GKI_CONFIG:-gki_debug}
export CROSS_COMPILE=
if [ "${ABI}" -eq "1" ]; then
export OUT_DIR_SUFFIX="_abi"
else
OUT_DIR_SUFFIX=
fi
set -e
source "${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh"
export_env_variable
adjust_config_action
build_part_of_kernel
if [ "${ABI}" -eq "1" ]; then
${ROOT_DIR}/${BUILD_DIR}/build_abi.sh "$@"
else
if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" = "arm64" ]]; then
if [[ ${BAZEL} == 1 ]]; then
args="$@ --lto=${LTO} --allow_undeclared_modules"
PROJECT_DIR=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/project
[[ -d ${PROJECT_DIR} ]] || mkdir -p ${PROJECT_DIR}
pushd ${ROOT_DIR}/${KERNEL_DIR}
git checkout android/abi_gki_aarch64_amlogic
cat ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic >> android/abi_gki_aarch64_amlogic
cat ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10 >> android/abi_gki_aarch64_amlogic
cat ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug >> android/abi_gki_aarch64_amlogic
cat ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.external >> android/abi_gki_aarch64_amlogic
cat ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal >> android/abi_gki_aarch64_amlogic
popd
if [[ ! -f ${PROJECT_DIR}/build.config.project ]]; then
touch ${PROJECT_DIR}/build.config.project
echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/build.config.project
echo >> ${PROJECT_DIR}/build.config.project
fi
[[ -f ${PROJECT_DIR}/build.config.gki10 ]] || touch ${PROJECT_DIR}/build.config.gki10
echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/build.config.gki10
echo >> ${PROJECT_DIR}/build.config.gki10
echo "GKI_CONFIG=${GKI_CONFIG}" >> ${PROJECT_DIR}/build.config.gki10
echo "ANDROID_PROJECT=${ANDROID_PROJECT}" >> ${PROJECT_DIR}/build.config.gki10
echo "GKI_BUILD_CONFIG_FRAGMENT=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic.fragment.bazel" >> ${PROJECT_DIR}/build.config.gki10
echo "COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR}" >> ${PROJECT_DIR}/build.config.gki10
if [[ ${GKI_CONFIG} == gki_20 ]]; then
[[ -n ${ANDROID_PROJECT} ]] && sed -i "/GKI_BUILD_CONFIG_FRAGMENT/d" ${PROJECT_DIR}/build.config.gki10
fi
if [[ ! -f ${PROJECT_DIR}/project.bzl ]]; then
touch ${PROJECT_DIR}/project.bzl
echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/project.bzl
echo >> ${PROJECT_DIR}/project.bzl
echo "AMLOGIC_MODULES_ANDROID = [" >> ${PROJECT_DIR}/project.bzl
echo " \"common_drivers/drivers/tty/serial/amlogic-uart.ko\"," >> ${PROJECT_DIR}/project.bzl
echo "]" >> ${PROJECT_DIR}/project.bzl
echo >> ${PROJECT_DIR}/project.bzl
echo "EXT_MODULES_ANDROID = [" >> ${PROJECT_DIR}/project.bzl
echo "]" >> ${PROJECT_DIR}/project.bzl
fi
if [[ -z ${ANDROID_PROJECT} ]]; then
sed -i "/amlogic-uart.ko/d" ${PROJECT_DIR}/project.bzl
else
echo >> ${PROJECT_DIR}/project.bzl
echo "ANDROID_PROJECT = \"${ANDROID_PROJECT}\"" >> ${PROJECT_DIR}/project.bzl
fi
[[ -f ${PROJECT_DIR}/dtb.bzl ]] || touch ${PROJECT_DIR}/dtb.bzl
echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/dtb.bzl
echo >> ${PROJECT_DIR}/dtb.bzl
echo "AMLOGIC_DTBS = [" >> ${PROJECT_DIR}/dtb.bzl
cat ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/Makefile | grep -n "dtb" | cut -d "=" -f 2 | sed 's/[[:space:]][[:space:]]*/ /g' | sed 's/^[ ]*//' | sed 's/[ ]*$//' | sed '/^#/d;/^$/d' | sed 's/^/ "/' | sed 's/$/",/' >> ${PROJECT_DIR}/dtb.bzl
echo "]" >> ${PROJECT_DIR}/dtb.bzl
echo args=${args}
tools/bazel run //common:amlogic_dist --sandbox_debug --verbose_failures ${args}
sed -i "/GKI_BUILD_CONFIG_FRAGMENT/d" ${PROJECT_DIR}/build.config.gki10
echo "========================================================"
echo "after compiling with bazel and organizing the document"
source ${KERNEL_DIR}/build.config.constants
export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
source ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh
bazel_extra_cmds
else
if [[ -z ${EXT_MODULES} ]]; then
echo
echo
echo "========================================================"
echo " Build GKI boot image and GKI modules"
echo
source ${KERNEL_DIR}/build.config.constants
export OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}_gki})
COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
export DIST_GKI_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
if [[ "${GKI_CONFIG}" == "gki_20" ]]; then
BUILD_CONFIG=${KERNEL_DIR}/build.config.gki.aarch64 ${ROOT_DIR}/${BUILD_DIR}/build.sh
else
export IN_BUILD_GKI_10=1
${ROOT_DIR}/${BUILD_DIR}/build.sh
unset IN_BUILD_GKI_10
fi
unset OUT_DIR
fi
echo
echo
echo "========================================================"
echo " Build Vendor modules"
echo
${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
fi
else
${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
fi
fi
source ${ROOT_DIR}/${BUILD_CONFIG}
source ${KERNEL_BUILD_VAR_FILE}
if [[ -n ${RM_KERNEL_BUILD_VAR_FILE} ]]; then
rm -f ${KERNEL_BUILD_VAR_FILE}
fi
rename_external_module_name
rebuild_rootfs ${ARCH}
set +e
check_undefined_symbol
abi_symbol_list_detect