436 lines
11 KiB
Batchfile
436 lines
11 KiB
Batchfile
@echo off
|
|
chcp 65001 >nul
|
|
REM ========================================
|
|
REM MosDNS 多平台构建脚本 (带 Web UI)
|
|
REM 支持: Linux, Windows, macOS (amd64/arm64)
|
|
REM ========================================
|
|
|
|
echo.
|
|
echo ╔════════════════════════════════════════════╗
|
|
echo ║ MosDNS 多平台构建工具 (带 Web UI) ║
|
|
echo ╚════════════════════════════════════════════╝
|
|
echo.
|
|
|
|
REM 检查 Go 环境
|
|
where go >nul 2>nul
|
|
if %errorlevel% neq 0 (
|
|
echo ❌ Go 未安装或不在 PATH 中
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
echo ✅ Go 版本:
|
|
go version
|
|
echo.
|
|
|
|
REM 检查并构建 Vue 前端
|
|
echo [检查] Vue 前端资源...
|
|
if not exist "web-ui\dist\index.html" (
|
|
echo ⚠️ Vue 前端未构建,开始构建...
|
|
|
|
REM 检查 Node.js
|
|
where node >nul 2>nul
|
|
if %errorlevel% neq 0 (
|
|
echo ❌ Node.js 未安装,无法构建 Vue 前端
|
|
echo 💡 请安装 Node.js 或手动运行: cd web-ui ^&^& npm install ^&^& npm run build
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
REM 检查 npm
|
|
where npm >nul 2>nul
|
|
if %errorlevel% neq 0 (
|
|
echo ❌ npm 未找到
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
echo [1/2] 安装 Vue 依赖...
|
|
cd web-ui
|
|
if not exist "node_modules" (
|
|
call npm install
|
|
if %errorlevel% neq 0 (
|
|
echo ❌ npm install 失败
|
|
cd ..
|
|
pause
|
|
exit /b 1
|
|
)
|
|
)
|
|
|
|
echo [2/2] 构建 Vue 前端...
|
|
call npm run build
|
|
if %errorlevel% neq 0 (
|
|
echo ❌ Vue 构建失败
|
|
cd ..
|
|
pause
|
|
exit /b 1
|
|
)
|
|
cd ..
|
|
echo ✅ Vue 前端构建完成
|
|
) else (
|
|
echo ✅ Vue 前端资源已存在
|
|
)
|
|
echo.
|
|
|
|
REM ========================================
|
|
REM 显示平台选择菜单
|
|
REM ========================================
|
|
:MENU
|
|
cls
|
|
echo.
|
|
echo ╔════════════════════════════════════════════╗
|
|
echo ║ MosDNS 多平台构建工具 (带 Web UI) ║
|
|
echo ╚════════════════════════════════════════════╝
|
|
echo.
|
|
echo 请选择要编译的平台:
|
|
echo.
|
|
echo [1] Linux AMD64 (x86_64 服务器)
|
|
echo [2] Linux ARM64 (树莓派、ARM 服务器)
|
|
echo [3] Windows AMD64 (Windows 64位)
|
|
echo [4] macOS AMD64 (Intel Mac)
|
|
echo [5] macOS ARM64 (Apple Silicon M1/M2/M3)
|
|
echo.
|
|
echo [6] 编译所有 Linux 版本 (AMD64 + ARM64)
|
|
echo [7] 编译所有 macOS 版本 (AMD64 + ARM64)
|
|
echo [8] 编译所有 Windows 版本 (仅 AMD64)
|
|
echo.
|
|
echo [A] 编译全部平台 (推荐用于发布)
|
|
echo.
|
|
echo [0] 退出
|
|
echo.
|
|
echo ════════════════════════════════════════════
|
|
echo.
|
|
|
|
set /p CHOICE="请输入选项 [0-8/A]: "
|
|
|
|
if /i "%CHOICE%"=="0" exit /b 0
|
|
if /i "%CHOICE%"=="1" goto BUILD_LINUX_AMD64
|
|
if /i "%CHOICE%"=="2" goto BUILD_LINUX_ARM64
|
|
if /i "%CHOICE%"=="3" goto BUILD_WINDOWS_AMD64
|
|
if /i "%CHOICE%"=="4" goto BUILD_MACOS_AMD64
|
|
if /i "%CHOICE%"=="5" goto BUILD_MACOS_ARM64
|
|
if /i "%CHOICE%"=="6" goto BUILD_ALL_LINUX
|
|
if /i "%CHOICE%"=="7" goto BUILD_ALL_MACOS
|
|
if /i "%CHOICE%"=="8" goto BUILD_ALL_WINDOWS
|
|
if /i "%CHOICE%"=="A" goto BUILD_ALL
|
|
if /i "%CHOICE%"=="a" goto BUILD_ALL
|
|
|
|
echo.
|
|
echo ❌ 无效的选项,请重新选择
|
|
timeout /t 2 >nul
|
|
goto MENU
|
|
|
|
REM ========================================
|
|
REM 初始化构建环境
|
|
REM ========================================
|
|
:INIT_BUILD
|
|
echo.
|
|
echo ════════════════════════════════════════════
|
|
echo.
|
|
echo [准备] 设置构建参数...
|
|
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
|
|
set "BUILD_TIME=%dt:~0,4%-%dt:~4,2%-%dt:~6,2% %dt:~8,2%:%dt:~10,2%:%dt:~12,2%"
|
|
set "VERSION=v5.0.0-webui"
|
|
set "OUTPUT_DIR=dist"
|
|
|
|
REM 创建输出目录
|
|
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
|
|
|
|
echo 版本: %VERSION%
|
|
echo 构建时间: %BUILD_TIME%
|
|
echo 输出目录: %OUTPUT_DIR%\
|
|
echo.
|
|
|
|
set CGO_ENABLED=0
|
|
set "LDFLAGS=-s -w -X 'main.version=%VERSION%' -X 'main.buildTime=%BUILD_TIME%'"
|
|
|
|
echo [开始] 编译中...
|
|
echo.
|
|
goto :EOF
|
|
|
|
REM ========================================
|
|
REM 单平台编译
|
|
REM ========================================
|
|
:BUILD_LINUX_AMD64
|
|
call :INIT_BUILD
|
|
echo 🔨 构建 Linux AMD64...
|
|
set GOOS=linux
|
|
set GOARCH=amd64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-linux-amd64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-linux-amd64 构建成功
|
|
call :SHOW_RESULT
|
|
) else (
|
|
echo ❌ 构建失败
|
|
pause
|
|
)
|
|
goto END
|
|
|
|
:BUILD_LINUX_ARM64
|
|
call :INIT_BUILD
|
|
echo 🔨 构建 Linux ARM64...
|
|
set GOOS=linux
|
|
set GOARCH=arm64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-linux-arm64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-linux-arm64 构建成功
|
|
call :SHOW_RESULT
|
|
) else (
|
|
echo ❌ 构建失败
|
|
pause
|
|
)
|
|
goto END
|
|
|
|
:BUILD_WINDOWS_AMD64
|
|
call :INIT_BUILD
|
|
echo 🔨 构建 Windows AMD64...
|
|
set GOOS=windows
|
|
set GOARCH=amd64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-windows-amd64.exe" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-windows-amd64.exe 构建成功
|
|
call :SHOW_RESULT
|
|
) else (
|
|
echo ❌ 构建失败
|
|
pause
|
|
)
|
|
goto END
|
|
|
|
:BUILD_MACOS_AMD64
|
|
call :INIT_BUILD
|
|
echo 🔨 构建 macOS AMD64 (Intel Mac)...
|
|
set GOOS=darwin
|
|
set GOARCH=amd64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-darwin-amd64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-darwin-amd64 构建成功
|
|
call :SHOW_RESULT
|
|
) else (
|
|
echo ❌ 构建失败
|
|
pause
|
|
)
|
|
goto END
|
|
|
|
:BUILD_MACOS_ARM64
|
|
call :INIT_BUILD
|
|
echo 🔨 构建 macOS ARM64 (Apple Silicon)...
|
|
set GOOS=darwin
|
|
set GOARCH=arm64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-darwin-arm64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-darwin-arm64 构建成功
|
|
call :SHOW_RESULT
|
|
) else (
|
|
echo ❌ 构建失败
|
|
pause
|
|
)
|
|
goto END
|
|
|
|
REM ========================================
|
|
REM 批量编译
|
|
REM ========================================
|
|
:BUILD_ALL_LINUX
|
|
call :INIT_BUILD
|
|
echo [1/2] 🔨 构建 Linux AMD64...
|
|
set GOOS=linux
|
|
set GOARCH=amd64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-linux-amd64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-linux-amd64 构建成功
|
|
) else (
|
|
echo ❌ 构建失败
|
|
set "BUILD_FAILED=1"
|
|
)
|
|
echo.
|
|
|
|
echo [2/2] 🔨 构建 Linux ARM64...
|
|
set GOOS=linux
|
|
set GOARCH=arm64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-linux-arm64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-linux-arm64 构建成功
|
|
) else (
|
|
echo ❌ 构建失败
|
|
set "BUILD_FAILED=1"
|
|
)
|
|
call :SHOW_RESULT
|
|
goto END
|
|
|
|
:BUILD_ALL_MACOS
|
|
call :INIT_BUILD
|
|
echo [1/2] 🔨 构建 macOS AMD64 (Intel Mac)...
|
|
set GOOS=darwin
|
|
set GOARCH=amd64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-darwin-amd64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-darwin-amd64 构建成功
|
|
) else (
|
|
echo ❌ 构建失败
|
|
set "BUILD_FAILED=1"
|
|
)
|
|
echo.
|
|
|
|
echo [2/2] 🔨 构建 macOS ARM64 (Apple Silicon)...
|
|
set GOOS=darwin
|
|
set GOARCH=arm64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-darwin-arm64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-darwin-arm64 构建成功
|
|
) else (
|
|
echo ❌ 构建失败
|
|
set "BUILD_FAILED=1"
|
|
)
|
|
call :SHOW_RESULT
|
|
goto END
|
|
|
|
:BUILD_ALL_WINDOWS
|
|
call :INIT_BUILD
|
|
echo [1/1] 🔨 构建 Windows AMD64...
|
|
set GOOS=windows
|
|
set GOARCH=amd64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-windows-amd64.exe" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-windows-amd64.exe 构建成功
|
|
) else (
|
|
echo ❌ 构建失败
|
|
set "BUILD_FAILED=1"
|
|
)
|
|
call :SHOW_RESULT
|
|
goto END
|
|
|
|
:BUILD_ALL
|
|
call :INIT_BUILD
|
|
echo [1/5] 🔨 构建 Linux AMD64...
|
|
set GOOS=linux
|
|
set GOARCH=amd64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-linux-amd64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-linux-amd64 构建成功
|
|
) else (
|
|
echo ❌ 构建失败
|
|
set "BUILD_FAILED=1"
|
|
)
|
|
echo.
|
|
|
|
echo [2/5] 🔨 构建 Linux ARM64...
|
|
set GOOS=linux
|
|
set GOARCH=arm64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-linux-arm64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-linux-arm64 构建成功
|
|
) else (
|
|
echo ❌ 构建失败
|
|
set "BUILD_FAILED=1"
|
|
)
|
|
echo.
|
|
|
|
echo [3/5] 🔨 构建 Windows AMD64...
|
|
set GOOS=windows
|
|
set GOARCH=amd64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-windows-amd64.exe" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-windows-amd64.exe 构建成功
|
|
) else (
|
|
echo ❌ 构建失败
|
|
set "BUILD_FAILED=1"
|
|
)
|
|
echo.
|
|
|
|
echo [4/5] 🔨 构建 macOS AMD64...
|
|
set GOOS=darwin
|
|
set GOARCH=amd64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-darwin-amd64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-darwin-amd64 构建成功
|
|
) else (
|
|
echo ❌ 构建失败
|
|
set "BUILD_FAILED=1"
|
|
)
|
|
echo.
|
|
|
|
echo [5/5] 🔨 构建 macOS ARM64 (Apple Silicon)...
|
|
set GOOS=darwin
|
|
set GOARCH=arm64
|
|
go build -ldflags="%LDFLAGS%" -o "%OUTPUT_DIR%\mosdns-darwin-arm64" .
|
|
if %errorlevel% equ 0 (
|
|
echo ✅ mosdns-darwin-arm64 构建成功
|
|
) else (
|
|
echo ❌ 构建失败
|
|
set "BUILD_FAILED=1"
|
|
)
|
|
call :SHOW_RESULT
|
|
goto END
|
|
|
|
REM ========================================
|
|
REM 显示构建结果
|
|
REM ========================================
|
|
:SHOW_RESULT
|
|
echo.
|
|
echo ════════════════════════════════════════════
|
|
echo.
|
|
|
|
if "%BUILD_FAILED%"=="1" (
|
|
echo ⚠️ 部分平台构建失败,请检查错误信息
|
|
echo.
|
|
) else (
|
|
echo 🎉 构建完成!
|
|
echo.
|
|
)
|
|
|
|
REM 检查是否有构建产物
|
|
if exist "%OUTPUT_DIR%\mosdns-*" (
|
|
echo 📦 构建产物列表:
|
|
echo.
|
|
dir /B "%OUTPUT_DIR%\mosdns-*" 2>nul
|
|
echo.
|
|
|
|
echo 📊 文件大小详情:
|
|
for %%F in (%OUTPUT_DIR%\mosdns-*) do (
|
|
set "size=%%~zF"
|
|
set /a size_mb=!size! / 1048576
|
|
echo %%~nxF - !size_mb! MB
|
|
)
|
|
echo.
|
|
) else (
|
|
echo ⚠️ 未找到构建产物
|
|
echo.
|
|
)
|
|
|
|
echo ════════════════════════════════════════════
|
|
echo.
|
|
echo 📝 使用方法:
|
|
echo.
|
|
echo Windows:
|
|
echo %OUTPUT_DIR%\mosdns-windows-amd64.exe start -c config.yaml
|
|
echo.
|
|
echo Linux:
|
|
echo chmod +x %OUTPUT_DIR%/mosdns-linux-amd64
|
|
echo ./%OUTPUT_DIR%/mosdns-linux-amd64 start -c config.yaml
|
|
echo.
|
|
echo macOS:
|
|
echo chmod +x %OUTPUT_DIR%/mosdns-darwin-amd64
|
|
echo ./%OUTPUT_DIR%/mosdns-darwin-amd64 start -c config.yaml
|
|
echo.
|
|
echo 🌐 Web 管理界面: http://localhost:5545
|
|
echo.
|
|
echo 💡 提示: 所有可执行文件已内嵌 Web 资源,可独立运行
|
|
echo.
|
|
goto :EOF
|
|
|
|
REM ========================================
|
|
REM 结束
|
|
REM ========================================
|
|
:END
|
|
echo.
|
|
set /p CONTINUE="是否继续编译其他平台?(Y/N): "
|
|
if /i "%CONTINUE%"=="Y" (
|
|
set "BUILD_FAILED="
|
|
goto MENU
|
|
)
|
|
|
|
echo.
|
|
echo 感谢使用 MosDNS 构建工具!
|
|
echo.
|
|
pause
|
|
exit /b 0
|