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