xref: /OK3568_Linux_fs/device/rockchip/common/scripts/mk-config.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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