blob: 244b91d728a748b81f8f7c960d13b27c1de71da5 [file]
#!/bin/bash
# SPDX-License-Identifier: (GPL-2.0+ OR MIT)
#
# Copyright (c) 2019 Amlogic, Inc. All rights reserved.
#
function show_help {
echo "USAGE: $0 [--nongki] [--abi]"
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 " --savedefconfig for SAVEDEFCONFIG, [default]|1, not require parameter value"
echo " --menuconfig for MENUCONFIG, [default]|1, not require parameter value"
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"
}
VA=
ARGS=()
for i in "$@"
do
case $i in
--kernel_dir)
KERNEL_DIR=$2
VA=1
shift
;;
--common_drivers_dir)
COMMON_DRIVERS_DIR=$2
VA=1
shift
;;
--savedefconfig)
SAVEDEFCONFIG=1
shift
;;
--menuconfig)
MENUCONFIG=1
shift
;;
--dtb)
DTB=1
shift
;;
--manual_insmod_module)
MANUAL_INSMOD_MODULE=1
shift
;;
--patch)
ONLY_PATCH=1
shift
;;
-h|--help)
show_help
exit 0
;;
*)
if [[ -n $1 ]];
then
if [[ -z ${VA} ]];
then
ARGS+=("$1")
fi
fi
VA=
shift
;;
esac
done
set -- "${ARGS[@]}" # other parameters are used as script parameters of build_abi.sh or build.sh
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
export KERNEL_DIR COMMON_DRIVERS_DIR MANUAL_INSMOD_MODULE
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
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
exit
fi
tool_args=()
prebuilts_paths=(
CLANG_PREBUILT_BIN
#BUILDTOOLS_PREBUILT_BIN
)
echo CC_CLANG=$CC_CLANG
if [[ $CC_CLANG -eq "1" ]]; then
source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
if [[ -n "${LLVM}" ]]; then
tool_args+=("LLVM=1")
fi
#if [ -n "${DTC}" ]; then
# tool_args+=("DTC=${DTC}")
#fi
for prebuilt_bin in "${prebuilts_paths[@]}"; do
prebuilt_bin=\${${prebuilt_bin}}
eval prebuilt_bin="${prebuilt_bin}"
if [ -n "${prebuilt_bin}" ]; then
PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH}
fi
done
export PATH
elif [[ -n $CROSS_COMPILE_TOOL ]]; then
export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
fi
if [[ $ARCH == arm64 ]]; then
OUTDIR=${ROOT_DIR}/out/kernel-5.15-64
elif [[ $ARCH == arm ]]; then
OUTDIR=${ROOT_DIR}/out/kernel-5.15-32
tool_args+=("LOADADDR=0x208000")
elif [[ $ARCH == riscv ]]; then
OUTDIR=${ROOT_DIR}/out/riscv-kernel-5.15-64
fi
TOOL_ARGS="${tool_args[@]}"
OUT_DIR=${OUTDIR}/common
mkdir -p ${OUT_DIR}
if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
rm -rf ${OUTDIR}
fi
echo "========================================================"
echo ""
export DIST_DIR=$(readlink -m ${OUTDIR}/dist)
export MODULES_STAGING_DIR=$(readlink -m ${OUTDIR}/staging)
export OUT_AMLOGIC_DIR=$(readlink -m ${OUTDIR}/amlogic)
echo OUTDIR=$OUTDIR DIST_DIR=$DIST_DIR MODULES_STAGING_DIR=$MODULES_STAGING_DIR KERNEL_DIR=$KERNEL_DIR
source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh
source ${ROOT_DIR}/build/kernel/build_utils.sh
DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
export dtstree=${DTS_EXT_DIR}
export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
EXT_MODULES="
${EXT_MODULES}
"
EXT_MODULES_CONFIG="
${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
"
EXT_MODULES_PATH="
${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
"
POST_KERNEL_BUILD_CMDS="prepare_module_build"
EXTRA_CMDS="extra_cmds"
IN_KERNEL_MODULES=1
mkdir -p ${DIST_DIR} ${MODULES_STAGING_DIR}
cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/arch/${ARCH}/configs/
if [[ -n ${SAVEDEFCONFIG} ]]; then
set -x
make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} savedefconfig
rm ${KERNEL_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
cp -f ${OUT_DIR}/defconfig ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
set +x
exit
fi
if [[ -n ${DTB} ]]; then
set -x
make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs || exit
set +x
exit
fi
if [[ -n ${MENUCONFIG} ]]; then
set -x
make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} menuconfig
set +x
exit
fi
set -x
if [[ $ARCH == arm64 ]]; then
make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} INSTALL_MOD_STRIP=1 modules_install -j12 &&
make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}
elif [[ $ARCH == arm ]]; then
make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} INSTALL_MOD_STRIP=1 modules_install -j12 &&
make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm/configs/${DEFCONFIG}
elif [[ $ARCH == riscv ]]; then
make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install -j12 &&
make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
rm ${ROOT_DIR}/${KERNEL_DIR}/arch/riscv/configs/${DEFCONFIG}
fi
cp ${OUT_DIR}/arch/${ARCH}/boot/Image* ${DIST_DIR}
cp ${OUT_DIR}/arch/${ARCH}/boot/uImage* ${DIST_DIR}
cp ${OUT_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/*.dtb ${DIST_DIR}
cp ${OUT_DIR}/vmlinux ${DIST_DIR}
set +x
function build_ext_modules() {
for EXT_MOD in ${EXT_MODULES}; do
EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
set -x
make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
make ARCH=${ARCH} -C ${ROOT_DIR}/${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_MOD_STRIP=1 \
modules_install -j12 || exit
set +x
done
}
eval ${POST_KERNEL_BUILD_CMDS}
build_ext_modules
eval ${EXTRA_CMDS}
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"
for module in ${MODULES}; do
cp ${module} ${DIST_DIR}
done
if [ "${COMPRESS_MODULES}" = "1" ]; then
echo " Archiving modules to ${MODULES_ARCHIVE}"
tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
fi
fi
if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
echo "Rebuild rootfs in order to install modules!"
rebuild_rootfs ${ARCH}
echo "Build success!"
else
echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
fi
fi