#!/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=y ### Uncomment the models you wish to build. BAC68=y BAC88=y BAC3100=y BAC5300=y BAC86=y BGTAC2900=y BAX88=y BGTAX11000=y BAX58=y BAX56=y BAX86=y BAX68=y BGTAXE11000=y BAC68V4=y BGTAX6000=y BXT12=y BGTAXE16000=y BGTAX11000_PRO=y BAX86_PRO=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=388_20566 BRANCH_GTAX11000=388_20566 BRANCH_AX58=master BRANCH_AX56=master BRANCH_AX86=master BRANCH_AX68=master BRANCH_GTAXE11000=master BRANCH_AC68V4=386_x BRANCH_GTAX6000=master BRANCH_XT12=master BRANCH_GTAXE16000=master BRANCH_GTAX11000_PRO=master BRANCH_AX86_PRO=master ### 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="$3" FWMODEL="$2" FWPATH="$1" echo "*** $(date +%R) - Starting building $FWMODEL..." cd "$HOME/$FWPATH" || 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 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" ] ; 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 zip -qj "$STAGE_LOC/$ZIPNAME" "$FWNAME" "$STAGE_LOC/README-merlin.txt" "$STAGE_LOC"/Changelog*.txt "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 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 echo "--- $(date +%R) - All trees ready!" # Launch parallel builds echo "--- $(date +%R) - Launching all builds" 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 [ "$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 rm sha256sums-ng.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!"