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