mosdns/build-all-platforms.bat
dengxiongjian ee06785e08
Some checks are pending
Test mosdns / build (push) Waiting to run
开发web管理
2025-10-15 22:20:27 +08:00

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