xref: /OK3568_Linux_fs/device/rockchip/common/scripts/mk-buildroot.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash -e
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunSCRIPTS_DIR="${SCRIPTS_DIR:-$(dirname "$(realpath "$0")")}"
4*4882a593SmuzhiyunSDK_DIR="${SDK_DIR:-$SCRIPTS_DIR/../../../..}"
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunBUILDROOT_BOARD=$1
7*4882a593SmuzhiyunROOTFS_OUTPUT_DIR="${2:-$SDK_DIR/output/buildroot}"
8*4882a593SmuzhiyunBUILDROOT_DIR="$SDK_DIR/buildroot"
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun"$SCRIPTS_DIR/check-buildroot.sh"
11*4882a593Smuzhiyun
12*4882a593SmuzhiyunBUILDROOT_OUTPUT_DIR="$BUILDROOT_DIR/output/$BUILDROOT_BOARD"
13*4882a593SmuzhiyunBUILDROOT_CONFIG="$BUILDROOT_OUTPUT_DIR/.config"
14*4882a593SmuzhiyunBUILDROOT_CONFIG_ORIG="$BUILDROOT_OUTPUT_DIR/.config.orig"
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun# Handle buildroot make
17*4882a593Smuzhiyunif [ "$2" = make ]; then
18*4882a593Smuzhiyun	shift
19*4882a593Smuzhiyun	shift
20*4882a593Smuzhiyun	if [ ! -r "$BUILDROOT_CONFIG" ]; then
21*4882a593Smuzhiyun		make -C "$BUILDROOT_DIR" O="$BUILDROOT_OUTPUT_DIR" \
22*4882a593Smuzhiyun			${BUILDROOT_BOARD}_defconfig
23*4882a593Smuzhiyun	fi
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun	case "$1" in
26*4882a593Smuzhiyun		external/*)
27*4882a593Smuzhiyun			TARGET=$1
28*4882a593Smuzhiyun			unset ARG
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun			COUNT=$(echo $1 | grep -o '-' | wc -l)
31*4882a593Smuzhiyun			for I in $(seq 1 $COUNT); do
32*4882a593Smuzhiyun				TARGET=$(echo $1 | cut -d'-' -f1-$I)
33*4882a593Smuzhiyun				ARG=$(echo $1 | cut -d'-' -f$(($I + 1))-)
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun				[ -d "$TARGET" ] || continue
36*4882a593Smuzhiyun				break
37*4882a593Smuzhiyun			done
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun			PKG="$(basename $(dirname \
40*4882a593Smuzhiyun				$(grep -rwl "$TARGET" \
41*4882a593Smuzhiyun				"$BUILDROOT_DIR/package")))"
42*4882a593Smuzhiyun			TARGET="$PKG${ARG:+-$ARG}"
43*4882a593Smuzhiyun			;;
44*4882a593Smuzhiyun		*) TARGET="$1" ;;
45*4882a593Smuzhiyun	esac
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun	shift
48*4882a593Smuzhiyun	echo "Buildroot make: $TARGET $@"
49*4882a593Smuzhiyun	make -C "$BUILDROOT_DIR" O="$BUILDROOT_OUTPUT_DIR" $TARGET $@
50*4882a593Smuzhiyun	exit
51*4882a593Smuzhiyunfi
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun# Save the original .config if exists
54*4882a593Smuzhiyunif [ -r "$BUILDROOT_CONFIG" ] && [ ! -r "$BUILDROOT_CONFIG_ORIG" ]; then
55*4882a593Smuzhiyun	cp "$BUILDROOT_CONFIG" "$BUILDROOT_CONFIG_ORIG"
56*4882a593Smuzhiyunfi
57*4882a593Smuzhiyun
58*4882a593Smuzhiyunmake -C "$BUILDROOT_DIR" O="$BUILDROOT_OUTPUT_DIR" ${BUILDROOT_BOARD}_defconfig
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun# Warn about config changes
61*4882a593Smuzhiyunif [ -r "$BUILDROOT_CONFIG_ORIG" ]; then
62*4882a593Smuzhiyun	if ! diff "$BUILDROOT_CONFIG" "$BUILDROOT_CONFIG_ORIG"; then
63*4882a593Smuzhiyun		echo -e "\e[35m"
64*4882a593Smuzhiyun		echo "Buildroot config changed!"
65*4882a593Smuzhiyun		echo "You might need to clean it before building:"
66*4882a593Smuzhiyun		echo "rm -rf $BUILDROOT_OUTPUT_DIR"
67*4882a593Smuzhiyun		echo -e "\e[0m"
68*4882a593Smuzhiyun		echo
69*4882a593Smuzhiyun	fi
70*4882a593Smuzhiyunfi
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun# Use buildroot images dir as image output dir
73*4882a593SmuzhiyunIMAGE_DIR="$BUILDROOT_OUTPUT_DIR/images"
74*4882a593Smuzhiyunrm -rf "$ROOTFS_OUTPUT_DIR"
75*4882a593Smuzhiyunmkdir -p "$IMAGE_DIR"
76*4882a593Smuzhiyunln -rsf "$IMAGE_DIR" "$ROOTFS_OUTPUT_DIR"
77*4882a593Smuzhiyuncd "${RK_LOG_DIR:-$ROOTFS_OUTPUT_DIR}"
78*4882a593Smuzhiyun
79*4882a593SmuzhiyunLOG_PREFIX="br-$(basename "$BUILDROOT_OUTPUT_DIR")"
80*4882a593SmuzhiyunLOG_FILE="$(start_log "$LOG_PREFIX" 2>/dev/null || echo $PWD/$LOG_PREFIX.log)"
81*4882a593Smuzhiyunln -rsf "$LOG_FILE" br.log
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun# Buildroot doesn't like it
84*4882a593Smuzhiyununset LD_LIBRARY_PATH
85*4882a593Smuzhiyun
86*4882a593Smuzhiyunif ! "$BUILDROOT_DIR"/utils/brmake -C "$BUILDROOT_DIR" O="$BUILDROOT_OUTPUT_DIR"; then
87*4882a593Smuzhiyun	echo "Failed to build $BUILDROOT_BOARD:"
88*4882a593Smuzhiyun	tail -n 100 "$LOG_FILE"
89*4882a593Smuzhiyun	echo -e "\e[35m"
90*4882a593Smuzhiyun	echo "Please check details in $LOG_FILE"
91*4882a593Smuzhiyun	echo -e "\e[0m"
92*4882a593Smuzhiyun	exit 1
93*4882a593Smuzhiyunfi
94*4882a593Smuzhiyun
95*4882a593Smuzhiyunecho "Log saved on $LOG_FILE"
96*4882a593Smuzhiyunecho "Generated images:"
97*4882a593Smuzhiyunls "$ROOTFS_OUTPUT_DIR"/rootfs.*
98*4882a593Smuzhiyun
99