Script: optimize the structure for build script [1/1]
PD#SWPL-124723
Problem:
build script mk.sh is too redundant
Solution:
optimize the structure for mk.sh and extract some command to functions in
amlogic_utils.sh
Verify:
local
Change-Id: If5c5ecfc651013169922d65128ffec88347d3ad2
Signed-off-by: Dezhen Wang <dezhen.wang@amlogic.com>
diff --git a/amlogic_utils.sh b/amlogic_utils.sh
index 9482a4a..b865590 100644
--- a/amlogic_utils.sh
+++ b/amlogic_utils.sh
@@ -1216,3 +1216,507 @@
}
export -f export_env_variable
+
+function handle_input_parameters () {
+ 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
+ ;;
+ --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
+ ANDROID_VERSION=$2
+ VA=1
+ shift
+ ;;
+ --manual_insmod_module)
+ MANUAL_INSMOD_MODULE=1
+ shift
+ ;;
+ --patch)
+ ONLY_PATCH=1
+ PATCH_PARM=$2
+ if [[ "${PATCH_PARM}" == "lunch" ]]; then
+ VA=1
+ fi
+ 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
+}
+
+export -f handle_input_parameters
+
+function set_default_parameters () {
+ if [ "${ARCH}" = "arm" ]; then
+ ARGS+=("LOADADDR=0x108000")
+ else
+ ARCH=arm64
+ 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 "${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
+
+ if [[ -z ${BAZEL} ]]; then
+ [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]] && BAZEL=1
+ fi
+
+ auto_patch_to_common_dir
+
+ 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
+}
+
+export -f set_default_parameters
+
+function auto_patch_to_common_dir () {
+ #first auto patch when param parse end
+ if [[ ${ONLY_PATCH} -eq "1" ]]; then
+ CURRENT_DIR=`pwd`
+ cd $(dirname $0)
+ fi
+
+ if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
+ export PATCH_PARM
+ ${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
+}
+
+export -f auto_patch_to_common_dir
+
+
+# the follow functions are used for smarthome
+function handle_input_parameters_for_smarthome () {
+ VA=
+ ARGS=()
+ for i in "$@"
+ do
+ case $i in
+ --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
+}
+
+export -f handle_input_parameters_for_smarthome
+
+function set_default_parameters_for_smarthome () {
+ 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
+
+ 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} # add the clang tool to env 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}/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
+}
+
+export -f set_default_parameters_for_smarthome
+
+function savedefconfig_cmd_for_smarthome () {
+ 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
+}
+
+export -f savedefconfig_cmd_for_smarthome
+
+function only_build_dtb_for_smarthome () {
+ 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
+}
+
+export -f only_build_dtb_for_smarthome
+
+function make_menuconfig_cmd_for_smarthome () {
+ 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
+}
+
+export -f make_menuconfig_cmd_for_smarthome
+
+function build_kernel_for_different_cpu_architecture () {
+ 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
+}
+
+export -f build_kernel_for_different_cpu_architecture
+
+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
+}
+
+export -f build_ext_modules
+
+function copy_modules_and_rebuild_rootfs_for_smarthome () {
+ 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
+}
+
+export -f copy_modules_and_rebuild_rootfs_for_smarthome