diff --git a/docs/CODEMAP.md b/docs/CODEMAP.md index df3450e..7923470 100644 --- a/docs/CODEMAP.md +++ b/docs/CODEMAP.md @@ -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). diff --git a/scripts/build-windows.ps1 b/scripts/build-windows.ps1 index 00851ec..36d84be 100644 --- a/scripts/build-windows.ps1 +++ b/scripts/build-windows.ps1 @@ -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) ---