Codegen: доставить rustfmt для 1.75 + проверять dart-сторону моста
flutter_rust_bridge_codegen крэшился на rustfmt (нет в 1.75) ПОСЛЕ rust-моста, но ДО generated_bridge.dart/.freezed.dart -> flutter build падал EventToUI_*/RustdeskImpl isn't a type. Ставим rustfmt в override, проверяем наличие dart+freezed, а не только bridge_generated.rs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -53,6 +53,10 @@ RUSTC_BOOTSTRAP=1 flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs
|
||||
```
|
||||
Пины FRB_VERSION/CARGO_EXPAND_VERSION — в `upstream.txt`. Шаг встроен в `build-windows.ps1` перед build.py.
|
||||
RUSTC_BOOTSTRAP=1 нужен, т.к. cargo-expand требует nightly-фич, а тулчейн 1.75 stable.
|
||||
**Грабля:** codegen зовёт `rustfmt`; без него (`rustup component add rustfmt --toolchain 1.75-...`) он
|
||||
крэшится ПОСЛЕ генерации rust-моста, но ДО dart-стороны — `bridge_generated.rs` есть, а
|
||||
`generated_bridge.dart`/`.freezed.dart` нет → flutter build падает `EventToUI_Event/RustdeskImpl isn't a type`.
|
||||
Поэтому проверять надо dart-файлы, не только rust.
|
||||
|
||||
### Открытый вопрос (решить при первой сборке)
|
||||
Апстрим для Windows-x64 подменяет flutter-engine кастомным `windows-x64-release.zip` (ради Win7).
|
||||
|
||||
@@ -82,7 +82,10 @@ if (-not (Test-Path $src)) {
|
||||
git -C $src checkout -- .
|
||||
git -C $src submodule foreach --recursive 'git checkout -- .'
|
||||
}
|
||||
Push-Location $src; rustup override set $pins['RUST_VERSION'] | Out-Null; Pop-Location
|
||||
Push-Location $src
|
||||
rustup override set $pins['RUST_VERSION'] | Out-Null
|
||||
rustup component add rustfmt --toolchain "$($pins['RUST_VERSION'])-x86_64-pc-windows-msvc" | Out-Null # codegen зовёт rustfmt
|
||||
Pop-Location
|
||||
|
||||
# --- preconfigure: вшить сервер+ключ ---
|
||||
Write-Host "Preconfigure (сервер+ключ)..." -ForegroundColor Cyan
|
||||
@@ -108,8 +111,11 @@ if (-not (Test-Path $frb)) {
|
||||
}
|
||||
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
|
||||
$frbRc = $LASTEXITCODE
|
||||
# Проверяем ОБЕ стороны: rust + dart (+ freezed). rust-файл создаётся до dart, поэтому одного его мало.
|
||||
$genOk = ($frbRc -eq 0) -and (Test-Path 'src/bridge_generated.rs') -and (Test-Path 'flutter/lib/generated_bridge.dart') -and (Test-Path 'flutter/lib/generated_bridge.freezed.dart')
|
||||
if (-not $genOk) { Pop-Location; throw "codegen неполный (rc=$frbRc): нет dart-моста generated_bridge(.freezed).dart" }
|
||||
Write-Host " bridge_generated.rs + generated_bridge.dart + .freezed.dart созданы." -ForegroundColor Green
|
||||
Pop-Location
|
||||
|
||||
# --- vcpkg install (манифест из vcpkg.json; первый раз долго: ffmpeg/aom) ---
|
||||
|
||||
Reference in New Issue
Block a user