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