script: optimize [1/1]
PD#SWPL-96062
Problem:
1. module function call analysis failed
2. compilation is too slow
3. can't use --savedefconfig
4. can't use --module
5. can't use --Image
6. can't use --dtbs
Solution:
1. add directory to fix the issue of module function call analysis failed
2. add --fast_build to improve compilation speed
3. modify --savedefconfig to --menuconfig and --basicconfig
4. support --module --Image --dtbs
Verify:
sc2
Change-Id: I9af0d23c3220c4c533a2383c0ecf8c3389f2b1e5
Signed-off-by: Wanwei Jiang <wanwei.jiang@amlogic.com>
diff --git a/mk.sh b/mk.sh
index 71493f4..e6027c1 100755
--- a/mk.sh
+++ b/mk.sh
@@ -8,7 +8,8 @@
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 " --savedefconfig for only savedefconfig, not 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"
@@ -18,10 +19,13 @@
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 " --upgrade for android upgrade builtin module optimize vendor_boot size"
+ 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"
}
VA=
@@ -53,8 +57,17 @@
VA=1
shift
;;
- --savedefconfig)
- SAVEDEFCONFIG=1
+ --menuconfig)
+ MENUCONFIG=1
+ shift
+ ;;
+ --basicconfig)
+ if [ "$2" = "m" ] || [ "$2" = "n" ]; then
+ BASICCONFIG=$2
+ else
+ BASICCONFIG="m"
+ fi
+ VA=1
shift
;;
--image)
@@ -110,6 +123,13 @@
GKI_CONFIG=gki_debug
shift
;;
+ --fast_build)
+ SKIP_MRPROPER=1
+ LZ4_RAMDISK_COMPRESS_ARGS="--fast"
+ LTO="thin"
+ SKIP_CP_KERNEL_HDR=1
+ shift
+ ;;
--upgrade)
UPGRADE_PROJECT=1
shift
@@ -201,75 +221,172 @@
export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG
echo ABI=${ABI} BUILD_CONFIG=${BUILD_CONFIG} LTO=${LTO} KMI_SYMBOL_LIST_STRICT_MODE=${KMI_SYMBOL_LIST_STRICT_MODE} CHECK_DEFCONFIG=${CHECK_DEFCONFIG}
export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT GKI_CONFIG UPGRADE_PROJECT
-echo KERNEL_DIR=${KERNEL_DIR} COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR} BUILD_DIR=${BUILD_DIR} GKI_CONFIG=${GKI_CONFIG} UPGRADE_PROJECT=${UPGRADE_PROJECT}
+echo KERNEL_DIR=${KERNEL_DIR} COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR} BUILD_DIR=${BUILD_DIR} ANDROID_PROJECT=${ANDROID_PROJECT} GKI_CONFIG=${GKI_CONFIG} UPGRADE_PROJECT=${UPGRADE_PROJECT}
+export SKIP_MRPROPER LZ4_RAMDISK_COMPRESS_ARGS LTO SKIP_CP_KERNEL_HDR
+echo SKIP_MRPROPER=${SKIP_MRPROPER} LZ4_RAMDISK_COMPRESS_ARGS=${LZ4_RAMDISK_COMPRESS_ARGS} LTO=${LTO} SKIP_CP_KERNEL_HDR=${SKIP_CP_KERNEL_HDR}
export CROSS_COMPILE=
-source ${ROOT_DIR}/${BUILD_CONFIG}
-
if [ "${ABI}" -eq "1" ]; then
export OUT_DIR_SUFFIX="_abi"
else
OUT_DIR_SUFFIX=
fi
-echo SAVEDEFCONFIG=${SAVEDEFCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
-if [[ -n ${SAVEDEFCONFIG} ]] || [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
-
- source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
+echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
+if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]]; then
+ # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
+ HERMETIC_TOOLCHAIN=0
source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
+ source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
- if [[ -n ${SAVEDEFCONFIG} ]]; then
+ orig_config=$(mktemp)
+ new_config="${OUT_DIR}/.config"
+ changed_config=$(mktemp)
+
+ if [[ -n ${BASICCONFIG} ]]; then
+ set -x
+ defconfig_name=`basename ${GKI_BASE_CONFIG}`
+ (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
+ cp ${OUT_DIR}/.config ${orig_config}
+ if [ "${BASICCONFIG}" = "m" ]; then
+ (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
+ fi
+ ${KERNEL_DIR}/scripts/diffconfig -m ${orig_config} ${new_config} > ${changed_config}
+ (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
+ if [ "${ARCH}" = "arm" ]; then
+ cp ${OUT_DIR}/defconfig ${GKI_BASE_CONFIG}
+ fi
+ set +x
+ echo
+ echo "========================================================"
+ echo "The differences of the modified configs are as follows:"
+ cat ${changed_config}
+ echo "========================================================"
+ echo
+ else
set -x
pre_defconfig_cmds
(cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
+ cp ${OUT_DIR}/.config ${orig_config}
+ (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
+ ${KERNEL_DIR}/scripts/diffconfig -m ${orig_config} ${new_config} > ${changed_config}
(cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
post_defconfig_cmds
set +x
+ echo
+ echo "========================================================"
+ echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
+ echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
+ echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
+ echo
+ echo "The differences of the modified configs are as follows:"
+ cat ${changed_config}
+ echo "========================================================"
+ echo
fi
- if [[ -n ${IMAGE} ]]; then
- set -x
- (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
- set +x
- fi
- if [[ -n ${MODULES} ]]; then
- if [[ ${IN_KERNEL_MODULES} -eq "1" ]];
- then
- set -x
- (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
- set +x
- else
- echo EXT_MODULES=$EXT_MODULES
- set -x
- prepare_module_build
- if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
- echo "========================================================"
- echo " Building external modules and installing them into staging directory"
+ rm -f ${orig_config} ${changed_config}
+ exit
+fi
- MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
- KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
- 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 -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_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
- "${MAKE_ARGS[@]}" modules_install
- set +x
- done
- fi
- set +x
+if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
+ old_path=${PATH}
+ source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
+ source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
+
+ if [[ -n ${IMAGE} ]]; then
+ pre_defconfig_cmds
+ set -x
+ (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
+ set +x
+ post_defconfig_cmds
+ set -x
+ if [ "${ARCH}" = "arm64" ]; then
+ (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
+ elif [ "${ARCH}" = "arm" ]; then
+ (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
fi
+ set +x
fi
if [[ -n ${DTB_BUILD} ]]; then
set -x
(cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
set +x
fi
+ if [[ -n ${MODULES} ]]; then
+ export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
+ 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 [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
+ set -x
+ (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
+ (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
+ set +x
+ fi
+ echo EXT_MODULES=$EXT_MODULES
+ prepare_module_build
+ if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
+ echo "========================================================"
+ echo " Building external modules and installing them into staging directory"
+ KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
+ 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 -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
+ export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
+ set -x
+ extra_cmds
+ set +x
+ mkdir -p ${DIST_DIR}
+ MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
+ cp -p ${MODULES} ${DIST_DIR}
+
+ new_path=${PATH}
+ PATH=${old_path}
+ echo "========================================================"
+ 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}
+ else
+ echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
+ fi
+ PATH=${new_path}
+ fi
+ if [ -n "${DTS_EXT_DIR}" ]; then
+ if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
+ DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
+ if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
+ FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
+ fi
+ fi
+ fi
+ 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
exit
fi
@@ -279,6 +396,8 @@
${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
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}