xref: /OK3568_Linux_fs/buildroot/build/envsetup.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash -e
2*4882a593Smuzhiyun
3*4882a593Smuzhiyunif [ -z "$BASH_SOURCE" ];then
4*4882a593Smuzhiyun	echo "Not in bash, switching to it..."
5*4882a593Smuzhiyun	"$(find . -maxdepth 3 -name envsetup.sh | head -n 1 || echo /bin/bash)"
6*4882a593Smuzhiyunfi
7*4882a593Smuzhiyun
8*4882a593Smuzhiyunchoose_board()
9*4882a593Smuzhiyun{
10*4882a593Smuzhiyun	echo
11*4882a593Smuzhiyun	echo "Pick a board:"
12*4882a593Smuzhiyun	echo ""
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun	echo ${RK_BOARD_ARRAY[@]} | xargs -n 1 | sed "=" | sed "N;s/\n/. /"
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun	local INDEX
17*4882a593Smuzhiyun	while true; do
18*4882a593Smuzhiyun		read -p "Which would you like? [1]: " INDEX
19*4882a593Smuzhiyun		INDEX=$((${INDEX:-1} - 1))
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun		if echo $INDEX | grep -vq [^0-9]; then
22*4882a593Smuzhiyun			RK_BOARD="${RK_BOARD_ARRAY[$INDEX]}"
23*4882a593Smuzhiyun			[ -z "$RK_BOARD" ] || break
24*4882a593Smuzhiyun		fi
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun		echo
27*4882a593Smuzhiyun		echo "Choice not available. Please try again."
28*4882a593Smuzhiyun		echo
29*4882a593Smuzhiyun	done
30*4882a593Smuzhiyun}
31*4882a593Smuzhiyun
32*4882a593Smuzhiyunsetup_board()
33*4882a593Smuzhiyun{
34*4882a593Smuzhiyun	export BUILDROOT_OUTPUT_DIR="$BUILDROOT_DIR/output/$RK_BOARD"
35*4882a593Smuzhiyun	BMAKE="make -C $BUILDROOT_DIR O=$BUILDROOT_OUTPUT_DIR"
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun	if [ $RK_BOARD_ARRAY_LEN -eq 0 ]; then
38*4882a593Smuzhiyun		echo "Continue without defconfig..."
39*4882a593Smuzhiyun		${BMAKE} olddefconfig &>/dev/null
40*4882a593Smuzhiyun		return 0
41*4882a593Smuzhiyun	fi
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun	${BMAKE} "${RK_BOARD}_defconfig"
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun	CONFIG="$BUILDROOT_OUTPUT_DIR/.config"
46*4882a593Smuzhiyun	cp "$CONFIG" "$CONFIG.new"
47*4882a593Smuzhiyun	mv "$CONFIG.old" "$CONFIG" &>/dev/null || return 0
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun	${BMAKE} olddefconfig &>/dev/null
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun	if ! diff "$CONFIG" "$CONFIG.new"; then
52*4882a593Smuzhiyun		read -t 10 -p "Found old config, override it? (y/n):" YES
53*4882a593Smuzhiyun		[ "$YES" = "n" ] || cp "$CONFIG.new" "$CONFIG"
54*4882a593Smuzhiyun	fi
55*4882a593Smuzhiyun}
56*4882a593Smuzhiyun
57*4882a593Smuzhiyunbpkg()
58*4882a593Smuzhiyun{
59*4882a593Smuzhiyun	case "${1:-dir}" in
60*4882a593Smuzhiyun		dir)
61*4882a593Smuzhiyun			if [ -n "$2" ]; then
62*4882a593Smuzhiyun				find "$BUILDROOT_OUTPUT_DIR/build/" -maxdepth 1 \
63*4882a593Smuzhiyun					-type d -name "*$2*" | head -n 1 || \
64*4882a593Smuzhiyun					echo "no pkg build dir for $2." >&2
65*4882a593Smuzhiyun			else
66*4882a593Smuzhiyun				echo $(realpath "$PWD") | \
67*4882a593Smuzhiyun					grep -oE ".*/output/[^/]*/build/[^/]*" || \
68*4882a593Smuzhiyun					echo "not in a pkg build dir." >&2
69*4882a593Smuzhiyun			fi
70*4882a593Smuzhiyun			;;
71*4882a593Smuzhiyun		*)
72*4882a593Smuzhiyun			bpkg dir $1
73*4882a593Smuzhiyun			;;
74*4882a593Smuzhiyun	esac
75*4882a593Smuzhiyun}
76*4882a593Smuzhiyun
77*4882a593Smuzhiyunbpkg_run()
78*4882a593Smuzhiyun{
79*4882a593Smuzhiyun	DIR=$(bpkg dir $2)
80*4882a593Smuzhiyun	[ -d "$DIR" ] || return 1
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun	for stage in $1; do
83*4882a593Smuzhiyun		case "$stage" in
84*4882a593Smuzhiyun			reconfig) bpkg_run "configure build install deploy" $2 ;;
85*4882a593Smuzhiyun			rebuild) bpkg_run "build install deploy" $2 ;;
86*4882a593Smuzhiyun			reinstall) bpkg_run "install deploy" $2 ;;
87*4882a593Smuzhiyun			reconfig-update)
88*4882a593Smuzhiyun				bpkg_run "configure build install update" $2 ;;
89*4882a593Smuzhiyun			rebuild-update) bpkg_run "build install update" $2 ;;
90*4882a593Smuzhiyun			reinstall-update) bpkg_run "install update" $2 ;;
91*4882a593Smuzhiyun			configure|build|deploy|update)
92*4882a593Smuzhiyun				SCRIPT="$DIR/.$stage.sh"
93*4882a593Smuzhiyun				[ -x "$SCRIPT" ] || return 1
94*4882a593Smuzhiyun				"$SCRIPT" || return 1
95*4882a593Smuzhiyun				;;
96*4882a593Smuzhiyun			install)
97*4882a593Smuzhiyun				SCRIPT="$DIR/.staging_install.sh"
98*4882a593Smuzhiyun				if [ -x "$SCRIPT" ]; then
99*4882a593Smuzhiyun					"$SCRIPT" || return 1
100*4882a593Smuzhiyun				fi
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun				SCRIPT="$DIR/.target_install.sh"
103*4882a593Smuzhiyun				if [ -x "$SCRIPT" ]; then
104*4882a593Smuzhiyun					"$SCRIPT" || return 1
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun					SCRIPT="$DIR/.image_install.sh"
107*4882a593Smuzhiyun					if [ -x "$SCRIPT" ]; then
108*4882a593Smuzhiyun						"$SCRIPT" || return 1
109*4882a593Smuzhiyun					fi
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun					continue
112*4882a593Smuzhiyun				fi
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun				SCRIPT="$DIR/.host_install.sh"
115*4882a593Smuzhiyun				if [ -x "$SCRIPT" ]; then
116*4882a593Smuzhiyun					"$SCRIPT" || return 1
117*4882a593Smuzhiyun					continue
118*4882a593Smuzhiyun				fi
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun				return 1
121*4882a593Smuzhiyun				;;
122*4882a593Smuzhiyun			*)
123*4882a593Smuzhiyun				echo "Unknown stage: $stage"
124*4882a593Smuzhiyun				return 1
125*4882a593Smuzhiyun				;;
126*4882a593Smuzhiyun		esac
127*4882a593Smuzhiyun	done
128*4882a593Smuzhiyun}
129*4882a593Smuzhiyun
130*4882a593Smuzhiyunmain()
131*4882a593Smuzhiyun{
132*4882a593Smuzhiyun	SCRIPTS_DIR="$(dirname "$(realpath "$BASH_SOURCE")")"
133*4882a593Smuzhiyun	BUILDROOT_DIR="$(dirname "$SCRIPTS_DIR")"
134*4882a593Smuzhiyun	TOP_DIR="$(dirname "$BUILDROOT_DIR")"
135*4882a593Smuzhiyun	echo "Top of tree: $TOP_DIR"
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun	RK_BOARD_ARRAY=(
138*4882a593Smuzhiyun		$(cd "$BUILDROOT_DIR/configs/"; ls rockchip_* | \
139*4882a593Smuzhiyun			grep "$(basename "$1")" | sed "s/_defconfig$//" | sort)
140*4882a593Smuzhiyun	)
141*4882a593Smuzhiyun	RK_BOARD_ARRAY_LEN=${#RK_BOARD_ARRAY[@]}
142*4882a593Smuzhiyun
143*4882a593Smuzhiyun	case $RK_BOARD_ARRAY_LEN in
144*4882a593Smuzhiyun		0)
145*4882a593Smuzhiyun			# Try existing output without defconfig
146*4882a593Smuzhiyun			BOARD="$(echo "$1" | \
147*4882a593Smuzhiyun				sed "s#^\(output/\|\)rockchip_\([^/]*\).*#\2#")"
148*4882a593Smuzhiyun			RK_BOARD="${BOARD:+rockchip_$BOARD}"
149*4882a593Smuzhiyun			CONFIG="$BUILDROOT_DIR/output/$RK_BOARD/.config"
150*4882a593Smuzhiyun			if [ ! -f "$CONFIG" ]; then
151*4882a593Smuzhiyun				unset RK_BOARD
152*4882a593Smuzhiyun				echo "No available configs${1:+" for: $1"}"
153*4882a593Smuzhiyun				return
154*4882a593Smuzhiyun			fi
155*4882a593Smuzhiyun			;;
156*4882a593Smuzhiyun		1)
157*4882a593Smuzhiyun			RK_BOARD=${RK_BOARD_ARRAY[0]}
158*4882a593Smuzhiyun			;;
159*4882a593Smuzhiyun		*)
160*4882a593Smuzhiyun			if [ "$1" = ${RK_BOARD_ARRAY[0]} ]; then
161*4882a593Smuzhiyun				# Prefer exact-match
162*4882a593Smuzhiyun				RK_BOARD="$1"
163*4882a593Smuzhiyun			else
164*4882a593Smuzhiyun				choose_board
165*4882a593Smuzhiyun			fi
166*4882a593Smuzhiyun			;;
167*4882a593Smuzhiyun	esac
168*4882a593Smuzhiyun
169*4882a593Smuzhiyun	setup_board
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun	# Set alias
172*4882a593Smuzhiyun	alias croot='cd "$TOP_DIR"'
173*4882a593Smuzhiyun	alias broot='cd "$BUILDROOT_DIR"'
174*4882a593Smuzhiyun	alias bmake='make -C "$BUILDROOT_OUTPUT_DIR"'
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun	alias bconfig='bpkg_run configure'
177*4882a593Smuzhiyun	alias bbuild='bpkg_run build'
178*4882a593Smuzhiyun	alias binstall='bpkg_run install'
179*4882a593Smuzhiyun	alias bdeploy='bpkg_run deploy'
180*4882a593Smuzhiyun	alias bupdate='bpkg_run update'
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun	alias breconfig='bpkg_run reconfig'
183*4882a593Smuzhiyun	alias brebuild='bpkg_run rebuild'
184*4882a593Smuzhiyun	alias breinstall='bpkg_run reinstall'
185*4882a593Smuzhiyun	alias breconfig-update='bpkg_run reconfig-update'
186*4882a593Smuzhiyun	alias brebuild-update='bpkg_run rebuild-update'
187*4882a593Smuzhiyun	alias breinstall-update='bpkg_run reinstall-update'
188*4882a593Smuzhiyun}
189*4882a593Smuzhiyun
190*4882a593Smuzhiyunmain "$@"
191*4882a593Smuzhiyun
192*4882a593Smuzhiyunif [ "$BASH_SOURCE" == "$0" ];then
193*4882a593Smuzhiyun	# This script is executed directly
194*4882a593Smuzhiyun	/bin/bash
195*4882a593Smuzhiyunfi
196