You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.7 KiB
124 lines
3.7 KiB
#!/bin/bash |
|
# OpenWRT build script for uTun |
|
# Usage: ./build_openwrt.sh [TARGET] [PROFILE] |
|
# |
|
# Examples: |
|
# ./build_openwrt.sh # ASUS RT-AX53U (default) |
|
# ./build_openwrt.sh ramips/mt7621 asus_rt-ax53u |
|
# ./build_openwrt.sh ath79/generic tplink_archer-c7-v2 |
|
# ./build_openwrt.sh x86/64 |
|
# ./build_openwrt.sh --list # list available targets |
|
# |
|
# First run builds the full toolchain (30-120 min). |
|
# Subsequent runs only rebuild the utun package. |
|
|
|
set -e |
|
|
|
OPENWRT_ROOT=/home/user/openwrt |
|
|
|
# --- Default target: ASUS RT-AX53U --- |
|
TARGET="${1:-ramips/mt7621}" |
|
PROFILE="${2:-asus_rt-ax53u}" |
|
J="${J:-$(nproc)}" |
|
|
|
# --- Help / list --- |
|
if [ "$1" = "--list" ] || [ "$1" = "-l" ]; then |
|
echo "=== Predefined targets ===" |
|
echo " ramips/mt7621 asus_rt-ax53u ASUS RT-AX53U (default)" |
|
echo " ramips/mt7621 asus_rt-ax54 ASUS RT-AX54" |
|
echo " ramips/mt7621 xiaomi_mi-router-4a-gigabit Xiaomi Mi Router 4A" |
|
echo " ath79/generic tplink_archer-c7-v2 TP-Link Archer C7 v2" |
|
echo " x86/64 Generic x86_64 PC" |
|
echo " x86/generic Generic x86 PC" |
|
echo "" |
|
echo "Full target list: grep 'TARGET_DEVICES' $OPENWRT_ROOT/target/linux/*/image/*.mk" |
|
exit 0 |
|
fi |
|
|
|
# --- Check OpenWRT exists --- |
|
if [ ! -d "$OPENWRT_ROOT" ]; then |
|
echo "ERROR: OpenWRT not found at $OPENWRT_ROOT" |
|
echo "Clone: git clone --depth 1 https://github.com/openwrt/openwrt.git $OPENWRT_ROOT" |
|
exit 1 |
|
fi |
|
|
|
# --- Check utun package exists --- |
|
if [ ! -f "$OPENWRT_ROOT/package/utun2/Makefile" ]; then |
|
echo "ERROR: utun package not found in OpenWRT" |
|
echo "Expected: $OPENWRT_ROOT/package/utun2/Makefile" |
|
exit 1 |
|
fi |
|
|
|
echo "============================================" |
|
echo " uTun OpenWRT Build" |
|
echo " Target: $TARGET" |
|
echo " Profile: $PROFILE" |
|
echo " Jobs: $J" |
|
echo "============================================" |
|
|
|
cd "$OPENWRT_ROOT" |
|
|
|
# --- Select target --- |
|
TARGET_NAME=$(echo "$TARGET" | cut -d/ -f1) |
|
SUBTARGET_NAME=$(echo "$TARGET" | cut -d/ -f2) |
|
|
|
echo "" |
|
echo "[1/3] Configuring target..." |
|
|
|
# Write .config |
|
cat > .config << EOF |
|
CONFIG_TARGET_${TARGET_NAME}=y |
|
CONFIG_TARGET_${TARGET_NAME}_${SUBTARGET_NAME}=y |
|
CONFIG_TARGET_${TARGET_NAME}_${SUBTARGET_NAME}_DEVICE_${PROFILE}=y |
|
CONFIG_PACKAGE_utun=m |
|
# Basic system |
|
CONFIG_PACKAGE_libc=y |
|
CONFIG_PACKAGE_libopenssl=y |
|
CONFIG_PACKAGE_libpthread=y |
|
CONFIG_ALL_NONSHARED=n |
|
CONFIG_ALL_KMODS=n |
|
CONFIG_ALL=n |
|
CONFIG_DEVEL=y |
|
CONFIG_CCACHE=y |
|
# Build options |
|
CONFIG_BUILD_LOG=y |
|
EOF |
|
|
|
echo " Target: ${TARGET_NAME}/${SUBTARGET_NAME} Device: ${PROFILE}" |
|
|
|
# Expand config |
|
make defconfig V=s 2>/dev/null || true |
|
|
|
echo "" |
|
echo "[2/3] Building toolchain (if needed)..." |
|
if [ ! -f "staging_dir/toolchain-*/bin/mips-openwrt-linux-gcc" ] && \ |
|
[ ! -f "staging_dir/toolchain-*/bin/mipsel-openwrt-linux-gcc" ] && \ |
|
[ ! -f "staging_dir/toolchain-*/bin/x86_64-openwrt-linux-gcc" ]; then |
|
echo " Toolchain not found. Building... (this may take 30-120 min)" |
|
make tools/install -j$J V=s 2>&1 | tail -5 |
|
make toolchain/install -j$J V=s 2>&1 | tail -5 |
|
echo " Toolchain built." |
|
else |
|
echo " Toolchain already built. Skipping." |
|
fi |
|
|
|
echo "" |
|
echo "[3/3] Building utun package..." |
|
make package/utun2/compile -j$J V=s 2>&1 | tail -10 |
|
|
|
# --- Show result --- |
|
IPK=$(find bin/packages -name "utun_*.ipk" 2>/dev/null | head -1) |
|
if [ -n "$IPK" ]; then |
|
echo "" |
|
echo "============================================" |
|
echo " BUILD SUCCESS!" |
|
echo " Package: $IPK" |
|
echo " Size: $(du -h "$IPK" | cut -f1)" |
|
echo "============================================" |
|
else |
|
echo "" |
|
echo "ERROR: Package not found. Check build log above." |
|
# Try to find any built binary |
|
find bin -name "utun*" 2>/dev/null |
|
exit 1 |
|
fi
|
|
|