1*4882a593Smuzhiyun#!/bin/bash -e 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunMAKE="make ${DEBUG:+V=1} -C $(realpath --relative-to="$SDK_DIR" "$COMMON_DIR")" 4*4882a593Smuzhiyun 5*4882a593Smuzhiyunswitch_defconfig() 6*4882a593Smuzhiyun{ 7*4882a593Smuzhiyun DEFCONFIG="$1" 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun [ -f "$DEFCONFIG" ] || DEFCONFIG="$CHIP_DIR/$DEFCONFIG" 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun if [ ! -f "$DEFCONFIG" ]; then 12*4882a593Smuzhiyun echo "No such defconfig: $1" 13*4882a593Smuzhiyun exit 1 14*4882a593Smuzhiyun fi 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun echo "Switching to defconfig: $DEFCONFIG" 17*4882a593Smuzhiyun rm -f "$RK_DEFCONFIG_LINK" 18*4882a593Smuzhiyun ln -rsf "$DEFCONFIG" "$RK_DEFCONFIG_LINK" 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun DEFCONFIG="$(realpath "$DEFCONFIG")" 21*4882a593Smuzhiyun rm -rf "$CHIP_DIR" 22*4882a593Smuzhiyun ln -rsf "$(dirname "$DEFCONFIG")" "$CHIP_DIR" 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun $MAKE $(basename "$DEFCONFIG") 25*4882a593Smuzhiyun exit 0 26*4882a593Smuzhiyun} 27*4882a593Smuzhiyun 28*4882a593Smuzhiyunrockchip_defconfigs() 29*4882a593Smuzhiyun{ 30*4882a593Smuzhiyun cd "$CHIP_DIR" 31*4882a593Smuzhiyun ls rockchip_defconfig 2>/dev/null || true 32*4882a593Smuzhiyun ls *_defconfig | grep -v rockchip_defconfig || true 33*4882a593Smuzhiyun} 34*4882a593Smuzhiyun 35*4882a593Smuzhiyunchoose_defconfig() 36*4882a593Smuzhiyun{ 37*4882a593Smuzhiyun DEFCONFIG_ARRAY=( $(rockchip_defconfigs | grep "$1" || true) ) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun DEFCONFIG_ARRAY_LEN=${#DEFCONFIG_ARRAY[@]} 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun case $DEFCONFIG_ARRAY_LEN in 42*4882a593Smuzhiyun 0) 43*4882a593Smuzhiyun echo "No available defconfigs${1:+" for: $1"}" 44*4882a593Smuzhiyun return 1 45*4882a593Smuzhiyun ;; 46*4882a593Smuzhiyun 1) DEFCONFIG=${DEFCONFIG_ARRAY[0]} ;; 47*4882a593Smuzhiyun *) 48*4882a593Smuzhiyun if [ "$1" = ${DEFCONFIG_ARRAY[0]} ]; then 49*4882a593Smuzhiyun # Prefer exact-match 50*4882a593Smuzhiyun DEFCONFIG="$1" 51*4882a593Smuzhiyun else 52*4882a593Smuzhiyun echo "Pick a defconfig:" 53*4882a593Smuzhiyun echo "" 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun echo ${DEFCONFIG_ARRAY[@]} | xargs -n 1 | \ 56*4882a593Smuzhiyun sed "=" | sed "N;s/\n/. /" 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun local INDEX 59*4882a593Smuzhiyun read -p "Which would you like? [1]: " INDEX 60*4882a593Smuzhiyun INDEX=$((${INDEX:-1} - 1)) 61*4882a593Smuzhiyun DEFCONFIG="${DEFCONFIG_ARRAY[$INDEX]}" 62*4882a593Smuzhiyun fi 63*4882a593Smuzhiyun ;; 64*4882a593Smuzhiyun esac 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun switch_defconfig $DEFCONFIG 67*4882a593Smuzhiyun} 68*4882a593Smuzhiyun 69*4882a593Smuzhiyunchoose_chip() 70*4882a593Smuzhiyun{ 71*4882a593Smuzhiyun CHIP_ARRAY=( $(ls "$CHIPS_DIR" | grep "$1" || true) ) 72*4882a593Smuzhiyun CHIP_ARRAY_LEN=${#CHIP_ARRAY[@]} 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun case $CHIP_ARRAY_LEN in 75*4882a593Smuzhiyun 0) 76*4882a593Smuzhiyun echo "No available chips${1:+" for: $1"}" 77*4882a593Smuzhiyun return 1 78*4882a593Smuzhiyun ;; 79*4882a593Smuzhiyun 1) CHIP=${CHIP_ARRAY[0]} ;; 80*4882a593Smuzhiyun *) 81*4882a593Smuzhiyun if [ "$1" = ${CHIP_ARRAY[0]} ]; then 82*4882a593Smuzhiyun # Prefer exact-match 83*4882a593Smuzhiyun CHIP="$1" 84*4882a593Smuzhiyun else 85*4882a593Smuzhiyun echo "Pick a chip:" 86*4882a593Smuzhiyun echo "" 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun echo ${CHIP_ARRAY[@]} | xargs -n 1 | sed "=" | \ 89*4882a593Smuzhiyun sed "N;s/\n/. /" 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun local INDEX 92*4882a593Smuzhiyun read -p "Which would you like? [1]: " INDEX 93*4882a593Smuzhiyun INDEX=$((${INDEX:-1} - 1)) 94*4882a593Smuzhiyun CHIP="${CHIP_ARRAY[$INDEX]}" 95*4882a593Smuzhiyun fi 96*4882a593Smuzhiyun ;; 97*4882a593Smuzhiyun esac 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun rm -rf "$CHIP_DIR" 100*4882a593Smuzhiyun ln -rsf "$CHIPS_DIR/$CHIP" "$CHIP_DIR" 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun choose_defconfig $2 103*4882a593Smuzhiyun} 104*4882a593Smuzhiyun 105*4882a593Smuzhiyunprepare_config() 106*4882a593Smuzhiyun{ 107*4882a593Smuzhiyun [ -e "$CHIP_DIR" ] || choose_chip 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun cd "$DEVICE_DIR" 110*4882a593Smuzhiyun rm -f $(ls "$CHIPS_DIR") 111*4882a593Smuzhiyun ln -rsf "$(readlink "$CHIP_DIR")" . 112*4882a593Smuzhiyun cd "$SDK_DIR" 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun if [ ! -r "$RK_DEFCONFIG_LINK" ]; then 115*4882a593Smuzhiyun echo "WARN: $RK_DEFCONFIG_LINK not exists" 116*4882a593Smuzhiyun choose_defconfig 117*4882a593Smuzhiyun return 0 118*4882a593Smuzhiyun fi 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun DEFCONFIG=$(basename "$(realpath "$RK_DEFCONFIG_LINK")") 121*4882a593Smuzhiyun if [ ! "$RK_DEFCONFIG_LINK" -ef "$CHIP_DIR/$DEFCONFIG" ]; then 122*4882a593Smuzhiyun echo "WARN: $RK_DEFCONFIG_LINK is invalid" 123*4882a593Smuzhiyun choose_defconfig 124*4882a593Smuzhiyun return 0 125*4882a593Smuzhiyun fi 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun if [ "$RK_CONFIG" -ot "$RK_DEFCONFIG_LINK" ]; then 128*4882a593Smuzhiyun echo "WARN: $RK_CONFIG is out-dated" 129*4882a593Smuzhiyun $MAKE $DEFCONFIG &>/dev/null 130*4882a593Smuzhiyun return 0 131*4882a593Smuzhiyun fi 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun CONFIG_DIR="$(dirname "$RK_CONFIG_IN")" 134*4882a593Smuzhiyun if find "$CONFIG_DIR" -cnewer "$RK_CONFIG" | grep -q ""; then 135*4882a593Smuzhiyun echo "WARN: $CONFIG_DIR is updated" 136*4882a593Smuzhiyun $MAKE $DEFCONFIG &>/dev/null 137*4882a593Smuzhiyun return 0 138*4882a593Smuzhiyun fi 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun CFG="RK_DEFCONFIG=\"$(realpath "$RK_DEFCONFIG_LINK")\"" 141*4882a593Smuzhiyun if ! grep -wq "$CFG" "$RK_CONFIG"; then 142*4882a593Smuzhiyun echo "WARN: $RK_CONFIG is invalid" 143*4882a593Smuzhiyun $MAKE $DEFCONFIG &>/dev/null 144*4882a593Smuzhiyun return 0 145*4882a593Smuzhiyun fi 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun if [ "$RK_CONFIG" -nt "${RK_CONFIG}.old" ]; then 148*4882a593Smuzhiyun $MAKE olddefconfig &>/dev/null 149*4882a593Smuzhiyun touch "${RK_CONFIG}.old" 150*4882a593Smuzhiyun fi 151*4882a593Smuzhiyun} 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun# Hooks 154*4882a593Smuzhiyun 155*4882a593Smuzhiyunusage_hook() 156*4882a593Smuzhiyun{ 157*4882a593Smuzhiyun echo -e "chip[:<chip>[:<config>]] \tchoose chip" 158*4882a593Smuzhiyun echo -e "defconfig[:<config>] \tchoose defconfig" 159*4882a593Smuzhiyun echo -e " *_defconfig \tswitch to specified defconfig" 160*4882a593Smuzhiyun echo " available defconfigs:" 161*4882a593Smuzhiyun echo "$(ls "$CHIP_DIR/" | grep "defconfig$" | sed "s/^/\t/")" 162*4882a593Smuzhiyun echo -e " olddefconfig \tresolve any unresolved symbols in .config" 163*4882a593Smuzhiyun echo -e " savedefconfig \tsave current config to defconfig" 164*4882a593Smuzhiyun echo -e " menuconfig \tinteractive curses-based configurator" 165*4882a593Smuzhiyun echo -e "config \tmodify SDK defconfig" 166*4882a593Smuzhiyun} 167*4882a593Smuzhiyun 168*4882a593Smuzhiyunclean_hook() 169*4882a593Smuzhiyun{ 170*4882a593Smuzhiyun $MAKE distclean 171*4882a593Smuzhiyun} 172*4882a593Smuzhiyun 173*4882a593SmuzhiyunINIT_CMDS="chip defconfig lunch .*_defconfig olddefconfig savedefconfig menuconfig config default" 174*4882a593Smuzhiyuninit_hook() 175*4882a593Smuzhiyun{ 176*4882a593Smuzhiyun case "${1:-default}" in 177*4882a593Smuzhiyun chip) shift; choose_chip $@ ;; 178*4882a593Smuzhiyun lunch|defconfig) shift; choose_defconfig $@ ;; 179*4882a593Smuzhiyun *_defconfig) switch_defconfig "$1" ;; 180*4882a593Smuzhiyun olddefconfig | savedefconfig | menuconfig) $MAKE $1 ;; 181*4882a593Smuzhiyun config) 182*4882a593Smuzhiyun $MAKE menuconfig 183*4882a593Smuzhiyun $MAKE savedefconfig 184*4882a593Smuzhiyun ;; 185*4882a593Smuzhiyun default) prepare_config ;; # End of init 186*4882a593Smuzhiyun *) usage ;; 187*4882a593Smuzhiyun esac 188*4882a593Smuzhiyun} 189*4882a593Smuzhiyun 190*4882a593Smuzhiyunsource "${BUILD_HELPER:-$(dirname "$(realpath "$0")")/../build-hooks/build-helper}" 191*4882a593Smuzhiyun 192*4882a593Smuzhiyuninit_hook $@ 193