asuswrt-merlin.ng/tools/build-all
2024-06-07 00:55:33 -04:00

426 lines
12 KiB
Bash
Executable file

#!/bin/sh
#######
### Asuswrt-Merlin.ng build script
### Expects you to have a copy of the sources at $SRC_LOC
### and model-specific copies as ~/amng.ac86, ~/amng.ac88, etc...
###
### Script will rsync between $SRC_LOC and the various ~/amng.XXX folders
######
### Start config
### Manual/hardcoded
# Append git revision
export BUILDREV=1
# Enable update server support (don't use if you build a fork!)
#export MERLINUPDATE=y
# rsync tree from central source tree before build.
# If set to "btrfs", then "cp --reflink" is used instead of rsync.
RSYNC_TREE=y
# Combined RT-AC68U image?
COMBINED=y
# Build ROG UI image for GT models in addition to regular image
BUILD_ROGUI=n
### Uncomment the models you wish to build.
BAC68=y
BAC88=y
BAC3100=y
BAC5300=y
BAC86=y
BGTAC2900=y
BAC68V4=y
BAX88=y
BGTAX11000=y
BAX56=y
BAX58=y
BAX86=y
BAX68=y
BGTAXE11000=y
BGTAX6000=y
BXT12=y
BGTAXE16000=y
BGTAX11000_PRO=y
BAX86_PRO=y
BAX88_PRO=y
BBE96=y
BGTBE98PRO=y
### Branches for each model
BRANCH_AC68=386_x
BRANCH_AC88=386_x
BRANCH_AC3100=386_x
BRANCH_AC5300=386_x
BRANCH_AC86=386_x
BRANCH_GTAC2900=386_x
BRANCH_AX88=3004.388
BRANCH_GTAX11000=3004.388
BRANCH_AX58=3004.388
BRANCH_AX56=3004.388
BRANCH_AX86=3004.388
BRANCH_AX68=3004.388
BRANCH_GTAXE11000=3004.388
BRANCH_AC68V4=386_x
BRANCH_GTAX6000=3004.388
BRANCH_XT12=3004.388
BRANCH_GTAXE16000=3004.388
BRANCH_GTAX11000_PRO=3004.388
BRANCH_AX86_PRO=3004.388
BRANCH_AX88_PRO=3004.388
BRANCH_BE96=3006.102
BRANCH_GTBE98_PRO=3006.102
### Paths
# Store built images there
STAGE_LOC="$HOME/images"
# Copy built images there
# Copy is done using scp, so it can be an ssh location
#FINAL_LOC=""
#FINAL_LOC=admin@router.asus.com:/mnt/sda1/Share
FINAL_LOC=/media/sf_Share
# Location of the original source code
SRC_LOC="$HOME/amng"
### End config
build_fw()
{
BRANCH="$4"
FWMODEL="$3"
SDKPATH="$2"
FWPATH="$1"
echo "*** $(date +%R) - Starting building $FWMODEL..."
cd "$HOME/$FWPATH/$SDKPATH" || exit 1
if make "$FWMODEL" > "output.txt" 2>&1; then
cd image || exit
if [ "$FWMODEL" = "rt-ac86u" ] || [ "$FWMODEL" = "gt-ac2900" ] || [ "$FWMODEL" = "rt-ax88u" ] || [ "$FWMODEL" = "gt-ax11000" ] ; then
rm *_cferom_ubi.w
FWNAME="$(find -- *_ubi.w | head -n 1)"
ZIPNAME="$(echo "$FWNAME" | sed 's~_ubi.w~~g').zip"
elif [ "$FWMODEL" = "rt-ax58u" ] || [ "$FWMODEL" = "rt-ac68u_v4" ]; then
rm *_cferom_puresqubi.w
FWNAME="$(find -- *_puresqubi.w | head -n 1)"
ZIPNAME="$(echo "$FWNAME" | sed 's~_puresqubi.w~~g').zip"
elif [ "$FWMODEL" = "rt-ax86u" ] || [ "$FWMODEL" = "rt-ax68u" ] ; then
rm *_cferom_pureubi.w # Broken cferom, do not use until fixed upstream
FWNAME="$(find -- *_pureubi.w | head -n 1)"
ZIPNAME="$(echo "$FWNAME" | sed 's~_pureubi.w~~g').zip"
elif [ "$FWMODEL" = "rt-ax56u" ] || [ "$FWMODEL" = "gt-axe11000" ] ; then
rm *_cferom_pureubi.w
FWNAME="$(find -- *_pureubi.w | head -n 1)"
ZIPNAME="$(echo "$FWNAME" | sed 's~_pureubi.w~~g').zip"
elif [ "$FWMODEL" = "gt-ax6000" ] || [ "$FWMODEL" = "xt12" ] || [ "$FWMODEL" = "gt-axe16000" ] || [ "$FWMODEL" = "gt-ax11000_pro" ] || [ "$FWMODEL" = "rt-ax86u_pro" ] || [ "$FWMODEL" = "rt-ax88u_pro" ] ; then
FWNAME="$(find -- *_nand_squashfs.pkgtb | head -n 1)"
ZIPNAME="$(echo "$FWNAME" | sed 's~_nand_squashfs.pkgtb~~g').zip"
elif [ "$FWMODEL" = "gt-be98_pro" ] || [ "$FWMODEL" = "gt-be98" ] || [ "$FWMODEL" = "rt-be96u" ] ; then
FWNAME="$(find -- *_nand_squashfs.pkgtb | head -n 1)"
ZIPNAME="$(echo "$FWNAME" | sed 's~_nand_squashfs.pkgtb~~g').zip"
else
FWNAME="$(find -- *.trx | head -n 1)"
ZIPNAME="$(echo "$FWNAME" | sed 's~.trx~~g').zip"
fi
cp "$FWNAME" "$STAGE_LOC/"
sha256sum "$FWNAME" > sha256sum.sha256
if [[ "$FWNAME" == *"3004_388"* ]]; then
CHANGELOG="Changelog-NG.txt"
elif [[ "$FWNAME" == *"3006_102"* ]]; then
CHANGELOG="Changelog-3006.txt"
else
CHANGELOG="Changelog-386.txt"
fi
cp $HOME/$FWPATH/$CHANGELOG $STAGE_LOC/
zip -qj "$STAGE_LOC/$ZIPNAME" "$FWNAME" "$STAGE_LOC/README-merlin.txt" "$STAGE_LOC/$CHANGELOG" "sha256sum.sha256" 2>/dev/null
echo "*** $(date +%R) - Done building $FWMODEL!"
if [ "$BUILD_ROGUI" = "y" ] && ([ "$FWMODEL" = "gt-axe16000" ] || [ "$FWMODEL" = "gt-ax6000" ] || [ "$FWMODEL" = "gt-ax11000_pro" ] || [ "$FWMODEL" = "gt-ac2900" ] || [ "$FWMODEL" = "gt-ax11000" ] || [ "$FWMODEL" = "gt-axe11000" ]) ; then
echo "--- $(date +%R) - Building ROG UI for $FWMODEL"
cd ..
sed -i 's/ROG_UI=n/ROG_UI=y/' target.mak
rm -rf image/*.pkgtb image/*.w .config
if make "$FWMODEL" > "output.txt" 2>&1; then
cd image
if [ "$FWMODEL" = "gt-ax6000" ] || [ "$FWMODEL" = "gt-axe16000" ] || [ "$FWMODEL" = "gt-ax11000_pro" ] ; then
FWNAME="$(find -- *rog*_nand_squashfs.pkgtb | head -n 1)"
elif [ "$FWMODEL" = "gt-ac2900" ] || [ "$FWMODEL" = "gt-ax11000" ] ; then
rm *_cferom_ubi.w
FWNAME="$(find -- *rog*_ubi.w | head -n 1)"
elif [ "$FWMODEL" = "gt-axe11000" ] ; then
rm *_cferom_pureubi.w
FWNAME="$(find -- *rog*_pureubi.w | head -n 1)"
else
echo "!!! $(date +%R) - $FWMODEL ROG build failed!"
return
fi
cp "$FWNAME" "$STAGE_LOC/"
sha256sum "$FWNAME" >> sha256sum.sha256
zip -qj "$STAGE_LOC/$ZIPNAME" "$FWNAME" "sha256sum.sha256" 2>/dev/null
echo "*** $(date +%R) - Done building ROG UI for $FWMODEL!"
else
echo "!!! $(date +%R) - $FWMODEL ROG build failed!"
return
fi
fi
else
echo "!!! $(date +%R) - $FWMODEL build failed!"
fi
}
clean_tree()
{
FWPATH="$1"
SDKPATH="$2"
FWMODEL="$3"
BRANCH="$4"
echo "*** $(date +%R) - Cleaning up $FWMODEL..."
if [ "$RSYNC_TREE" = "y" ]; then
echo "*** $(date +%R) - Updating $FWMODEL tree..."
rsync -a --del "$SRC_LOC/" "$HOME/$FWPATH"
elif [ "$RSYNC_TREE" = "btrfs" ]; then
echo "*** $(date +%R) - Copying $FWMODEL tree..."
rm -rf "$HOME/$FWPATH"
cp -ar --reflink=auto "$SRC_LOC" "$HOME/$FWPATH"
fi
cd "$HOME/$FWPATH" || exit 1
CURRENT=$(git branch | grep "\*" | cut -d ' ' -f2)
if [ "$CURRENT" != "$BRANCH" ] ; then
git checkout "$BRANCH"
fi
echo "*** $(date +%R) - $FWMODEL code ready."
}
# Initial cleanup
echo "--- $(date +%R) - Global cleanup..."
mkdir -p "$STAGE_LOC/backup"
mv "$STAGE_LOC"/* "$STAGE_LOC/backup/" 2>/dev/null
cp "$SRC_LOC/README-merlin.txt" "$STAGE_LOC/"
cp "$SRC_LOC"/Changelog*.txt "$STAGE_LOC/"
# Update all model trees
echo "--- $(date +%R) - Preparing trees"
if [ "$BAC68" = "y" ]; then
clean_tree amng.ac68 release/src-rt-6.x.4708 rt-ac68u $BRANCH_AC68
fi
if [ "$BAC3100" = "y" ]; then
clean_tree amng.ac3100 release/src-rt-7.14.114.x/src rt-ac3100 $BRANCH_AC3100
fi
if [ "$BAC88" = "y" ]; then
clean_tree amng.ac88 release/src-rt-7.14.114.x/src rt-ac88u $BRANCH_AC88
fi
if [ "$BAC5300" = "y" ]; then
clean_tree amng.ac5300 release/src-rt-7.14.114.x/src rt-ac5300 $BRANCH_AC5300
fi
if [ "$BAC86" = "y" ]; then
clean_tree amng.ac86 release/src-rt-5.02hnd rt-ac86u $BRANCH_AC86
fi
if [ "$BGTAC2900" = "y" ]; then
clean_tree amng.gt2900 release/src-rt-5.02hnd gt-ac2900 $BRANCH_GTAC2900
fi
if [ "$BAX88" = "y" ]; then
clean_tree amng.ax88 release/src-rt-5.02axhnd rt-ax88u $BRANCH_AX88
fi
if [ "$BGTAX11000" = "y" ]; then
clean_tree amng.gtax11000 release/src-rt-5.02axhnd gt-ax11000 $BRANCH_GTAX11000
fi
if [ "$BAX58" = "y" ]; then
clean_tree amng.ax58 release/src-rt-5.02axhnd.675x rt-ax58u $BRANCH_AX58
fi
if [ "$BAX56" = "y" ]; then
clean_tree amng.ax56 release/src-rt-5.02axhnd.675x rt-ax56u $BRANCH_AX56
fi
if [ "$BAX86" = "y" ]; then
clean_tree amng.ax86 release/src-rt-5.02L.07p2axhnd rt-ax86u $BRANCH_AX86
fi
if [ "$BAX68" = "y" ]; then
clean_tree amng.ax68 release/src-rt-5.02L.07p2axhnd rt-ax68u $BRANCH_AX68
fi
if [ "$BGTAXE11000" = "y" ]; then
clean_tree amng.gtaxe11000 release/src-rt-5.02L.07p2axhnd gt-axe11000 $BRANCH_GTAXE11000
fi
if [ "$BAC68V4" = "y" ]; then
clean_tree amng.ac68v4 release/src-rt-5.02L.07p2axhnd rt-ac68u_v4 $BRANCH_AC68V4
fi
if [ "$BGTAX6000" = "y" ]; then
clean_tree amng.gtax6000 release/src-rt-5.04axhnd.675x gt-ax6000 $BRANCH_GTAX6000
fi
if [ "$BXT12" = "y" ]; then
clean_tree amng.xt12 release/src-rt-5.04axhnd.675x xt12 $BRANCH_XT12
fi
if [ "$BGTAXE16000" = "y" ]; then
clean_tree amng.gtaxe16000 release/src-rt-5.04axhnd.675x gt-axe16000 $BRANCH_GTAXE16000
fi
if [ "$BGTAX11000_PRO" = "y" ]; then
clean_tree amng.gtax11000pro release/src-rt-5.04axhnd.675x gt-ax11000_pro $BRANCH_GTAX11000_PRO
fi
if [ "$BAX86_PRO" = "y" ]; then
clean_tree amng.ax86pro release/src-rt-5.04axhnd.675x rt-ax86u_pro $BRANCH_AX86_PRO
fi
if [ "$BAX88_PRO" = "y" ]; then
clean_tree amng.ax88pro release/src-rt-5.04axhnd.675x rt-ax88u_pro $BRANCH_AX88_PRO
fi
if [ "$BGTBE98PRO" = "y" ]; then
clean_tree amng.gtbe98pro amng.gtbe98pro/release/src-rt-5.04behnd.4916 gt-be98_pro $BRANCH_GTBE98_PRO
fi
if [ "$BBE96" = "y" ]; then
clean_tree amng.be96 amng.be96/release/src-rt-5.04behnd.4916 rt-be96u $BRANCH_BE96
fi
echo "--- $(date +%R) - All trees ready!"
# Launch parallel builds
echo "--- $(date +%R) - Launching all builds"
if [ "$BGTBE98PRO" = "y" ]; then
build_fw amng.gtbe98pro release/src-rt-5.04behnd.4916 gt-be98_pro &
fi
if [ "$BBE96" = "y" ]; then
build_fw amng.be96 release/src-rt-5.04behnd.4916 rt-be96u &
fi
if [ "$BGTAX6000" = "y" ]; then
build_fw amng.gtax6000 release/src-rt-5.04axhnd.675x gt-ax6000 &
fi
if [ "$BXT12" = "y" ]; then
build_fw amng.xt12 release/src-rt-5.04axhnd.675x xt12 &
fi
if [ "$BAX86_PRO" = "y" ]; then
build_fw amng.ax86pro release/src-rt-5.04axhnd.675x rt-ax86u_pro &
fi
if [ "$BAX88_PRO" = "y" ]; then
build_fw amng.ax88pro release/src-rt-5.04axhnd.675x rt-ax88u_pro &
fi
if [ "$BGTAX11000_PRO" = "y" ]; then
build_fw amng.gtax11000pro release/src-rt-5.04axhnd.675x gt-ax11000_pro &
fi
if [ "$BGTAXE16000" = "y" ]; then
build_fw amng.gtaxe16000 release/src-rt-5.04axhnd.675x gt-axe16000 &
fi
if [ "$BAC86" = "y" ]; then
build_fw amng.ac86 release/src-rt-5.02hnd rt-ac86u &
fi
if [ "$BGTAC2900" = "y" ]; then
build_fw amng.gt2900 release/src-rt-5.02hnd gt-ac2900 &
fi
if [ "$BAX88" = "y" ]; then
build_fw amng.ax88 release/src-rt-5.02axhnd rt-ax88u &
fi
if [ "$BGTAX11000" = "y" ]; then
build_fw amng.gtax11000 release/src-rt-5.02axhnd gt-ax11000 &
fi
if [ "$BGTAXE11000" = "y" ]; then
build_fw amng.gtaxe11000 release/src-rt-5.02L.07p2axhnd gt-axe11000 &
fi
if [ "$BAC68V4" = "y" ]; then
build_fw amng.ac68v4 release/src-rt-5.02L.07p2axhnd rt-ac68u_v4 &
fi
if [ "$BAX58" = "y" ]; then
build_fw amng.ax58 release/src-rt-5.02axhnd.675x rt-ax58u &
fi
if [ "$BAX56" = "y" ]; then
build_fw amng.ax56 release/src-rt-5.02axhnd.675x rt-ax56u &
fi
if [ "$BAX86" = "y" ]; then
build_fw amng.ax86 release/src-rt-5.02L.07p2axhnd rt-ax86u &
fi
if [ "$BAX68" = "y" ]; then
build_fw amng.ax68 release/src-rt-5.02L.07p2axhnd rt-ax68u &
fi
if [ "$BAC68" = "y" ]; then
build_fw amng.ac68 release/src-rt-6.x.4708 rt-ac68u &
fi
if [ "$BAC3100" = "y" ]; then
build_fw amng.ac3100 release/src-rt-7.14.114.x/src rt-ac3100 &
fi
if [ "$BAC88" = "y" ]; then
build_fw amng.ac88 release/src-rt-7.14.114.x/src rt-ac88u &
fi
if [ "$BAC5300" = "y" ]; then
build_fw amng.ac5300 release/src-rt-7.14.114.x/src rt-ac5300 &
fi
sleep 5\
echo "--- $(date +%R) - All builds launched, please wait..."
wait
# Build combined image?
if [ "$BAC68" = "y" ] && [ "$BAC68V4" = "y" ] && [ $"$COMBINED" = "y" ]
then
echo "--- $(date +%R) - Building combined RT-AC68U image..."
cd "$HOME/amng.ac68/release/src-rt-6.x.4708"
make rt-ac68u-combine_image BCM=y IMAGEDIR=$STAGE_LOC > "output.txt" 2>&1;
cd "$STAGE_LOC"
FWNAME="$(find -- RT-AC68U_*.trx | head -n 1)"
ZIPNAME="$(echo "$FWNAME" | sed 's~.trx~~g').zip"
sha256sum "$FWNAME" > sha256sum.sha256
zip -qj "$ZIPNAME" "$FWNAME" README-merlin.txt Changelog*.txt sha256sum.sha256 2>/dev/null
rm RT-AC68U_V4* sha256sum.sha256
fi
echo
cd "$STAGE_LOC" || exit 1
mv -n sha256sums-ng.txt sha256sums-ng-$(date +%Y%m%d).txt
sha256sum *.trx | unix2dos >> sha256sums-ng.txt
sha256sum *.w | unix2dos >> sha256sums-ng.txt
sha256sum *.pkgtb | unix2dos >> sha256sums-ng.txt
# Copy everything to the host
if [ -z "$FINAL_LOC" ]; then
scp -- *.zip *.trx *.txt *.w *.pkgtb "$FINAL_LOC/" 2>/dev/null
fi
echo "=== $(date +%R) - All done!"