196 lines
4.2 KiB
Bash
196 lines
4.2 KiB
Bash
|
#!/bin/bash -e
|
||
|
|
||
|
if [ -z "$BASH_SOURCE" ];then
|
||
|
echo "Not in bash, switching to it..."
|
||
|
"$(find . -maxdepth 3 -name envsetup.sh | head -n 1 || echo /bin/bash)"
|
||
|
fi
|
||
|
|
||
|
choose_board()
|
||
|
{
|
||
|
echo
|
||
|
echo "Pick a board:"
|
||
|
echo ""
|
||
|
|
||
|
echo ${RK_BOARD_ARRAY[@]} | xargs -n 1 | sed "=" | sed "N;s/\n/. /"
|
||
|
|
||
|
local INDEX
|
||
|
while true; do
|
||
|
read -p "Which would you like? [1]: " INDEX
|
||
|
INDEX=$((${INDEX:-1} - 1))
|
||
|
|
||
|
if echo $INDEX | grep -vq [^0-9]; then
|
||
|
RK_BOARD="${RK_BOARD_ARRAY[$INDEX]}"
|
||
|
[ -z "$RK_BOARD" ] || break
|
||
|
fi
|
||
|
|
||
|
echo
|
||
|
echo "Choice not available. Please try again."
|
||
|
echo
|
||
|
done
|
||
|
}
|
||
|
|
||
|
setup_board()
|
||
|
{
|
||
|
export BUILDROOT_OUTPUT_DIR="$BUILDROOT_DIR/output/$RK_BOARD"
|
||
|
BMAKE="make -C $BUILDROOT_DIR O=$BUILDROOT_OUTPUT_DIR"
|
||
|
|
||
|
if [ $RK_BOARD_ARRAY_LEN -eq 0 ]; then
|
||
|
echo "Continue without defconfig..."
|
||
|
${BMAKE} olddefconfig &>/dev/null
|
||
|
return 0
|
||
|
fi
|
||
|
|
||
|
${BMAKE} "${RK_BOARD}_defconfig"
|
||
|
|
||
|
CONFIG="$BUILDROOT_OUTPUT_DIR/.config"
|
||
|
cp "$CONFIG" "$CONFIG.new"
|
||
|
mv "$CONFIG.old" "$CONFIG" &>/dev/null || return 0
|
||
|
|
||
|
${BMAKE} olddefconfig &>/dev/null
|
||
|
|
||
|
if ! diff "$CONFIG" "$CONFIG.new"; then
|
||
|
read -t 10 -p "Found old config, override it? (y/n):" YES
|
||
|
[ "$YES" = "n" ] || cp "$CONFIG.new" "$CONFIG"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
bpkg()
|
||
|
{
|
||
|
case "${1:-dir}" in
|
||
|
dir)
|
||
|
if [ -n "$2" ]; then
|
||
|
find "$BUILDROOT_OUTPUT_DIR/build/" -maxdepth 1 \
|
||
|
-type d -name "*$2*" | head -n 1 || \
|
||
|
echo "no pkg build dir for $2." >&2
|
||
|
else
|
||
|
echo $(realpath "$PWD") | \
|
||
|
grep -oE ".*/output/[^/]*/build/[^/]*" || \
|
||
|
echo "not in a pkg build dir." >&2
|
||
|
fi
|
||
|
;;
|
||
|
*)
|
||
|
bpkg dir $1
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
bpkg_run()
|
||
|
{
|
||
|
DIR=$(bpkg dir $2)
|
||
|
[ -d "$DIR" ] || return 1
|
||
|
|
||
|
for stage in $1; do
|
||
|
case "$stage" in
|
||
|
reconfig) bpkg_run "configure build install deploy" $2 ;;
|
||
|
rebuild) bpkg_run "build install deploy" $2 ;;
|
||
|
reinstall) bpkg_run "install deploy" $2 ;;
|
||
|
reconfig-update)
|
||
|
bpkg_run "configure build install update" $2 ;;
|
||
|
rebuild-update) bpkg_run "build install update" $2 ;;
|
||
|
reinstall-update) bpkg_run "install update" $2 ;;
|
||
|
configure|build|deploy|update)
|
||
|
SCRIPT="$DIR/.$stage.sh"
|
||
|
[ -x "$SCRIPT" ] || return 1
|
||
|
"$SCRIPT" || return 1
|
||
|
;;
|
||
|
install)
|
||
|
SCRIPT="$DIR/.staging_install.sh"
|
||
|
if [ -x "$SCRIPT" ]; then
|
||
|
"$SCRIPT" || return 1
|
||
|
fi
|
||
|
|
||
|
SCRIPT="$DIR/.target_install.sh"
|
||
|
if [ -x "$SCRIPT" ]; then
|
||
|
"$SCRIPT" || return 1
|
||
|
|
||
|
SCRIPT="$DIR/.image_install.sh"
|
||
|
if [ -x "$SCRIPT" ]; then
|
||
|
"$SCRIPT" || return 1
|
||
|
fi
|
||
|
|
||
|
continue
|
||
|
fi
|
||
|
|
||
|
SCRIPT="$DIR/.host_install.sh"
|
||
|
if [ -x "$SCRIPT" ]; then
|
||
|
"$SCRIPT" || return 1
|
||
|
continue
|
||
|
fi
|
||
|
|
||
|
return 1
|
||
|
;;
|
||
|
*)
|
||
|
echo "Unknown stage: $stage"
|
||
|
return 1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
}
|
||
|
|
||
|
main()
|
||
|
{
|
||
|
SCRIPTS_DIR="$(dirname "$(realpath "$BASH_SOURCE")")"
|
||
|
BUILDROOT_DIR="$(dirname "$SCRIPTS_DIR")"
|
||
|
TOP_DIR="$(dirname "$BUILDROOT_DIR")"
|
||
|
echo "Top of tree: $TOP_DIR"
|
||
|
|
||
|
RK_BOARD_ARRAY=(
|
||
|
$(cd "$BUILDROOT_DIR/configs/"; ls rockchip_* | \
|
||
|
grep "$(basename "$1")" | sed "s/_defconfig$//" | sort)
|
||
|
)
|
||
|
RK_BOARD_ARRAY_LEN=${#RK_BOARD_ARRAY[@]}
|
||
|
|
||
|
case $RK_BOARD_ARRAY_LEN in
|
||
|
0)
|
||
|
# Try existing output without defconfig
|
||
|
BOARD="$(echo "$1" | \
|
||
|
sed "s#^\(output/\|\)rockchip_\([^/]*\).*#\2#")"
|
||
|
RK_BOARD="${BOARD:+rockchip_$BOARD}"
|
||
|
CONFIG="$BUILDROOT_DIR/output/$RK_BOARD/.config"
|
||
|
if [ ! -f "$CONFIG" ]; then
|
||
|
unset RK_BOARD
|
||
|
echo "No available configs${1:+" for: $1"}"
|
||
|
return
|
||
|
fi
|
||
|
;;
|
||
|
1)
|
||
|
RK_BOARD=${RK_BOARD_ARRAY[0]}
|
||
|
;;
|
||
|
*)
|
||
|
if [ "$1" = ${RK_BOARD_ARRAY[0]} ]; then
|
||
|
# Prefer exact-match
|
||
|
RK_BOARD="$1"
|
||
|
else
|
||
|
choose_board
|
||
|
fi
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
setup_board
|
||
|
|
||
|
# Set alias
|
||
|
alias croot='cd "$TOP_DIR"'
|
||
|
alias broot='cd "$BUILDROOT_DIR"'
|
||
|
alias bmake='make -C "$BUILDROOT_OUTPUT_DIR"'
|
||
|
|
||
|
alias bconfig='bpkg_run configure'
|
||
|
alias bbuild='bpkg_run build'
|
||
|
alias binstall='bpkg_run install'
|
||
|
alias bdeploy='bpkg_run deploy'
|
||
|
alias bupdate='bpkg_run update'
|
||
|
|
||
|
alias breconfig='bpkg_run reconfig'
|
||
|
alias brebuild='bpkg_run rebuild'
|
||
|
alias breinstall='bpkg_run reinstall'
|
||
|
alias breconfig-update='bpkg_run reconfig-update'
|
||
|
alias brebuild-update='bpkg_run rebuild-update'
|
||
|
alias breinstall-update='bpkg_run reinstall-update'
|
||
|
}
|
||
|
|
||
|
main "$@"
|
||
|
|
||
|
if [ "$BASH_SOURCE" == "$0" ];then
|
||
|
# This script is executed directly
|
||
|
/bin/bash
|
||
|
fi
|