1*4882a593Smuzhiyun#!/bin/bash -e 2*4882a593Smuzhiyun 3*4882a593Smuzhiyunif [ -z "$BASH_SOURCE" ];then 4*4882a593Smuzhiyun echo "Not in bash, switching to it..." 5*4882a593Smuzhiyun "$(find . -maxdepth 3 -name envsetup.sh | head -n 1 || echo /bin/bash)" 6*4882a593Smuzhiyunfi 7*4882a593Smuzhiyun 8*4882a593Smuzhiyunchoose_board() 9*4882a593Smuzhiyun{ 10*4882a593Smuzhiyun echo 11*4882a593Smuzhiyun echo "Pick a board:" 12*4882a593Smuzhiyun echo "" 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun echo ${RK_BOARD_ARRAY[@]} | xargs -n 1 | sed "=" | sed "N;s/\n/. /" 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun local INDEX 17*4882a593Smuzhiyun while true; do 18*4882a593Smuzhiyun read -p "Which would you like? [1]: " INDEX 19*4882a593Smuzhiyun INDEX=$((${INDEX:-1} - 1)) 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun if echo $INDEX | grep -vq [^0-9]; then 22*4882a593Smuzhiyun RK_BOARD="${RK_BOARD_ARRAY[$INDEX]}" 23*4882a593Smuzhiyun [ -z "$RK_BOARD" ] || break 24*4882a593Smuzhiyun fi 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun echo 27*4882a593Smuzhiyun echo "Choice not available. Please try again." 28*4882a593Smuzhiyun echo 29*4882a593Smuzhiyun done 30*4882a593Smuzhiyun} 31*4882a593Smuzhiyun 32*4882a593Smuzhiyunsetup_board() 33*4882a593Smuzhiyun{ 34*4882a593Smuzhiyun export BUILDROOT_OUTPUT_DIR="$BUILDROOT_DIR/output/$RK_BOARD" 35*4882a593Smuzhiyun BMAKE="make -C $BUILDROOT_DIR O=$BUILDROOT_OUTPUT_DIR" 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun if [ $RK_BOARD_ARRAY_LEN -eq 0 ]; then 38*4882a593Smuzhiyun echo "Continue without defconfig..." 39*4882a593Smuzhiyun ${BMAKE} olddefconfig &>/dev/null 40*4882a593Smuzhiyun return 0 41*4882a593Smuzhiyun fi 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun ${BMAKE} "${RK_BOARD}_defconfig" 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun CONFIG="$BUILDROOT_OUTPUT_DIR/.config" 46*4882a593Smuzhiyun cp "$CONFIG" "$CONFIG.new" 47*4882a593Smuzhiyun mv "$CONFIG.old" "$CONFIG" &>/dev/null || return 0 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun ${BMAKE} olddefconfig &>/dev/null 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun if ! diff "$CONFIG" "$CONFIG.new"; then 52*4882a593Smuzhiyun read -t 10 -p "Found old config, override it? (y/n):" YES 53*4882a593Smuzhiyun [ "$YES" = "n" ] || cp "$CONFIG.new" "$CONFIG" 54*4882a593Smuzhiyun fi 55*4882a593Smuzhiyun} 56*4882a593Smuzhiyun 57*4882a593Smuzhiyunbpkg() 58*4882a593Smuzhiyun{ 59*4882a593Smuzhiyun case "${1:-dir}" in 60*4882a593Smuzhiyun dir) 61*4882a593Smuzhiyun if [ -n "$2" ]; then 62*4882a593Smuzhiyun find "$BUILDROOT_OUTPUT_DIR/build/" -maxdepth 1 \ 63*4882a593Smuzhiyun -type d -name "*$2*" | head -n 1 || \ 64*4882a593Smuzhiyun echo "no pkg build dir for $2." >&2 65*4882a593Smuzhiyun else 66*4882a593Smuzhiyun echo $(realpath "$PWD") | \ 67*4882a593Smuzhiyun grep -oE ".*/output/[^/]*/build/[^/]*" || \ 68*4882a593Smuzhiyun echo "not in a pkg build dir." >&2 69*4882a593Smuzhiyun fi 70*4882a593Smuzhiyun ;; 71*4882a593Smuzhiyun *) 72*4882a593Smuzhiyun bpkg dir $1 73*4882a593Smuzhiyun ;; 74*4882a593Smuzhiyun esac 75*4882a593Smuzhiyun} 76*4882a593Smuzhiyun 77*4882a593Smuzhiyunbpkg_run() 78*4882a593Smuzhiyun{ 79*4882a593Smuzhiyun DIR=$(bpkg dir $2) 80*4882a593Smuzhiyun [ -d "$DIR" ] || return 1 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun for stage in $1; do 83*4882a593Smuzhiyun case "$stage" in 84*4882a593Smuzhiyun reconfig) bpkg_run "configure build install deploy" $2 ;; 85*4882a593Smuzhiyun rebuild) bpkg_run "build install deploy" $2 ;; 86*4882a593Smuzhiyun reinstall) bpkg_run "install deploy" $2 ;; 87*4882a593Smuzhiyun reconfig-update) 88*4882a593Smuzhiyun bpkg_run "configure build install update" $2 ;; 89*4882a593Smuzhiyun rebuild-update) bpkg_run "build install update" $2 ;; 90*4882a593Smuzhiyun reinstall-update) bpkg_run "install update" $2 ;; 91*4882a593Smuzhiyun configure|build|deploy|update) 92*4882a593Smuzhiyun SCRIPT="$DIR/.$stage.sh" 93*4882a593Smuzhiyun [ -x "$SCRIPT" ] || return 1 94*4882a593Smuzhiyun "$SCRIPT" || return 1 95*4882a593Smuzhiyun ;; 96*4882a593Smuzhiyun install) 97*4882a593Smuzhiyun SCRIPT="$DIR/.staging_install.sh" 98*4882a593Smuzhiyun if [ -x "$SCRIPT" ]; then 99*4882a593Smuzhiyun "$SCRIPT" || return 1 100*4882a593Smuzhiyun fi 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun SCRIPT="$DIR/.target_install.sh" 103*4882a593Smuzhiyun if [ -x "$SCRIPT" ]; then 104*4882a593Smuzhiyun "$SCRIPT" || return 1 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun SCRIPT="$DIR/.image_install.sh" 107*4882a593Smuzhiyun if [ -x "$SCRIPT" ]; then 108*4882a593Smuzhiyun "$SCRIPT" || return 1 109*4882a593Smuzhiyun fi 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun continue 112*4882a593Smuzhiyun fi 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun SCRIPT="$DIR/.host_install.sh" 115*4882a593Smuzhiyun if [ -x "$SCRIPT" ]; then 116*4882a593Smuzhiyun "$SCRIPT" || return 1 117*4882a593Smuzhiyun continue 118*4882a593Smuzhiyun fi 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun return 1 121*4882a593Smuzhiyun ;; 122*4882a593Smuzhiyun *) 123*4882a593Smuzhiyun echo "Unknown stage: $stage" 124*4882a593Smuzhiyun return 1 125*4882a593Smuzhiyun ;; 126*4882a593Smuzhiyun esac 127*4882a593Smuzhiyun done 128*4882a593Smuzhiyun} 129*4882a593Smuzhiyun 130*4882a593Smuzhiyunmain() 131*4882a593Smuzhiyun{ 132*4882a593Smuzhiyun SCRIPTS_DIR="$(dirname "$(realpath "$BASH_SOURCE")")" 133*4882a593Smuzhiyun BUILDROOT_DIR="$(dirname "$SCRIPTS_DIR")" 134*4882a593Smuzhiyun TOP_DIR="$(dirname "$BUILDROOT_DIR")" 135*4882a593Smuzhiyun echo "Top of tree: $TOP_DIR" 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun RK_BOARD_ARRAY=( 138*4882a593Smuzhiyun $(cd "$BUILDROOT_DIR/configs/"; ls rockchip_* | \ 139*4882a593Smuzhiyun grep "$(basename "$1")" | sed "s/_defconfig$//" | sort) 140*4882a593Smuzhiyun ) 141*4882a593Smuzhiyun RK_BOARD_ARRAY_LEN=${#RK_BOARD_ARRAY[@]} 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun case $RK_BOARD_ARRAY_LEN in 144*4882a593Smuzhiyun 0) 145*4882a593Smuzhiyun # Try existing output without defconfig 146*4882a593Smuzhiyun BOARD="$(echo "$1" | \ 147*4882a593Smuzhiyun sed "s#^\(output/\|\)rockchip_\([^/]*\).*#\2#")" 148*4882a593Smuzhiyun RK_BOARD="${BOARD:+rockchip_$BOARD}" 149*4882a593Smuzhiyun CONFIG="$BUILDROOT_DIR/output/$RK_BOARD/.config" 150*4882a593Smuzhiyun if [ ! -f "$CONFIG" ]; then 151*4882a593Smuzhiyun unset RK_BOARD 152*4882a593Smuzhiyun echo "No available configs${1:+" for: $1"}" 153*4882a593Smuzhiyun return 154*4882a593Smuzhiyun fi 155*4882a593Smuzhiyun ;; 156*4882a593Smuzhiyun 1) 157*4882a593Smuzhiyun RK_BOARD=${RK_BOARD_ARRAY[0]} 158*4882a593Smuzhiyun ;; 159*4882a593Smuzhiyun *) 160*4882a593Smuzhiyun if [ "$1" = ${RK_BOARD_ARRAY[0]} ]; then 161*4882a593Smuzhiyun # Prefer exact-match 162*4882a593Smuzhiyun RK_BOARD="$1" 163*4882a593Smuzhiyun else 164*4882a593Smuzhiyun choose_board 165*4882a593Smuzhiyun fi 166*4882a593Smuzhiyun ;; 167*4882a593Smuzhiyun esac 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun setup_board 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun # Set alias 172*4882a593Smuzhiyun alias croot='cd "$TOP_DIR"' 173*4882a593Smuzhiyun alias broot='cd "$BUILDROOT_DIR"' 174*4882a593Smuzhiyun alias bmake='make -C "$BUILDROOT_OUTPUT_DIR"' 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun alias bconfig='bpkg_run configure' 177*4882a593Smuzhiyun alias bbuild='bpkg_run build' 178*4882a593Smuzhiyun alias binstall='bpkg_run install' 179*4882a593Smuzhiyun alias bdeploy='bpkg_run deploy' 180*4882a593Smuzhiyun alias bupdate='bpkg_run update' 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun alias breconfig='bpkg_run reconfig' 183*4882a593Smuzhiyun alias brebuild='bpkg_run rebuild' 184*4882a593Smuzhiyun alias breinstall='bpkg_run reinstall' 185*4882a593Smuzhiyun alias breconfig-update='bpkg_run reconfig-update' 186*4882a593Smuzhiyun alias brebuild-update='bpkg_run rebuild-update' 187*4882a593Smuzhiyun alias breinstall-update='bpkg_run reinstall-update' 188*4882a593Smuzhiyun} 189*4882a593Smuzhiyun 190*4882a593Smuzhiyunmain "$@" 191*4882a593Smuzhiyun 192*4882a593Smuzhiyunif [ "$BASH_SOURCE" == "$0" ];then 193*4882a593Smuzhiyun # This script is executed directly 194*4882a593Smuzhiyun /bin/bash 195*4882a593Smuzhiyunfi 196