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