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