xref: /OK3568_Linux_fs/buildroot/build/envsetup.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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