Files
2026-09-13 13:30:21 +08:00

93 lines
3.9 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# 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。"