| #!/bin/bash |
| |
| function real_path() { |
| export PATH=${ROOT_DIR}/build/kernel/build-tools/path/linux-x86:$PATH |
| if [[ "${FULL_KERNEL_VERSION}" == "common13-5.15" ]]; then |
| rel_path $@ |
| else |
| realpath $1 --relative-to $2 |
| fi |
| } |
| |
| function pre_defconfig_cmds() { |
| export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic) |
| if [ "${ARCH}" = "arm" ]; then |
| export PATH=${PATH}:/usr/bin/ |
| fi |
| |
| if [[ -z ${ANDROID_PROJECT} ]]; then |
| local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX` |
| echo "CONFIG_AMLOGIC_SERIAL_MESON=y" > ${temp_file} |
| echo "CONFIG_DEVTMPFS=y" >> ${temp_file} |
| if [[ ${ARCH} == arm ]]; then |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file} |
| else |
| if [[ ${GKI_CONFIG} == gki_20 ]]; then |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file} |
| else |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${ROOT_DIR}/${FRAGMENT_CONFIG_DEBUG} ${temp_file} |
| fi |
| fi |
| rm ${temp_file} |
| else |
| if [[ ${ARCH} == arm ]]; then |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} |
| else |
| if [[ ${GKI_CONFIG} == gki_20 ]]; then |
| if [[ -n ${CHECK_GKI_20} ]]; then |
| local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX` |
| echo "CONFIG_STMMAC_ETH=n" > ${temp_file} |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file} |
| rm ${temp_file} |
| else |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} |
| fi |
| else |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${ROOT_DIR}/${FRAGMENT_CONFIG_DEBUG} |
| fi |
| fi |
| fi |
| |
| if [[ ${UPGRADE_PROJECT} == r || ${UPGRADE_PROJECT} == R || ${UPGRADE_PROJECT} == s || ${UPGRADE_PROJECT} == S || ${UPGRADE_PROJECT} == u || ${UPGRADE_PROJECT} == U ]]; then |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE} |
| fi |
| if [[ ${UPGRADE_PROJECT} == p || ${UPGRADE_PROJECT} == P ]]; then |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_P} |
| fi |
| |
| if [[ ${IN_BUILD_GKI_10} == 1 ]]; then |
| local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX` |
| echo "CONFIG_MODULE_SIG_ALL=y" >> ${temp_file} |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${temp_file} |
| rm ${temp_file} |
| fi |
| |
| if [[ -n ${DEV_CONFIGS} ]]; then |
| local config_list=$(echo ${DEV_CONFIGS}|sed 's/+/ /g') |
| for config_name in ${config_list[@]} |
| do |
| if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name} ]]; then |
| config_file=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name} |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_file} |
| elif [[ -f ${config_name} ]]; then |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_name} |
| else |
| echo "ERROR: config file ${config_name} is not in the right path!!" |
| exit |
| fi |
| done |
| fi |
| |
| if [[ ${UPGRADE_PROJECT} == r || ${UPGRADE_PROJECT} == R ]] && [[ "${CONFIG_BOOTIMAGE}" == "user" ]]; then |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${AMLOGIC_R_USER_DIFFCONFIG} |
| fi |
| |
| if [[ -n ${KASAN} ]]; then |
| local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX` |
| cat ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/amlogic_kasan.defconfig > ${temp_file} |
| KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r \ |
| ${ROOT_DIR}/${KCONFIG_DEFCONFIG} \ |
| ${temp_file} |
| rm ${temp_file} |
| fi |
| } |
| export -f pre_defconfig_cmds |
| |
| function post_defconfig_cmds() { |
| rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG} |
| } |
| export -f post_defconfig_cmds |
| |
| function read_ext_module_config() { |
| ALL_LINE="" |
| while read LINE |
| do |
| if [[ $LINE != \#* && $LINE != "" ]]; then |
| ALL_LINE="$ALL_LINE"" ""$LINE" |
| fi |
| done < $1 |
| |
| echo "${ALL_LINE}" |
| } |
| |
| function copy_pre_commit(){ |
| if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then |
| if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then |
| cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit |
| cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit |
| chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit |
| chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit |
| fi |
| fi |
| } |
| |
| function read_ext_module_predefine() { |
| PRE_DEFINE="" |
| |
| for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do |
| PRE_DEFINE="$PRE_DEFINE"" -D"${y_config} |
| done |
| |
| for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do |
| PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE |
| done |
| |
| echo "${PRE_DEFINE}" |
| } |
| |
| top_ext_drivers=top_ext_drivers |
| function prepare_module_build() { |
| local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX` |
| if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then |
| sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file} |
| GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file}) |
| GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file}) |
| export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE |
| fi |
| |
| for ext_module_config in ${EXT_MODULES_CONFIG}; do |
| sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file} |
| GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file}) |
| GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file}) |
| done |
| export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE |
| echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG} |
| echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE} |
| |
| if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then |
| if [[ -d ${top_ext_drivers} ]]; then |
| rm -rf ${top_ext_drivers} |
| fi |
| mkdir -p ${top_ext_drivers} |
| fi |
| |
| if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then |
| extra_symbols="KBUILD_EXTRA_SYMBOLS +=" |
| fi |
| ext_modules= |
| for ext_module in ${EXT_MODULES}; do |
| module_abs_path=`readlink -e ${ext_module}` |
| module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR}) |
| if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then |
| if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then |
| cp -rf ${module_abs_path} ${top_ext_drivers} |
| module_rel_path=${top_ext_drivers}/${module_abs_path##*/} |
| fi |
| fi |
| ext_modules="${ext_modules} ${module_rel_path}" |
| done |
| |
| for ext_module_path in ${EXT_MODULES_PATH}; do |
| sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file} |
| while read LINE |
| do |
| module_abs_path=`readlink -e ${LINE}` |
| module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR}) |
| if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then |
| if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then |
| cp -rf ${module_abs_path} ${top_ext_drivers} |
| module_rel_path=${top_ext_drivers}/${module_abs_path##*/} |
| fi |
| fi |
| ext_modules="${ext_modules} ${module_rel_path}" |
| |
| done < ${temp_file} |
| done |
| EXT_MODULES=${ext_modules} |
| |
| local flag=0 |
| if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then |
| for ext_module in ${EXT_MODULES}; do |
| ext_mod_rel=$(real_path ${ext_module} ${KERNEL_DIR}) |
| if [[ ${flag} -eq "1" ]]; then |
| sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile |
| sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile |
| sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile |
| sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile |
| echo "${ext_module}/Makefile add: ${extra_symbols}" |
| fi |
| extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers" |
| flag=1 |
| done |
| fi |
| |
| export EXT_MODULES |
| echo EXT_MODULES=${EXT_MODULES} |
| |
| rm ${temp_file} |
| } |
| export -f prepare_module_build |
| |
| function extra_cmds() { |
| echo "========================================================" |
| echo " Running extra build command(s):" |
| |
| if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then |
| for ext_module in ${EXT_MODULES}; do |
| sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile |
| done |
| fi |
| |
| if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then |
| if [[ -d ${top_ext_drivers} ]]; then |
| rm -rf ${top_ext_drivers} |
| fi |
| fi |
| |
| for FILE in ${FILES}; do |
| if [[ "${FILE}" =~ \.dtbo ]] && \ |
| [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then |
| MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}" |
| fi |
| done |
| export MKDTIMG_DTBOS |
| |
| set +x |
| modules_install |
| set -x |
| |
| local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*) |
| pushd ${src_dir} |
| cp modules.order modules_order.back |
| : > modules.order |
| set +x |
| while read LINE |
| do |
| find -name ${LINE} >> modules.order |
| done < ${OUT_AMLOGIC_DIR}/modules/modules.order |
| set -x |
| sed -i "s/^\.\///" modules.order |
| : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order |
| ext_modules= |
| for ext_module in ${EXT_MODULES}; do |
| if [[ ${ext_module} =~ "../" ]]; then |
| ext_module_old=${ext_module} |
| ext_module=${ext_module//\.\.\//} |
| ext_dir=$(dirname ${ext_module}) |
| [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir} |
| mkdir -p extra/${ext_dir} |
| cp -rf extra/${ext_module_old} extra/${ext_dir} |
| |
| ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*) |
| ext_dir_top=${ext_module%/*} |
| sed -i "s/\.\.\///g" ${ext_modules_order_file} |
| cat ${ext_modules_order_file} >> modules.order |
| cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order |
| : > ${ext_modules_order_file} |
| else |
| ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*) |
| cat ${ext_modules_order_file} >> modules.order |
| cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order |
| : > ${ext_modules_order_file} |
| fi |
| ext_modules="${ext_modules} ${ext_module}" |
| done |
| EXT_MODULES=${ext_modules} |
| echo EXT_MODULES=${EXT_MODULES} |
| export EXT_MODULES |
| |
| head -n ${ramdisk_last_line} modules.order > vendor_boot_modules |
| file_last_line=`sed -n "$=" modules.order` |
| let line=${file_last_line}-${ramdisk_last_line} |
| tail -n ${line} modules.order > vendor_dlkm_modules |
| export MODULES_LIST=${src_dir}/vendor_boot_modules |
| if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then |
| export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules |
| fi |
| |
| popd |
| |
| if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then |
| FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`" |
| fi |
| |
| if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then |
| : > ${KERNEL_BUILD_VAR_FILE} |
| echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE} |
| fi |
| |
| for module_path in ${PREBUILT_MODULES_PATH}; do |
| find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \; |
| done |
| } |
| export -f extra_cmds |
| |
| function bazel_extra_cmds() { |
| modules_install |
| |
| if [[ -z ${ANDROID_PROJECT} && -n ${FAST_BUILD} ]]; then |
| return |
| fi |
| |
| if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then |
| : > ${KERNEL_BUILD_VAR_FILE} |
| echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE} |
| echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE} |
| fi |
| |
| if [[ ${GKI_CONFIG} != gki_20 ]]; then |
| [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz |
| mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz |
| [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10 |
| mkdir ${DIST_DIR}/system_dlkm_gki10 |
| pushd ${DIST_DIR}/system_dlkm_gki10 |
| tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz |
| find -name "*.ko" | while read module; do |
| module_name=${module##*/} |
| if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then |
| rm -f ${module} |
| fi |
| done |
| tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib |
| popd |
| rm -rf ${DIST_DIR}/system_dlkm_gki10 |
| fi |
| } |
| export -f bazel_extra_cmds |
| |
| #$1 dep_file |
| #$2 ko |
| #$3 install_sh |
| function mod_probe() { |
| local dep_file=$1 |
| local ko=$2 |
| local install_sh=$3 |
| |
| if [[ ${loaded_modules[$ko]} ]]; then |
| return |
| fi |
| |
| local loop |
| for loop in $(grep "^${ko}:" $dep_file | sed 's/.*://'); do |
| mod_probe $dep_file $loop $install_sh |
| done |
| |
| echo insmod $ko >> $install_sh |
| loaded_modules[$ko]=1 |
| } |
| |
| function create_install_and_order_filles() { |
| local modules_dep_file=$1 |
| local install_file=$2 |
| local modules_order_file=$3 |
| local loop |
| |
| [[ -f ${install_file} ]] && rm -f ${install_file} |
| touch ${install_file} |
| [[ -f ${install_file}.tmp ]] && rm -f ${install_file}.tmp |
| touch ${install_file}.tmp |
| [[ -f ${modules_order_file} ]] && rm -f ${modules_order_file} |
| touch ${modules_order_file} |
| [[ -f ${modules_order_file}.tmp ]] && rm -f ${modules_order_file}.tmp |
| touch ${modules_order_file}.tmp |
| |
| declare -A loaded_modules |
| for loop in `cat ${modules_dep_file} | sed 's/:.*//'`; do |
| echo ${loop} >> ${modules_order_file}.tmp |
| mod_probe ${modules_dep_file} ${loop} ${install_file}.tmp |
| done |
| |
| cat ${install_file}.tmp | awk ' { |
| if (!cnt[$2]) { |
| print $0; |
| cnt[$2]++; |
| } |
| }' > ${install_file} |
| |
| cut -d ' ' -f 2 ${install_file} > ${modules_order_file} |
| } |
| |
| function adjust_sequence_modules_loading() { |
| if [[ -n $1 ]]; then |
| chips=$1 |
| fi |
| |
| cp modules.dep modules.dep.temp |
| |
| soc_module=() |
| for chip in ${chips[@]}; do |
| chip_module=`ls amlogic-*-soc-${chip}.ko` |
| soc_module=(${soc_module[@]} ${chip_module[@]}) |
| done |
| echo soc_module=${soc_module[*]} |
| |
| delete_soc_module=() |
| if [[ ${#soc_module[@]} == 0 ]]; then |
| echo "Use all soc module" |
| else |
| for module in `ls amlogic-*-soc-*`; do |
| if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then |
| echo Delete soc module: ${module} |
| sed -n "/${module}:/p" modules.dep.temp |
| sed -i "/${module}:/d" modules.dep.temp |
| delete_soc_module=(${delete_soc_module[@]} ${module}) |
| fi |
| done |
| echo delete_soc_module=${delete_soc_module[*]} |
| fi |
| |
| if [[ -n ${CLK_SOC_MODULE} ]]; then |
| delete_clk_soc_modules=() |
| for module in `ls amlogic-clk-soc-*`; do |
| if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then |
| echo Delete clk soc module: ${module} |
| sed -n "/${module}:/p" modules.dep.temp |
| sed -i "/${module}:/d" modules.dep.temp |
| delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module}) |
| fi |
| done |
| echo delete_clk_soc_modules=${delete_clk_soc_modules[*]} |
| fi |
| |
| if [[ -n ${PINCTRL_SOC_MODULE} ]]; then |
| delete_pinctrl_soc_modules=() |
| for module in `ls amlogic-pinctrl-soc-*`; do |
| if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then |
| echo Delete pinctrl soc module: ${module} |
| sed -n "/${module}:/p" modules.dep.temp |
| sed -i "/${module}:/d" modules.dep.temp |
| delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module}) |
| fi |
| done |
| echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]} |
| fi |
| |
| in_line_i=a |
| delete_type_modules=() |
| rule_type_modules= |
| select_type_modules= |
| [[ -z ${TYPE_MODULE_SELECT_MODULE} ]] && TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE_ANDROID} |
| echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}" |
| mkdir temp_dir |
| cd temp_dir |
| in_temp_dir=y |
| for element in ${TYPE_MODULE_SELECT_MODULE}; do |
| if [[ ${in_temp_dir} = y ]]; then |
| cd ../ |
| rm -r temp_dir |
| in_temp_dir= |
| fi |
| if [[ ${in_line_i} = a ]]; then |
| in_line_i=b |
| type_module=${element} |
| select_modules_i=0 |
| select_modules_count= |
| select_modules= |
| elif [[ ${in_line_i} = b ]]; then |
| in_line_i=c |
| select_modules_count=${element} |
| else |
| let select_modules_i+=1 |
| select_modules="${select_modules} ${element}" |
| if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then |
| in_line_i=a |
| echo type_module=$type_module select_modules=$select_modules |
| rule_type_modules="${rule_type_modules} ${type_module}" |
| select_type_modules="${select_type_modules} ${select_modules}" |
| fi |
| fi |
| done |
| |
| if [[ -n ${ANDROID_PROJECT} ]];then |
| rule_type_modules="${rule_type_modules} ${DEFAULT_DELETE_TYPE_LIST[@]}" |
| rule_type_modules="${rule_type_modules} `echo ${DEFAULT_DELETE_TYPE_LIST_ANDROID}`" |
| fi |
| echo rule_type_modules="${rule_type_modules}" |
| echo select_type_modules="${select_type_modules}" |
| |
| for module in `ls ${rule_type_modules}`; do |
| dont_delete_module=0 |
| for select_module in ${select_type_modules}; do |
| if [[ "${select_module}" == "${module}" ]] ; then |
| dont_delete_module=1 |
| break; |
| fi |
| done |
| if [[ ${dont_delete_module} != 1 ]]; then |
| echo Delete module: ${module} |
| sed -n "/${module}:/p" modules.dep.temp |
| sed -i "/${module}:/d" modules.dep.temp |
| delete_type_modules=(${delete_type_modules[@]} ${module}) |
| fi |
| done |
| echo delete_type_modules=${delete_type_modules[*]} |
| |
| if [[ -n ${in_temp_dir} ]]; then |
| cd ../ |
| rm -r temp_dir |
| fi |
| |
| mkdir service_module |
| echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]} |
| mkdir extra_closed_source_modules |
| echo EXTRA_CLOSED_SOURCE_MODULE_LIST=${EXTRA_CLOSED_SOURCE_MODULE_LIST[@]} |
| |
| BLACK_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]} ${EXTRA_CLOSED_SOURCE_MODULE_LIST[@]}) |
| echo BLACK_LIST=${BLACK_LIST[@]} |
| black_modules=() |
| for module in ${BLACK_LIST[@]}; do |
| if [[ `ls ${module}* 2>/dev/null` ]]; then |
| modules=`ls ${module}*` |
| else |
| continue |
| fi |
| black_modules=(${black_modules[@]} ${modules[@]}) |
| done |
| if [[ ${#black_modules[@]} == 0 ]]; then |
| echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}" |
| else |
| echo black_modules=${black_modules[*]} |
| for module in ${black_modules[@]}; do |
| echo Delete module: ${module} |
| sed -n "/${module}:/p" modules.dep.temp |
| sed -i "/${module}:/d" modules.dep.temp |
| done |
| fi |
| |
| GKI_MODULES_LOAD_BLACK_LIST=() |
| if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]]; then |
| gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX` |
| cat ${ROOT_DIR}/${KERNEL_DIR}/modules.bzl |grep ko | while read LINE |
| do |
| echo $LINE | sed 's/^[^"]*"//' | sed 's/".*$//' >> ${gki_modules_temp_file} |
| done |
| |
| for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do |
| sed -i "/\/${module}/d" ${gki_modules_temp_file} |
| done |
| |
| for module in `cat ${gki_modules_temp_file}`; do |
| module=${module##*/} |
| GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module} |
| done |
| rm -f ${gki_modules_temp_file} |
| |
| for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do |
| echo Delete module: ${module} |
| sed -n "/^${module}:/p" modules.dep.temp |
| sed -i "/^${module}:/d" modules.dep.temp |
| done |
| fi |
| |
| cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp0 |
| delete_modules=(${delete_soc_module[@]} ${delete_clk_soc_modules[@]} ${delete_pinctrl_soc_modules[@]} ${delete_type_modules[@]} ${black_modules[@]} ${GKI_MODULES_LOAD_BLACK_LIST[@]}) |
| for module in ${delete_modules[@]}; do |
| if [[ ! -f $module ]]; then |
| continue |
| fi |
| match=`sed -n "/${module}/=" modules.dep.temp0` |
| for match in ${match[@]}; do |
| match_count=(${match_count[@]} $match) |
| done |
| if [[ ${#match_count[@]} != 0 ]]; then |
| echo "Error ${#match_count[@]} modules depend on ${module}, please modify:" |
| echo ${MODULES_SEQUENCE_LIST}:MODULES_LOAD_BLACK_LIST |
| exit |
| fi |
| if [[ -n ${ANDROID_PROJECT} ]]; then |
| for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do |
| if [[ ${module} =~ ${service_module_temp} ]]; then |
| mv ${module} service_module |
| fi |
| done |
| fi |
| for extra_closed_source_module in ${EXTRA_CLOSED_SOURCE_MODULE_LIST[@]}; do |
| if [[ ${module} =~ ${extra_closed_source_module} ]]; then |
| mv ${module} extra_closed_source_modules |
| fi |
| done |
| rm -f ${module} |
| done |
| rm -f modules.dep.temp0 |
| |
| touch modules.dep.temp1 |
| for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do |
| echo RAMDISK_MODULES_LOAD_LIST: $module |
| sed -n "/${module}:/p" modules.dep.temp |
| sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1 |
| sed -i "/${module}:/d" modules.dep.temp |
| sed -n "/${module}.*\.ko:/p" modules.dep.temp |
| sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1 |
| sed -i "/${module}.*\.ko:/d" modules.dep.temp |
| done |
| |
| if [[ -n ${ANDROID_PROJECT} ]]; then |
| cp modules.dep.temp modules_recovery.dep.temp |
| cp modules.dep.temp1 modules_recovery.dep.temp1 |
| for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do |
| echo RECOVERY_MODULES_LOAD_LIST: $module |
| sed -n "/${module}:/p" modules_recovery.dep.temp |
| sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1 |
| sed -i "/${module}:/d" modules_recovery.dep.temp |
| sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp |
| sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1 |
| sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp |
| done |
| cat modules_recovery.dep.temp >> modules_recovery.dep.temp1 |
| cp modules_recovery.dep.temp1 modules_recovery.dep |
| rm modules_recovery.dep.temp |
| rm modules_recovery.dep.temp1 |
| fi |
| |
| for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do |
| echo VENDOR_MODULES_LOAD_FIRST_LIST: $module |
| sed -n "/${module}:/p" modules.dep.temp |
| sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1 |
| sed -i "/${module}:/d" modules.dep.temp |
| sed -n "/${module}.*\.ko:/p" modules.dep.temp |
| sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1 |
| sed -i "/${module}.*\.ko:/d" modules.dep.temp |
| done |
| |
| : > modules.dep.temp2 |
| for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do |
| echo VENDOR_MODULES_LOAD_FIRST_LIST: $module |
| sed -n "/${module}:/p" modules.dep.temp |
| sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2 |
| sed -i "/${module}:/d" modules.dep.temp |
| sed -n "/${module}.*\.ko:/p" modules.dep.temp |
| sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2 |
| sed -i "/${module}.*\.ko:/d" modules.dep.temp |
| done |
| cat modules.dep.temp >> modules.dep.temp1 |
| cat modules.dep.temp2 >> modules.dep.temp1 |
| cp modules.dep.temp1 modules.dep |
| rm modules.dep.temp |
| rm modules.dep.temp1 |
| rm modules.dep.temp2 |
| } |
| |
| function calculate_first_line() { |
| local modules_order_file=$1 |
| local modules_list=($2) |
| local module |
| local module_lines=() |
| local lines |
| local first_line |
| |
| for module in ${modules_list[@]}; do |
| module_lines[${#module_lines[@]}]=`sed -n "/${module}/=" ${modules_order_file}` |
| done |
| lines=`echo ${module_lines[*]} | tr ' ' '\n' | sort -n` |
| first_line=`echo ${lines} | cut -d ' ' -f 1` |
| echo ${first_line} |
| } |
| |
| function calculate_last_line() { |
| local modules_order_file=$1 |
| local modules_list=($2) |
| local module |
| local module_lines=() |
| local lines |
| local last_line |
| |
| for module in ${modules_list[@]}; do |
| module_lines[${#module_lines[@]}]=`sed -n "/${module}/=" ${modules_order_file}` |
| done |
| lines=`echo ${module_lines[*]} | tr ' ' '\n' | sort -n -r` |
| last_line=`echo ${lines} | cut -d ' ' -f 1` |
| [[ -z ${last_line} ]] && last_line=0 |
| echo ${last_line} |
| } |
| |
| function create_ramdisk_vendor_recovery() { |
| modules_order=$1 |
| if [[ -n ${ANDROID_PROJECT} ]]; then |
| modules_recovery_order=$2 |
| fi |
| local modules_list |
| |
| modules_list=`echo ${RAMDISK_MODULES_LOAD_LIST[@]}` |
| export ramdisk_last_line=`calculate_last_line ${modules_order} "${modules_list}"` |
| export ramdisk_last_line_add_1=${ramdisk_last_line} |
| let ramdisk_last_line_add_1+=1 |
| echo ramdisk_last_line=${ramdisk_last_line} |
| |
| if [[ -n ${ANDROID_PROJECT} ]]; then |
| modules_list=`echo ${RECOVERY_MODULES_LOAD_LIST[@]}` |
| recovery_last_line=`calculate_last_line ${modules_recovery_order} "${modules_list}"` |
| echo recovery_last_line=${recovery_last_line} |
| mkdir recovery |
| if [[ ${recovery_last_line} == 0 ]]; then |
| : > recovery/recovery_modules.order |
| : > recovery_install.sh |
| else |
| sed -n "${ramdisk_last_line_add_1},${recovery_last_line}p" ${modules_recovery_order} > recovery/recovery_modules.order |
| cat recovery/recovery_modules.order | xargs cp -t recovery/ |
| cat recovery/recovery_modules.order | sed "s/^/insmod &/" > recovery_install.sh |
| fi |
| |
| sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh |
| echo "echo Install recovery modules success!" >> recovery_install.sh |
| chmod 755 recovery_install.sh |
| mv recovery_install.sh recovery/ |
| fi |
| |
| mkdir ramdisk |
| head -n ${ramdisk_last_line} ${modules_order} > ramdisk/ramdisk_modules.order |
| echo -e "#!/bin/sh\n\nset -x" > ramdisk/ramdisk_install.sh |
| if [[ ${ramdisk_last_line} != 0 ]]; then |
| cat ramdisk/ramdisk_modules.order | xargs mv -t ramdisk/ |
| cat ramdisk/ramdisk_modules.order | sed "s/^/insmod &/" >> ramdisk/ramdisk_install.sh |
| fi |
| echo "echo Install ramdisk modules success!" >> ramdisk/ramdisk_install.sh |
| chmod 755 ramdisk/ramdisk_install.sh |
| |
| mkdir vendor |
| sed -n "${ramdisk_last_line_add_1},$$p" ${modules_order} > vendor/vendor_modules.order |
| echo -e "#!/bin/sh\n\nset -x" > vendor/vendor_install.sh |
| if [[ -s vendor/vendor_modules.order ]]; then |
| cat vendor/vendor_modules.order | xargs mv -t vendor/ |
| cat vendor/vendor_modules.order | sed "s/^/insmod &/" >> vendor/vendor_install.sh |
| fi |
| echo "echo Install vendor modules success!" >> vendor/vendor_install.sh |
| chmod 755 vendor/vendor_install.sh |
| } |
| |
| function modules_install() { |
| arg1=$1 |
| |
| if [[ ! -f ${MODULES_SEQUENCE_LIST} ]]; then |
| MODULES_SEQUENCE_LIST=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list |
| fi |
| source ${MODULES_SEQUENCE_LIST} |
| |
| if [[ ! -f ${EXTRA_MODULES_LIST} ]]; then |
| EXTRA_MODULES_LIST=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_list |
| fi |
| source ${EXTRA_MODULES_LIST} |
| |
| export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)} |
| echo $OUT_AMLOGIC_DIR |
| rm -rf ${OUT_AMLOGIC_DIR} |
| mkdir -p ${OUT_AMLOGIC_DIR} |
| mkdir -p ${OUT_AMLOGIC_DIR}/modules |
| mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules |
| mkdir -p ${OUT_AMLOGIC_DIR}/symbols |
| |
| if [[ ${BAZEL} == "1" ]]; then |
| BAZEL_OUT=${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common |
| if [[ -n ${FAST_BUILD} ]]; then |
| kernel_release=`cat ${BAZEL_OUT}/kernel_aarch64/include/config/kernel.release` |
| if [[ -z ${ANDROID_PROJECT} ]]; then |
| mkdir -p ${OUT_AMLOGIC_DIR}/fast_build/amlogic |
| tar -zxf ${BAZEL_OUT}/amlogic/modules_staging_dir_self.tar.gz -C ${OUT_AMLOGIC_DIR}/fast_build/amlogic |
| cp ${BAZEL_OUT}/amlogic_kbuild_mixed_tree/System.map ${OUT_AMLOGIC_DIR}/fast_build/amlogic |
| pushd ${OUT_AMLOGIC_DIR}/fast_build/amlogic |
| depmod -e -F System.map -b . ${kernel_release} |
| cp ${OUT_AMLOGIC_DIR}/fast_build/amlogic/lib/modules/${kernel_release}/modules.order ${DIST_DIR}/modules.load |
| popd |
| else |
| cp ${BAZEL_OUT}/amlogic_modules_install/staging/lib/modules/${kernel_release}/modules.dep ${DIST_DIR}/modules.load |
| sed -i "s/:.*//g" ${DIST_DIR}/modules.load |
| fi |
| fi |
| while read module |
| do |
| module_name=${module##*/} |
| if [[ -z ${ANDROID_PROJECT} || `echo ${module} | grep "^kernel\/"` ]]; then |
| if [[ -f ${DIST_DIR}/${module_name} ]]; then |
| cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules |
| else |
| if [[ -z ${ANDROID_PROJECT} && -n ${FAST_BUILD} ]]; then |
| module_f= |
| for module_l in `find ${BAZEL_OUT}/kernel_aarch64 -name ${module_name}`; do |
| if [[ ${module_l} =~ ${module#*/} ]]; then |
| module_f=${module_l} |
| break |
| fi |
| done |
| module=${module_f} |
| if [[ -z ${module_f} ]]; then |
| module=`find ${OUT_AMLOGIC_DIR}/fast_build/amlogic/lib/modules/ -name ${module_name}` |
| fi |
| else |
| module=`find ${BAZEL_OUT}/amlogic_modules_install/staging/lib/modules/ -name ${module_name}` |
| fi |
| cp ${module} ${OUT_AMLOGIC_DIR}/modules |
| fi |
| elif [[ `echo ${module} | grep "^extra\/"` ]]; then |
| module=${module#*/} |
| local match= |
| for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do |
| if [[ "${module}" =~ "${ext_module}" ]]; then |
| match=1 |
| break |
| fi |
| done |
| if [[ ${match} == 1 ]]; then |
| cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules |
| else |
| cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules |
| fi |
| else |
| echo "warning unrecognized module: ${module}" |
| fi |
| done < ${DIST_DIR}/modules.load |
| |
| if [[ -z ${ANDROID_PROJECT} && -n ${FAST_BUILD} ]]; then |
| dep_file=${OUT_AMLOGIC_DIR}/fast_build/amlogic/lib/modules/${kernel_release}/modules.dep |
| else |
| dep_file=`find ${BAZEL_OUT}/amlogic_modules_install -name *.dep | grep "amlogic"` |
| fi |
| cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep |
| if [[ -n ${ANDROID_PROJECT} ]]; then |
| grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep |
| for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do |
| cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do |
| sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep |
| done |
| done |
| |
| touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order |
| for order_file in `find ${BAZEL_OUT} -name "modules.order.*" | grep "amlogic"`; do |
| order_file_dir=${order_file#*/extra/} |
| order_file_dir=${order_file_dir%/modules.order.*} |
| if [[ ! "${EXT_MODULES_ANDROID_AUTO_LOAD}" =~ "${order_file_dir}" ]]; then |
| echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order |
| cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order |
| echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order |
| fi |
| done |
| else |
| cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/modules.dep |
| fi |
| else |
| local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*) |
| pushd ${MODULES_ROOT_DIR} |
| local common_drivers=${COMMON_DRIVERS_DIR##*/} |
| local modules_list=$(find -type f -name "*.ko") |
| for module in ${modules_list}; do |
| if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules |
| if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then |
| cp ${module} ${OUT_AMLOGIC_DIR}/modules/ |
| else |
| local match= |
| for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do |
| if [[ "${module}" =~ "${ext_module}" ]]; then |
| match=1 |
| break |
| fi |
| done |
| if [[ ${match} == 1 ]]; then |
| cp ${module} ${OUT_AMLOGIC_DIR}/modules/ |
| else |
| cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ |
| fi |
| fi |
| else |
| cp ${module} ${OUT_AMLOGIC_DIR}/modules/ |
| fi |
| done |
| |
| if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules |
| grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep |
| dep_file=modules.dep |
| for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do |
| cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do |
| sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep |
| done |
| done |
| else # all modules, include external modules |
| cp modules.dep ${OUT_AMLOGIC_DIR}/modules |
| fi |
| popd |
| fi |
| pushd ${OUT_AMLOGIC_DIR}/modules |
| sed -i 's#[^ ]*/##g' modules.dep |
| |
| echo adjust_sequence_modules_loading |
| adjust_sequence_modules_loading "${arg1[*]}" |
| |
| echo create_install_and_order_filles modules.order |
| create_install_and_order_filles modules.dep __install.sh modules.order |
| |
| if [[ -n ${ANDROID_PROJECT} ]]; then |
| echo create_install_and_order_filles modules_recovery.order |
| create_install_and_order_filles modules_recovery.dep __install_recovery.sh modules_recovery.order |
| fi |
| |
| create_ramdisk_vendor_recovery modules.order modules_recovery.order |
| |
| if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then |
| install_file=manual_install.sh |
| else |
| install_file=install.sh |
| fi |
| echo "#!/bin/sh" > ${install_file} |
| echo "cd ramdisk" >> ${install_file} |
| echo "./ramdisk_install.sh" >> ${install_file} |
| echo "cd ../vendor" >> ${install_file} |
| echo "./vendor_install.sh" >> ${install_file} |
| echo "cd ../" >> ${install_file} |
| chmod 755 ${install_file} |
| |
| echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules." |
| |
| if [[ -n ${ANDROID_PROJECT} ]]; then |
| rm __install_recovery.sh __install_recovery.sh.tmp |
| fi |
| |
| popd |
| |
| if [[ ${BAZEL} == "1" ]]; then |
| if [[ -n ${FAST_BUILD} ]]; then |
| cp ${BAZEL_OUT}/kernel_aarch64/vmlinux ${OUT_AMLOGIC_DIR}/symbols |
| cp ${BAZEL_OUT}/kernel_aarch64/vmlinux ${DIST_DIR}/ |
| cp ${BAZEL_OUT}/kernel_aarch64/Image* ${DIST_DIR}/ |
| else |
| cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols |
| fi |
| |
| find ${BAZEL_OUT} -name *.ko | grep "unstripped" | while read module; do |
| cp ${module} ${OUT_AMLOGIC_DIR}/symbols |
| done |
| else |
| cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols |
| find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \; |
| for ext_module in ${EXT_MODULES}; do |
| find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \; |
| done |
| fi |
| } |
| export -f modules_install |
| |
| function rename_external_module_name() { |
| local external_coppied |
| sed 's/^[\t ]*\|[\t ]*$//g' ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/modules_rename.txt | sed '/^#/d;/^$/d' | sed 's/[[:space:]][[:space:]]*/ /g' | while read module_line; do |
| target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'` |
| modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'` |
| [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1 |
| echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied |
| for module in ${modules_name}; do |
| echo module=$module |
| if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then |
| if [[ -z ${external_coppied} ]]; then |
| cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} |
| external_coppied=1 |
| fi |
| rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} |
| fi |
| done |
| external_coppied= |
| done |
| } |
| export -f rename_external_module_name |
| |
| # function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist |
| function rebuild_rootfs() { |
| echo |
| echo "========================================================" |
| if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then |
| echo "Rebuild rootfs in order to install modules!" |
| else |
| echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!" |
| return |
| fi |
| |
| pushd ${OUT_AMLOGIC_DIR} |
| |
| local ARCH=arm64 |
| if [[ -n $1 ]]; then |
| ARCH=$1 |
| fi |
| |
| rm rootfs -rf |
| mkdir rootfs |
| cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs |
| cd rootfs |
| dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1 |
| gunzip rootfs_base.cpio.gz |
| mkdir rootfs |
| cd rootfs |
| fakeroot cpio -i -F ../rootfs_base.cpio |
| if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then |
| cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf |
| fi |
| cp -rf ../../modules . |
| |
| find . | fakeroot cpio -o -H newc | gzip > ../rootfs_new.cpio.gz |
| cd ../ |
| mkimage -A ${ARCH} -O linux -T ramdisk -C none -d rootfs_new.cpio.gz rootfs_new.cpio.gz.uboot |
| mv rootfs_new.cpio.gz.uboot ../ |
| cd ../ |
| cp rootfs_new.cpio.gz.uboot ${DIST_DIR} |
| |
| popd |
| } |
| export -f rebuild_rootfs |
| |
| # function check_undefined_symbol can check the dependence among the modules |
| # parameter: |
| # --modules_depend |
| function check_undefined_symbol() { |
| if [[ ${MODULES_DEPEND} != "1" ]]; then |
| return |
| fi |
| |
| echo "========================================================" |
| echo "print modules depend" |
| |
| pushd ${OUT_AMLOGIC_DIR}/modules |
| echo |
| echo "========================================================" |
| echo "Functions or variables not defined in this module refer to which module." |
| if [[ -n ${LLVM} ]]; then |
| compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm- |
| elif [[ -n ${CROSS_COMPILE} ]]; then |
| compile_tool=${CROSS_COMPILE} |
| else |
| echo "can't find compile tool" |
| fi |
| ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt |
| cp modules.order module_list.txt |
| cp ramdisk/*.ko . |
| cp vendor/*.ko . |
| while read LINE |
| do |
| echo ${LINE} |
| for U in `${compile_tool}nm ${LINE} | grep " U " | sed -e 's/^\s*//' -e 's/\s*$//' | cut -d ' ' -f 2` |
| do |
| #echo ${U} |
| U_v=`grep -w ${U} vmlinux_T.txt` |
| in_vmlinux=0 |
| if [ -n "${U_v}" ]; |
| then |
| #printf "\t%-50s <== vmlinux\n" ${U} |
| in_vmlinux=1 |
| continue |
| fi |
| in_module=0 |
| MODULE= |
| while read LINE1 |
| do |
| U_m=`${compile_tool}nm ${LINE1} | grep -E " T | D | B | R " | grep -v "\.cfi_jt" | grep "${U}"` |
| if [ -n "${U_m}" ]; |
| then |
| in_module=1 |
| MODULE=${LINE1} |
| fi |
| done < module_list.txt |
| if [ ${in_module} -eq "1" ]; |
| then |
| printf "\t%-50s <== %s\n" ${U} ${MODULE} |
| continue |
| else |
| printf "\t%-50s <== none\n" ${U} |
| fi |
| done |
| echo |
| echo |
| done < module_list.txt |
| rm vmlinux_T.txt |
| rm module_list.txt |
| rm *.ko |
| popd |
| } |
| export -f check_undefined_symbol |
| |
| function reorganized_abi_symbol_list_file() { # delete the extra information but symbol |
| cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines |
| sed -i '/^\[/d' ${symbol_tmp} # remove the title |
| sed -i '/^\#/d' ${symbol_tmp} # remove the comment |
| } |
| export -f reorganized_abi_symbol_list_file |
| |
| function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix |
| if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then |
| symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic |
| symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10 |
| symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug |
| symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal |
| else |
| symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic |
| symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.10 |
| symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.debug |
| symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.illegal |
| fi |
| |
| file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}") |
| for file in ${file_list} |
| do |
| local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX` |
| reorganized_abi_symbol_list_file "${file}" |
| |
| if [[ -s ${symbol_tmp} ]]; then |
| if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then |
| echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!" |
| else |
| echo "WARNING: The symbols in ${file} should be submit to google!!!" |
| fi |
| cat ${symbol_tmp} |
| echo -e "\n------------------------------------------------------------" |
| fi |
| rm ${symbol_tmp} |
| done |
| } |
| export -f abi_symbol_list_detect |
| |
| # this function is for kernel higher than 13-5.15 |
| function set_env_for_adjust_config_action () { |
| set -a # export the value changed to environment |
| . ${ROOT_DIR}/${BUILD_CONFIG} |
| set +a |
| export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}}) |
| export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR}) |
| export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist}) |
| |
| # set the version of clang bin |
| prebuilts_paths=( |
| CLANG_PREBUILT_BIN |
| BUILDTOOLS_PREBUILT_BIN |
| ) |
| for prebuilt_bin in "${prebuilts_paths[@]}"; do |
| prebuilt_bin=\${${prebuilt_bin}} |
| eval prebuilt_bin="${prebuilt_bin}" |
| if [ -n "${prebuilt_bin}" ]; then |
| # Mitigate dup paths |
| PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"} |
| PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} |
| fi |
| done |
| export PATH |
| |
| # support the ndk tools |
| if [[ -n "${NDK_TRIPLE}" ]]; then |
| NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23 |
| if [[ ! -d "${NDK_DIR}" ]]; then |
| # Kleaf/Bazel will checkout the ndk to a different directory than build.sh. |
| NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk |
| if [[ ! -d "${NDK_DIR}" ]]; then |
| echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2 |
| echo "Did you forget to checkout prebuilts/ndk?" 1>&2 |
| exit 1 |
| fi |
| fi |
| USERCFLAGS="--target=${NDK_TRIPLE} " |
| USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot " |
| # up two line set the CONFIG_CC_CAN_LINK CONFIG_CC_CAN_LINK_STATIC CONFIG_UAPI_HEADER_TEST to y |
| else |
| USERCFLAGS="--sysroot=/dev/null" |
| fi |
| export USERCFLAGS USERLDFLAGS |
| } |
| |
| # adjust_config_action concerns three types of cmd: |
| # parameters: |
| # --menuconfig: make menuconfig manually based on different gki standard |
| # --basicconfig: only config kernel with google original gki_defconfig as base |
| # --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference |
| function adjust_config_action () { |
| if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then |
| # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig |
| HERMETIC_TOOLCHAIN=0 |
| |
| if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then |
| source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh" |
| source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh" |
| else |
| set_env_for_adjust_config_action |
| fi |
| |
| orig_config=$(mktemp) |
| orig_defconfig=$(mktemp) |
| out_config="${OUT_DIR}/.config" |
| out_defconfig="${OUT_DIR}/defconfig" |
| changed_config=$(mktemp) |
| changed_defconfig=$(mktemp) |
| |
| if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it |
| set -x |
| defconfig_name=`basename ${GKI_BASE_CONFIG}` |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name}) |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) |
| cp ${out_config} ${orig_config} |
| cp ${out_defconfig} ${orig_defconfig} |
| if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig) |
| fi |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) |
| ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config} |
| ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig} |
| if [ "${ARCH}" = "arm" ]; then |
| cp ${out_defconfig} ${GKI_BASE_CONFIG} |
| fi |
| set +x # show the difference between the gki_defconfig and the config after make menuconfig |
| echo |
| echo "========================================================" |
| echo "==================== .config diff ====================" |
| cat ${changed_config} |
| echo "==================== defconfig diff ====================" |
| cat ${changed_defconfig} |
| echo "========================================================" |
| echo |
| elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig |
| set -x |
| pre_defconfig_cmds |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG}) |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory |
| diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig |
| post_defconfig_cmds |
| set +x |
| else # make menuconfig based on config with different gki standard |
| set -x |
| pre_defconfig_cmds |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG}) |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) |
| cp ${out_config} ${orig_config} |
| cp ${out_defconfig} ${orig_defconfig} |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig) |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) |
| ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config} |
| ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig} |
| 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 "==================== .config diff ====================" |
| cat ${changed_config} |
| echo "==================== defconfig diff ====================" |
| cat ${changed_defconfig} |
| echo "========================================================" |
| echo |
| fi |
| rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig} |
| exit |
| fi |
| } |
| export -f adjust_config_action |
| |
| # function build_part_of_kernel can only build part of kernel such as image modules or dtbs |
| # parameter: |
| # --image: only build image |
| # --modules: only build kernel modules |
| # --dtbs: only build dtbs |
| function build_part_of_kernel () { |
| if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then |
| old_path=${PATH} |
| if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then |
| source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh" |
| source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh" |
| else |
| source ${ROOT_DIR}/${BUILD_CONFIG} |
| export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}}) |
| export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR}) |
| export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist}) |
| tool_args+=("LLVM=1") |
| tool_args+=("DEPMOD=${DEPMOD}") |
| fi |
| |
| if [[ ! -f ${OUT_DIR}/.config ]]; then |
| pre_defconfig_cmds |
| set -x |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG}) |
| set +x |
| post_defconfig_cmds |
| fi |
| |
| if [[ -n ${IMAGE} ]]; then |
| 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=0x00208000 uImage) |
| fi |
| set +x |
| fi |
| mkdir -p ${DIST_DIR} |
| 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=$(real_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 |
| 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=$(real_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 |
| } |
| export -f build_part_of_kernel |
| |
| function export_env_variable () { |
| export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH |
| export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT GKI_CONFIG UPGRADE_PROJECT ANDROID_VERSION FAST_BUILD CHECK_GKI_20 DEV_CONFIGS |
| export FULL_KERNEL_VERSION BAZEL PREBUILT_GKI KASAN |
| export AMLOGIC_R_USER_DIFFCONFIG=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/amlogic_r_user_diff.fragment |
| |
| echo ROOT_DIR=$ROOT_DIR |
| echo ABI=${ABI} BUILD_CONFIG=${BUILD_CONFIG} LTO=${LTO} KMI_SYMBOL_LIST_STRICT_MODE=${KMI_SYMBOL_LIST_STRICT_MODE} CHECK_DEFCONFIG=${CHECK_DEFCONFIG} MANUAL_INSMOD_MODULE=${MANUAL_INSMOD_MODULE} |
| 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} ANDROID_VERSION=${ANDROID_VERSION} FAST_BUILD=${FAST_BUILD} CHECK_GKI_20=${CHECK_GKI_20} |
| echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL} PREBUILT_GKI=${PREBUILT_GKI} KASAN=${KASAN} |
| echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD} |
| echo AMLOGIC_R_USER_DIFFCONFIG=${AMLOGIC_R_USER_DIFFCONFIG} CONFIG_BOOTIMAGE=${CONFIG_BOOTIMAGE} |
| } |
| 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 |
| ;; |
| --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 |
| ;; |
| --fast_build) |
| FAST_BUILD=1 |
| shift |
| ;; |
| --upgrade) |
| UPGRADE_PROJECT=$2 |
| ANDROID_VERSION=$2 |
| GKI_CONFIG= |
| VA=1 |
| shift |
| ;; |
| --manual_insmod_module) |
| MANUAL_INSMOD_MODULE=1 |
| shift |
| ;; |
| --check_gki_20) |
| CHECK_GKI_20=1 |
| GKI_CONFIG=gki_20 |
| LTO=none |
| shift |
| ;; |
| --dev_config) |
| DEV_CONFIGS=$2 |
| VA=1 |
| shift |
| ;; |
| --use_prebuilt_gki) |
| PREBUILT_GKI=$2 |
| VA=1 |
| shift |
| ;; |
| --kasan) |
| KASAN=1 |
| LTO=none |
| 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 |
| CONFIGFILE=${ROOT_DIR}/${FRAGMENT_CONFIG} |
| if [[ -f "${CONFIGFILE}" && `grep "CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET=y" "${CONFIGFILE}"` ]]; then |
| ARGS+=("LOADADDR=0x02008000") |
| else |
| ARGS+=("LOADADDR=0x00208000") |
| fi |
| 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 |
| |
| if [[ -d ${KERNEL_DIR}/.git ]]; then |
| auto_patch_to_common_dir |
| else |
| echo "WARNING: no git, auto patch skip!!!" |
| export SYS_SKIP_GIT=1 |
| fi |
| |
| if [[ ! -f ${BUILD_DIR}/build_abi.sh && ${BAZEL} == 0 ]]; 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 |
| |
| 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 [[ -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} |
| if [[ $? -ne 0 ]]; then |
| echo "auto patch error!" |
| exit 1 |
| fi |
| fi |
| |
| if [[ ${ONLY_PATCH} -eq "1" ]]; then |
| cd ${CURRENT_DIR} |
| exit |
| fi |
| } |
| export -f auto_patch_to_common_dir |
| |
| function build_ext_modules() { |
| for EXT_MOD in ${EXT_MODULES}; do |
| EXT_MOD_REL=$(real_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_files_to_dist_dir () { |
| 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 |
| fi |
| } |
| export -f copy_modules_files_to_dist_dir |
| |
| function copy_files_to_dist_dir () { |
| echo "========================================================" |
| echo " Copying files" |
| 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 |
| } |
| export -f copy_files_to_dist_dir |
| |
| function make_dtbo() { |
| if [[ -n "${BUILD_DTBO_IMG}" ]]; then |
| echo "========================================================" |
| echo " Creating dtbo image at ${DIST_DIR}/dtbo.img" |
| ( |
| cd ${OUT_DIR} |
| mkdtimg create "${DIST_DIR}"/dtbo.img ${MKDTIMG_FLAGS} ${MKDTIMG_DTBOS} |
| ) |
| fi |
| } |
| export -f make_dtbo |
| |
| function installing_UAPI_kernel_headers () { |
| if [ -z "${SKIP_CP_KERNEL_HDR}" ]; then |
| echo "========================================================" |
| echo " Installing UAPI kernel headers:" |
| mkdir -p "${KERNEL_UAPI_HEADERS_DIR}/usr" |
| make -C ${OUT_DIR} O=${OUT_DIR} ${TOOL_ARGS} \ |
| INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" "${MAKE_ARGS[@]}" \ |
| headers_install |
| # The kernel makefiles create files named ..install.cmd and .install which |
| # are only side products. We don't want those. Let's delete them. |
| find ${KERNEL_UAPI_HEADERS_DIR} \( -name ..install.cmd -o -name .install \) -exec rm '{}' + |
| KERNEL_UAPI_HEADERS_TAR=${DIST_DIR}/kernel-uapi-headers.tar.gz |
| echo " Copying kernel UAPI headers to ${KERNEL_UAPI_HEADERS_TAR}" |
| tar -czf ${KERNEL_UAPI_HEADERS_TAR} --directory=${KERNEL_UAPI_HEADERS_DIR} usr/ |
| fi |
| } |
| export -f installing_UAPI_kernel_headers |
| |
| function copy_kernel_headers_to_compress () { |
| if [ -z "${SKIP_CP_KERNEL_HDR}" ] ; then |
| echo "========================================================" |
| KERNEL_HEADERS_TAR=${DIST_DIR}/kernel-headers.tar.gz |
| echo " Copying kernel headers to ${KERNEL_HEADERS_TAR}" |
| pushd $ROOT_DIR/$KERNEL_DIR |
| find arch include $OUT_DIR -name *.h -print0 \ |
| | tar -czf $KERNEL_HEADERS_TAR \ |
| --absolute-names \ |
| --dereference \ |
| --transform "s,.*$OUT_DIR,," \ |
| --transform "s,^,kernel-headers/," \ |
| --null -T - |
| popd |
| fi |
| } |
| export -f copy_kernel_headers_to_compress |
| |
| function set_default_parameters_for_32bit () { |
| tool_args=() |
| prebuilts_paths=( |
| CLANG_PREBUILT_BIN |
| CLANGTOOLS_PREBUILT_BIN |
| RUST_PREBUILT_BIN |
| LZ4_PREBUILTS_BIN |
| DTC_PREBUILTS_BIN |
| LIBUFDT_PREBUILTS_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") |
| # Reset a bunch of variables that the kernel's top level Makefile does, just |
| # in case someone tries to use these binaries in this script such as in |
| # initramfs generation below. |
| HOSTCC=clang |
| HOSTCXX=clang++ |
| CC=clang |
| LD=ld.lld |
| AR=llvm-ar |
| NM=llvm-nm |
| OBJCOPY=llvm-objcopy |
| OBJDUMP=llvm-objdump |
| OBJSIZE=llvm-size |
| READELF=llvm-readelf |
| STRIP=llvm-strip |
| else |
| if [ -n "${HOSTCC}" ]; then |
| tool_args+=("HOSTCC=${HOSTCC}") |
| fi |
| |
| if [ -n "${CC}" ]; then |
| tool_args+=("CC=${CC}") |
| if [ -z "${HOSTCC}" ]; then |
| tool_args+=("HOSTCC=${CC}") |
| fi |
| fi |
| |
| if [ -n "${LD}" ]; then |
| tool_args+=("LD=${LD}" "HOSTLD=${LD}") |
| fi |
| |
| if [ -n "${NM}" ]; then |
| tool_args+=("NM=${NM}") |
| fi |
| |
| if [ -n "${OBJCOPY}" ]; then |
| tool_args+=("OBJCOPY=${OBJCOPY}") |
| fi |
| 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 |
| |
| # Have host compiler use LLD and compiler-rt. |
| LLD_COMPILER_RT="-fuse-ld=lld --rtlib=compiler-rt" |
| if [[ -n "${NDK_TRIPLE}" ]]; then |
| NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23 |
| |
| if [[ ! -d "${NDK_DIR}" ]]; then |
| # Kleaf/Bazel will checkout the ndk to a different directory than |
| # build.sh. |
| NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk |
| if [[ ! -d "${NDK_DIR}" ]]; then |
| echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2 |
| echo "Did you forget to checkout prebuilts/ndk?" 1>&2 |
| exit 1 |
| fi |
| fi |
| USERCFLAGS="--target=${NDK_TRIPLE} " |
| USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot " |
| # Some kernel headers trigger -Wunused-function for unused static functions |
| # with clang; GCC does not warn about unused static inline functions. The |
| # kernel sets __attribute__((maybe_unused)) on such functions when W=1 is |
| # not set. |
| USERCFLAGS+="-Wno-unused-function " |
| # To help debug these flags, consider commenting back in the following, and |
| # add `echo $@ > /tmp/log.txt` and `2>>/tmp/log.txt` to the invocation of $@ |
| # in scripts/cc-can-link.sh. |
| #USERCFLAGS+=" -Wl,--verbose -v" |
| # We need to set -fuse-ld=lld for Android's build env since AOSP LLVM's |
| # clang is not configured to use LLD by default, and BFD has been |
| # intentionally removed. This way CC_CAN_LINK can properly link the test in |
| # scripts/cc-can-link.sh. |
| USERLDFLAGS="${LLD_COMPILER_RT} " |
| USERLDFLAGS+="--target=${NDK_TRIPLE} " |
| else |
| USERCFLAGS="--sysroot=/dev/null" |
| fi |
| |
| #setting_the_default_output_dir |
| export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}}) |
| export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR}) |
| export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist}) |
| export UNSTRIPPED_DIR=${DIST_DIR}/unstripped |
| export UNSTRIPPED_MODULES_ARCHIVE=unstripped_modules.tar.gz |
| export MODULES_ARCHIVE=modules.tar.gz |
| export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging) |
| export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private) |
| export KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers) |
| export INITRAMFS_STAGING_DIR=${MODULES_STAGING_DIR}/initramfs_staging |
| export SYSTEM_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/system_dlkm_staging |
| export VENDOR_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/vendor_dlkm_staging |
| export MKBOOTIMG_STAGING_DIR="${MODULES_STAGING_DIR}/mkbootimg_staging" |
| export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic) |
| |
| CONFIGFILE=${ROOT_DIR}/${FRAGMENT_CONFIG} |
| echo "android 32bit config file: ${CONFIGFILE}" |
| if [[ -f "${CONFIGFILE}" && `grep "CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET=y" "${CONFIGFILE}"` ]]; then |
| # FRAGMENT_CONFIG: ./common_drivers/arch/arm/configs/amlogic_a32.fragment |
| tool_args+=("LOADADDR=0x02008000") |
| else |
| tool_args+=("LOADADDR=0x00208000") |
| fi |
| tool_args+=("DEPMOD=depmod") |
| tool_args+=("KCONFIG_EXT_MODULES_PREFIX=${KCONFIG_EXT_MODULES_PREFIX}") |
| tool_args+=("KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}") |
| TOOL_ARGS="${tool_args[@]}" |
| |
| mkdir -p ${OUT_DIR} |
| if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then |
| rm -rf ${COMMON_OUT_DIR} |
| fi |
| |
| source ${ROOT_DIR}/build/kernel/build_utils.sh |
| |
| DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic |
| DTS_EXT_DIR=$(real_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_32bit |
| |
| function generating_test_mappings_zip () { |
| echo "========================================================" |
| echo " Generating test_mappings.zip" |
| TEST_MAPPING_FILES=${OUT_DIR}/test_mapping_files.txt |
| find ${ROOT_DIR} -name TEST_MAPPING \ |
| -not -path "${ROOT_DIR}/\.git*" \ |
| -not -path "${ROOT_DIR}/\.repo*" \ |
| -not -path "${ROOT_DIR}/out*" \ |
| > ${TEST_MAPPING_FILES} |
| soong_zip -o ${DIST_DIR}/test_mappings.zip -C ${ROOT_DIR} -l ${TEST_MAPPING_FILES} |
| } |
| export -f generating_test_mappings_zip |
| |
| function setting_up_for_build () { |
| echo "========================================================" |
| echo " Setting up for build" |
| if [ "${SKIP_MRPROPER}" != "1" ] ; then |
| set -x |
| (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" mrproper) |
| set +x |
| fi |
| } |
| export -f setting_up_for_build |
| |
| function build_kernel_for_32bit () { |
| set -x |
| pre_defconfig_cmds |
| if [ "${SKIP_DEFCONFIG}" != "1" ] ; then |
| (cd ${KERNEL_DIR} && make ARCH=arm ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG}) |
| fi |
| post_defconfig_cmds |
| |
| echo "========================================================" |
| echo " Building kernel" |
| |
| 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 && |
| if [[ -n ${ANDROID_PROJECT} ]]; then |
| if [[ -n ${DTBO_DEVICETREE} ]]; then |
| make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} \ |
| ${TOOL_ARGS} ${DTBO_DEVICETREE} -j12 |
| else |
| make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} \ |
| ${TOOL_ARGS} android_overlay_dt.dtbo -j12 |
| fi |
| fi |
| make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit |
| set +x |
| } |
| export -f build_kernel_for_32bit |
| |
| function modules_install_for_32bit () { |
| set -x |
| if [ "${BUILD_INITRAMFS}" = "1" -o -n "${IN_KERNEL_MODULES}" ]; then |
| echo "========================================================" |
| echo " Installing kernel modules into staging directory" |
| |
| (cd ${OUT_DIR} && make ARCH=arm O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_STRIP=1 \ |
| INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install) |
| fi |
| set +x |
| } |
| export -f modules_install_for_32bit |
| |
| function build_android_32bit () { |
| |
| source ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32 |
| |
| CC_CLANG=1 |
| |
| set_default_parameters_for_32bit |
| |
| export USERCFLAGS USERLDFLAGS BRANCH KMI_GENERATION |
| export HOSTCC HOSTCXX CC LD AR NM OBJCOPY OBJDUMP OBJSIZE READELF STRIP PATH KCONFIG_CONFIG |
| export KERNEL_DIR ROOT_DIR OUT_DIR TOOL_ARGS MODULE_STRIP_FLAG DEPMOD INSTALL_MOD_DIR COMMON_OUT_DIR |
| |
| setting_up_for_build |
| |
| mkdir -p ${DIST_DIR} ${MODULES_STAGING_DIR} |
| |
| build_kernel_for_32bit |
| |
| eval ${POST_KERNEL_BUILD_CMDS} |
| |
| modules_install_for_32bit |
| |
| build_ext_modules |
| |
| set -x |
| eval ${EXTRA_CMDS} |
| set +x |
| |
| copy_files_to_dist_dir |
| |
| installing_UAPI_kernel_headers |
| |
| copy_kernel_headers_to_compress |
| |
| copy_modules_files_to_dist_dir |
| |
| make_dtbo |
| |
| } |
| export -f build_android_32bit |
| |
| function clear_files_compressed_with_lzma_in_last_build () { |
| file_lzma="Image.lzma boot-lzma.img boot.img.lzma" |
| for remove_file in ${file_lzma} |
| do |
| file_path=`find -name $remove_file` |
| if [[ -n ${file_path} ]]; then |
| rm ${file_path} |
| fi |
| done |
| } |
| export -f clear_files_compressed_with_lzma_in_last_build |
| |
| function generate_lzma_format_image () { |
| { |
| pushd ${DIST_DIR} |
| lzma -z -k -f -9 Image |
| popd |
| } & |
| |
| { |
| pushd ${DIST_DIR} |
| lzma -z -k -f -9 boot.img |
| popd |
| } & |
| } |
| export -f generate_lzma_format_image |
| |
| function build_ext_module_without_bazel { |
| if [ ${BAZEL} != 1 ];then |
| return |
| fi |
| echo "========================================================" |
| echo "build ext_modules without bazel" |
| if [ ! -f ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir.tar.gz ];then |
| echo "WARNING ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir.tar.gz not exit!" |
| return |
| fi |
| |
| [ -d ${ROOT_DIR}/out/${BRANCH}/common/ ] && rm -rf ${ROOT_DIR}/out/${BRANCH}/common/ |
| rsync -aL --include='scripts/***' --include='include/***' --include='*/' --include='*Makefile*' --exclude='*' ${ROOT_DIR}/common/ ${ROOT_DIR}/out/${BRANCH}/common/ |
| local kernel_src=${ROOT_DIR}/out/${BRANCH}/common/ |
| |
| mkdir ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir |
| tar -xzvf ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir.tar.gz -C ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir/ > /dev/null 2>&1 |
| rsync -aL --exclude='Makefile' --exclude='localversion' --chmod=F+w ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir/ ${kernel_src} |
| rm -rf ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir/ |
| |
| . ${ROOT_DIR}/${KERNEL_DIR}/build.config.constants |
| CROSS_COMPILE_PATH=${ROOT_DIR}/prebuilts/clang/host/linux-x86/clang-${CLANG_VERSION}/bin |
| local tool_args="CC=${CROSS_COMPILE_PATH}/clang LD=${CROSS_COMPILE_PATH}/ld.lld LLVM=1" |
| local ext_module |
| echo "# MODULE_BUILD_WITHOUT_BAZEL (ROOT_DIR=${ROOT_DIR})" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order |
| for ext_module in ${EXT_MODULES_ANDROID}; do |
| local ext_mod_rel=$(real_path ${ext_module} ${kernel_src}) |
| make ARCH=${ARCH} ${tool_args} -C ${ext_module} M=${ext_mod_rel} KERNEL_SRC=${kernel_src} "$@" |
| find ${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols/ \; |
| find ${ext_module} -type f -name "*.ko" \ |
| -exec ${CROSS_COMPILE_PATH}/llvm-objcopy --strip-debug {} \; \ |
| -exec cp {} ${OUT_AMLOGIC_DIR}/ext_modules/ \; |
| |
| [ -f ${ext_module}/modules.order ] && cat ${ext_module}/modules.order >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order |
| done |
| echo "========================================================" |
| } |
| export -f build_ext_module_without_bazel |