#!/bin/bash -e if [ -z "${BASH_SOURCE}" ];then echo Not in bash, switching to it... bash -c "$0 $@" fi function choose_board() { echo echo "You're building on Linux" echo "Lunch menu...pick a combo:" echo "" echo "0. non-rockchip boards" echo ${RK_DEFCONFIG_ARRAY[@]} | xargs -n 1 | sed "=" | sed "N;s/\n/. /" local INDEX while true; do read -p "Which would you like? [0]: " INDEX INDEX=$((${INDEX:-0} - 1)) if [ "$INDEX" -eq -1 ]; then echo "Lunching for non-rockchip boards..." unset TARGET_OUTPUT_DIR unset RK_BUILD_CONFIG break; fi if echo $INDEX | grep -vq [^0-9]; then RK_BUILD_CONFIG="${RK_DEFCONFIG_ARRAY[$INDEX]}" [ -n "$RK_BUILD_CONFIG" ] && break fi echo echo "Choice not available. Please try again." echo done } function lunch_rockchip() { TARGET_DIR_NAME="$RK_BUILD_CONFIG" export TARGET_OUTPUT_DIR="$BUILDROOT_OUTPUT_DIR/$TARGET_DIR_NAME" mkdir -p $TARGET_OUTPUT_DIR || return echo "===========================================" echo echo "#TARGET_BOARD=`echo $RK_BUILD_CONFIG | cut -d '_' -f 2`" echo "#OUTPUT_DIR=output/$TARGET_DIR_NAME" echo "#CONFIG=${RK_BUILD_CONFIG}_defconfig" echo echo "===========================================" make -C ${BUILDROOT_DIR} O="$TARGET_OUTPUT_DIR" \ "$RK_BUILD_CONFIG"_defconfig CONFIG=${TARGET_OUTPUT_DIR}/.config cp ${CONFIG}{,.new} mv ${CONFIG}{.old,} &>/dev/null || return 0 make -C ${BUILDROOT_DIR} O="$TARGET_OUTPUT_DIR" olddefconfig &>/dev/null if ! diff ${CONFIG}{,.new}; then read -t 10 -p "Found old config, override it? (y/n):" YES [ "$YES" = "n" ] || cp ${CONFIG}{.new,} fi } function main() { SCRIPT_PATH=$(realpath ${BASH_SOURCE}) SCRIPT_DIR=$(dirname ${SCRIPT_PATH}) BUILDROOT_DIR=$(dirname ${SCRIPT_DIR}) BUILDROOT_OUTPUT_DIR=${BUILDROOT_DIR}/output TOP_DIR=$(dirname ${BUILDROOT_DIR}) echo Top of tree: ${TOP_DIR} RK_DEFCONFIG_ARRAY=( $(cd ${BUILDROOT_DIR}/configs/; ls rockchip_* | \ sed "s/_defconfig$//" | grep "$1" | sort) ) unset RK_BUILD_CONFIG RK_DEFCONFIG_ARRAY_LEN=${#RK_DEFCONFIG_ARRAY[@]} case $RK_DEFCONFIG_ARRAY_LEN in 0) echo No available configs${1:+" for: $1"} ;; 1) RK_BUILD_CONFIG=${RK_DEFCONFIG_ARRAY[0]} ;; *) if [ "$1" = ${RK_DEFCONFIG_ARRAY[0]} ]; then # Prefer exact-match RK_BUILD_CONFIG=$1 else choose_board fi ;; esac [ -n "$RK_BUILD_CONFIG" ] || return source ${TOP_DIR}/device/rockchip/.BoardConfig.mk lunch_rockchip # Set alias alias croot="cd ${TOP_DIR}" alias broot="cd ${BUILDROOT_DIR}" alias bpkg="cd ${BUILDROOT_DIR}/package" alias bout="cd ${TARGET_OUTPUT_DIR}" } if [ "${BASH_SOURCE}" == "$0" ];then echo This script is executed directly... bash -c "source \"$0\" \"$@\"; bash" else main "$@" fi