Добавить flutter_rust_bridge codegen перед сборкой
RustDesk не коммитит src/bridge_generated.rs -> cargo build падал E0583/E0277. Встроил шаг codegen (FRB 1.80.1 + cargo-expand 1.0.95, RUSTC_BOOTSTRAP=1) в build-windows.ps1; пины в upstream.txt. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -40,6 +40,20 @@ pub const RS_PUB_KEY: &str = "OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=";
|
|||||||
**ffmpeg** (static, features amf/nvcodec/qsv — hwcodec). ffmpeg/aom — длинная первая компиляция.
|
**ffmpeg** (static, features amf/nvcodec/qsv — hwcodec). ffmpeg/aom — длинная первая компиляция.
|
||||||
- Сборка: `python build.py --flutter` (флаги: `--hwcodec`, `--portable`, `--vram`, `--skip-cargo`).
|
- Сборка: `python build.py --flutter` (флаги: `--hwcodec`, `--portable`, `--vram`, `--skip-cargo`).
|
||||||
|
|
||||||
|
### Грабля: bridge_generated.rs (обязательный codegen)
|
||||||
|
RustDesk **не коммитит** `src/bridge_generated.rs` (`lib.rs` объявляет `mod bridge_generated;`). Без
|
||||||
|
генерации cargo build падает: `E0583 file not found for module bridge_generated` + `E0277 EventToUI:
|
||||||
|
IntoIntoDart`. Генерится `flutter_rust_bridge_codegen` (в CI RustDesk — отдельный `bridge.yml`):
|
||||||
|
```
|
||||||
|
cargo +stable install cargo-expand --version 1.0.95 --locked
|
||||||
|
cargo +stable install flutter_rust_bridge_codegen --version 1.80.1 --features uuid --locked
|
||||||
|
pushd flutter && flutter pub get && popd
|
||||||
|
RUSTC_BOOTSTRAP=1 flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs \
|
||||||
|
--dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/macos/Runner/bridge_generated.h
|
||||||
|
```
|
||||||
|
Пины FRB_VERSION/CARGO_EXPAND_VERSION — в `upstream.txt`. Шаг встроен в `build-windows.ps1` перед build.py.
|
||||||
|
RUSTC_BOOTSTRAP=1 нужен, т.к. cargo-expand требует nightly-фич, а тулчейн 1.75 stable.
|
||||||
|
|
||||||
### Открытый вопрос (решить при первой сборке)
|
### Открытый вопрос (решить при первой сборке)
|
||||||
Апстрим для Windows-x64 подменяет flutter-engine кастомным `windows-x64-release.zip` (ради Win7).
|
Апстрим для Windows-x64 подменяет flutter-engine кастомным `windows-x64-release.zip` (ради Win7).
|
||||||
Для таргета Win10/11, вероятно, можно оставить стоковый engine 3.24.5 и пропустить подмену — проверить,
|
Для таргета Win10/11, вероятно, можно оставить стоковый engine 3.24.5 и пропустить подмену — проверить,
|
||||||
|
|||||||
@@ -92,6 +92,26 @@ $preBash = ("$root/scripts/preconfigure.sh") -replace '\\','/'
|
|||||||
if ($LASTEXITCODE) { throw "preconfigure.sh упал ($LASTEXITCODE)" }
|
if ($LASTEXITCODE) { throw "preconfigure.sh упал ($LASTEXITCODE)" }
|
||||||
if ($SkipBuild) { Write-Host "SkipBuild — стоп после preconfigure." -ForegroundColor Yellow; return }
|
if ($SkipBuild) { Write-Host "SkipBuild — стоп после preconfigure." -ForegroundColor Yellow; return }
|
||||||
|
|
||||||
|
# --- flutter_rust_bridge codegen ---
|
||||||
|
# RustDesk НЕ коммитит src/bridge_generated.rs — его генерит flutter_rust_bridge_codegen.
|
||||||
|
# Без него cargo build падает: E0583 (нет модуля bridge_generated) + E0277 (EventToUI: IntoIntoDart).
|
||||||
|
Write-Host "flutter_rust_bridge codegen..." -ForegroundColor Cyan
|
||||||
|
Push-Location $src
|
||||||
|
$env:RUSTC_BOOTSTRAP = '1' # cargo-expand требует nightly-фич; на stable — через RUSTC_BOOTSTRAP
|
||||||
|
# Инструменты собираем stable-тулчейном (1.75 может не собрать свежие tool-крейты); бинарь standalone.
|
||||||
|
if (-not (Get-Command cargo-expand -EA SilentlyContinue)) {
|
||||||
|
cargo +stable install cargo-expand --version $pins['CARGO_EXPAND_VERSION'] --locked
|
||||||
|
}
|
||||||
|
$frb = Join-Path $env:USERPROFILE '.cargo\bin\flutter_rust_bridge_codegen.exe'
|
||||||
|
if (-not (Test-Path $frb)) {
|
||||||
|
cargo +stable install flutter_rust_bridge_codegen --version $pins['FRB_VERSION'] --features uuid --locked
|
||||||
|
}
|
||||||
|
Push-Location flutter; flutter pub get; Pop-Location
|
||||||
|
& $frb --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/macos/Runner/bridge_generated.h
|
||||||
|
if (-not (Test-Path 'src/bridge_generated.rs')) { Pop-Location; throw "codegen не создал src/bridge_generated.rs" }
|
||||||
|
Write-Host " bridge_generated.rs создан." -ForegroundColor Green
|
||||||
|
Pop-Location
|
||||||
|
|
||||||
# --- vcpkg install (манифест из vcpkg.json; первый раз долго: ffmpeg/aom) ---
|
# --- vcpkg install (манифест из vcpkg.json; первый раз долго: ffmpeg/aom) ---
|
||||||
Write-Host "vcpkg install ($TRIPLET) — первый раз ОЧЕНЬ долго (ffmpeg/aom из исходников)..." -ForegroundColor Cyan
|
Write-Host "vcpkg install ($TRIPLET) — первый раз ОЧЕНЬ долго (ffmpeg/aom из исходников)..." -ForegroundColor Cyan
|
||||||
Push-Location $src
|
Push-Location $src
|
||||||
|
|||||||
@@ -12,6 +12,10 @@ FLUTTER_VERSION=3.24.5
|
|||||||
VCPKG_COMMIT_ID=120deac3062162151622ca4860575a33844ba10b
|
VCPKG_COMMIT_ID=120deac3062162151622ca4860575a33844ba10b
|
||||||
VCPKG_TRIPLET=x64-windows-static
|
VCPKG_TRIPLET=x64-windows-static
|
||||||
|
|
||||||
|
# flutter_rust_bridge codegen (генерит src/bridge_generated.rs; пины из bridge.yml@1.4.9)
|
||||||
|
FRB_VERSION=1.80.1
|
||||||
|
CARGO_EXPAND_VERSION=1.0.95
|
||||||
|
|
||||||
# Android (VM 118)
|
# Android (VM 118)
|
||||||
ANDROID_FLUTTER_VERSION=3.24.5
|
ANDROID_FLUTTER_VERSION=3.24.5
|
||||||
CARGO_NDK_VERSION=3.1.2
|
CARGO_NDK_VERSION=3.1.2
|
||||||
|
|||||||
Reference in New Issue
Block a user