93 lines
3.9 KiB
PowerShell
93 lines
3.9 KiB
PowerShell
# ============================================================
|
||
# Windows 自包含打包(MinGW + Qt6 + ffmpeg)
|
||
# 用法(PowerShell):
|
||
# ./packaging/build-win.ps1 -QtPrefix "E:\QT6.6.3\6.6.3\mingw_64" `
|
||
# -MinGwBin "E:\QT6.6.3\Tools\mingw1120_64\bin" `
|
||
# -Ffmpeg "C:\path\ffmpeg.exe" `
|
||
# -DepsPrefix "C:\path\deps-prefix" `
|
||
# -DevourerSrc "C:\path\devourer" # 可选,离线构建用
|
||
# 产物: dist/fpv-relay-win-x64/ (含 exe + Qt + ffmpeg + 依赖,双击 run-gui.bat 即用)
|
||
#
|
||
# 前置:本机已装 libusb-1.0 / libsodium(MinGW) 到 -DepsPrefix(含 include/lib/bin),
|
||
# 且 pkg-config 可用(devourer 的 CMake 需要)。
|
||
# ============================================================
|
||
param(
|
||
[string]$QtPrefix = $env:QT_PREFIX,
|
||
[string]$MinGwBin = $env:MINGW_BIN,
|
||
[string]$Ffmpeg = $env:FFMPEG_EXE,
|
||
[string]$DepsPrefix = $env:FPV_DEPS_PREFIX,
|
||
[string]$DevourerSrc = $env:DEVOURER_SRC,
|
||
[string]$BuildDir = "build-win-gui"
|
||
)
|
||
|
||
$ErrorActionPreference = "Stop"
|
||
$Repo = Split-Path -Parent $PSScriptRoot
|
||
Set-Location $Repo
|
||
|
||
if (-not $QtPrefix) { throw "需要 -QtPrefix(Qt 安装目录,如 E:\QT6.6.3\6.6.3\mingw_64)" }
|
||
if (-not $MinGwBin) { throw "需要 -MinGwBin(MinGW bin 目录)" }
|
||
if (-not $Ffmpeg) { throw "需要 -Ffmpeg(静态 ffmpeg.exe 路径)" }
|
||
if (-not $DepsPrefix) { throw "需要 -DepsPrefix(含 libusb/libsodium 的 include/lib/bin)" }
|
||
|
||
$env:PATH = "$MinGwBin;$QtPrefix\bin;$DepsPrefix\bin;$env:PATH"
|
||
if (-not $env:PKG_CONFIG_PATH) { $env:PKG_CONFIG_PATH = "$DepsPrefix\lib\pkgconfig" }
|
||
|
||
# ---- 构建 ----
|
||
$cmakeArgs = @(
|
||
"-S", $Repo, "-B", (Join-Path $Repo $BuildDir), "-G", "Ninja",
|
||
"-DCMAKE_BUILD_TYPE=Release",
|
||
"-DFPC_BUILD_GUI=ON", "-DFPC_BUILD_WFB_USB=ON", "-DFPC_BUILD_WFB_CAPTURE=OFF",
|
||
"-DFPC_QT_PREFIX=$QtPrefix"
|
||
)
|
||
if ($DevourerSrc) { $cmakeArgs += "-DFETCHCONTENT_SOURCE_DIR_DEVOURER=$DevourerSrc" }
|
||
cmake @cmakeArgs
|
||
cmake --build (Join-Path $Repo $BuildDir)
|
||
|
||
# ---- 组装 ----
|
||
$Name = "fpv-relay-win-x64"
|
||
$Stage = Join-Path $Repo "dist\$Name"
|
||
Remove-Item -Recurse -Force $Stage -ErrorAction SilentlyContinue
|
||
New-Item -ItemType Directory -Force -Path $Stage | Out-Null
|
||
|
||
Copy-Item (Join-Path $Repo "$BuildDir\fpv-relay.exe") $Stage
|
||
Copy-Item (Join-Path $Repo "$BuildDir\fpv-relay-gui.exe") $Stage
|
||
Copy-Item $Ffmpeg $Stage
|
||
Copy-Item (Join-Path $DepsPrefix "bin\libusb-1.0.dll") $Stage
|
||
Copy-Item (Join-Path $DepsPrefix "bin\libsodium-26.dll") $Stage
|
||
Copy-Item (Join-Path $Repo "ass\gs.key") $Stage -ErrorAction SilentlyContinue
|
||
Copy-Item (Join-Path $Repo "config.windows.example.yaml") $Stage
|
||
Copy-Item (Join-Path $Repo "config.windows.example.yaml") (Join-Path $Stage "config.yaml")
|
||
|
||
# Qt 运行库
|
||
& (Join-Path $QtPrefix "bin\windeployqt.exe") --release --qmldir (Join-Path $Repo "src\gui") (Join-Path $Stage "fpv-relay-gui.exe")
|
||
Copy-Item (Join-Path $QtPrefix "bin\Qt6ShaderTools.dll") $Stage -ErrorAction SilentlyContinue
|
||
New-Item -ItemType Directory -Force -Path (Join-Path $Stage "qml") | Out-Null
|
||
Copy-Item -Recurse -Force (Join-Path $QtPrefix "qml\Qt5Compat") (Join-Path $Stage "qml\Qt5Compat")
|
||
# FpvRelay QML 模块目录
|
||
Copy-Item -Recurse -Force (Join-Path $Repo "$BuildDir\FpvRelay") (Join-Path $Stage "FpvRelay")
|
||
|
||
# qt.conf:让 Qt 从程序目录找 QML
|
||
Set-Content -Path (Join-Path $Stage "qt.conf") -Value "[Paths]`nPrefix=.`nQmlImportsPath=qml`n" -Encoding ASCII
|
||
|
||
# 启动脚本
|
||
Set-Content -Path (Join-Path $Stage "run-cli.bat") -Encoding ASCII -Value @"
|
||
@echo off
|
||
setlocal
|
||
set DIR=%~dp0
|
||
cd /d "%DIR%"
|
||
set PATH=%DIR%;%PATH%
|
||
"%DIR%fpv-relay.exe" %*
|
||
"@
|
||
Set-Content -Path (Join-Path $Stage "run-gui.bat") -Encoding ASCII -Value @"
|
||
@echo off
|
||
setlocal
|
||
set DIR=%~dp0
|
||
cd /d "%DIR%"
|
||
set PATH=%DIR%;%PATH%
|
||
start "" "%DIR%fpv-relay-gui.exe" %*
|
||
"@
|
||
|
||
Write-Host ""
|
||
Write-Host "完成: $Stage"
|
||
Write-Host "用户侧只需先用 Zadig 把网卡驱动换成 WinUSB,然后双击 run-gui.bat。"
|