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