| #!/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 |