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.
|
Пины FRB_VERSION/CARGO_EXPAND_VERSION — в `upstream.txt`. Шаг встроен в `build-windows.ps1` перед build.py.
|
||||||
RUSTC_BOOTSTRAP=1 нужен, т.к. cargo-expand требует nightly-фич, а тулчейн 1.75 stable.
|
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).
|
Апстрим для 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 checkout -- .
|
||||||
git -C $src submodule foreach --recursive 'git 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: вшить сервер+ключ ---
|
# --- preconfigure: вшить сервер+ключ ---
|
||||||
Write-Host "Preconfigure (сервер+ключ)..." -ForegroundColor Cyan
|
Write-Host "Preconfigure (сервер+ключ)..." -ForegroundColor Cyan
|
||||||
@@ -108,8 +111,11 @@ if (-not (Test-Path $frb)) {
|
|||||||
}
|
}
|
||||||
Push-Location flutter; flutter pub get; Pop-Location
|
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
|
& $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" }
|
$frbRc = $LASTEXITCODE
|
||||||
Write-Host " bridge_generated.rs создан." -ForegroundColor Green
|
# Проверяем ОБЕ стороны: 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
|
Pop-Location
|
||||||
|
|
||||||
# --- vcpkg install (манифест из vcpkg.json; первый раз долго: ffmpeg/aom) ---
|
# --- vcpkg install (манифест из vcpkg.json; первый раз долго: ffmpeg/aom) ---
|
||||||
|
|||||||
Reference in New Issue
Block a user