From 08321338d9ee86568305b7899d32c76158a298d5 Mon Sep 17 00:00:00 2001 From: gusadmin Date: Tue, 14 Jul 2026 15:09:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20flutter=5Frust=5Fbridge=20codegen=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- docs/CODEMAP.md | 14 ++++++++++++++ scripts/build-windows.ps1 | 20 ++++++++++++++++++++ upstream.txt | 4 ++++ 3 files changed, 38 insertions(+) diff --git a/docs/CODEMAP.md b/docs/CODEMAP.md index b6bba31..df3450e 100644 --- a/docs/CODEMAP.md +++ b/docs/CODEMAP.md @@ -40,6 +40,20 @@ pub const RS_PUB_KEY: &str = "OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw="; **ffmpeg** (static, features amf/nvcodec/qsv — hwcodec). ffmpeg/aom — длинная первая компиляция. - Сборка: `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). Для таргета Win10/11, вероятно, можно оставить стоковый engine 3.24.5 и пропустить подмену — проверить, diff --git a/scripts/build-windows.ps1 b/scripts/build-windows.ps1 index f559fe4..00851ec 100644 --- a/scripts/build-windows.ps1 +++ b/scripts/build-windows.ps1 @@ -92,6 +92,26 @@ $preBash = ("$root/scripts/preconfigure.sh") -replace '\\','/' if ($LASTEXITCODE) { throw "preconfigure.sh упал ($LASTEXITCODE)" } 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) --- Write-Host "vcpkg install ($TRIPLET) — первый раз ОЧЕНЬ долго (ffmpeg/aom из исходников)..." -ForegroundColor Cyan Push-Location $src diff --git a/upstream.txt b/upstream.txt index e16dff9..ace9262 100644 --- a/upstream.txt +++ b/upstream.txt @@ -12,6 +12,10 @@ FLUTTER_VERSION=3.24.5 VCPKG_COMMIT_ID=120deac3062162151622ca4860575a33844ba10b 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_FLUTTER_VERSION=3.24.5 CARGO_NDK_VERSION=3.1.2