Automatyczne aktualizacje katalogu i integracja z LSP

Platforma Software Defined Vehicle (SDV) zawiera w bazie kodu wiele katalogów VSIDL. Plik CATALOG_UPDATE zapewnia scentralizowaną konfigurację każdego katalogu, umożliwiając zarówno automatyczne aktualizacje, jak i integrację z IDE.

Rola pliku CATALOG_UPDATE

Plik CATALOG_UPDATE służy do 2 głównych celów:

  1. Automatyczne aktualizacje: plik umożliwia narzędziu regenerator znajdowanie i ponowne kompilowanie wszystkich katalogów w systemie, gdy zmieni się kompilator lub zależności.
  2. Obsługa protokołu serwera języka (LSP): serwer języka VSIDL używa tego pliku do wykrywania katalogu głównego i rozwiązywania zależności. Umożliwia to korzystanie z funkcji takich jak „Przejdź do definicji”, autouzupełnianie i weryfikacja w czasie rzeczywistym typów zdefiniowanych w innych katalogach.

Konfigurowanie katalogu

Aby włączyć automatyczne aktualizacje i obsługę LSP w przypadku katalogu VSIDL, utwórz plik CATALOG_UPDATE w katalogu głównym. Jest to plik tekstowy protobuf.

Pola konfiguracji katalogu

  • output_path (string, opcjonalny): ścieżka względna od katalogu głównego do katalogu, w którym powinien zostać umieszczony wygenerowany kod oprogramowania pośredniczącego.
  • dependency_catalog_paths (repeated string): lista ścieżek względnych do innych katalogów. Serwer LSP używa tych ścieżek do rozpoznawania typów zewnętrznych.
  • vsidlc_gen_args (string, opcjonalnie): argumenty przekazywane do vsidlc. Serwer LSP sprawdza je, aby zastosować odpowiednie reguły weryfikacji (np. "--apex").
  • prebuilts_output_path (ciąg znaków, opcjonalnie): ścieżka do wstępnie skompilowanych plików konfiguracji środowiska wykonawczego.
  • prebuilts_filegroup (ciąg znaków, opcjonalny): nazwa Soong filegroup dla wstępnie skompilowanych plików.

Przykładowa konfiguracja

# proto-file: //system/software_defined_vehicle/tools/regenerator/proto/catalog.proto
# proto-message: Catalog

output_path: ".."
dependency_catalog_paths: "../../../../../automotive_services/diagnostics/vsidl/v1"
vsidlc_gen_args: "--apex"

Dlaczego automatyczne aktualizacje są potrzebne

Ręczne utrzymywanie wygenerowanego kodu dla każdego katalogu jest problematyczne z kilku powodów:

  1. Aktualizacje kompilatora: gdy kompilator zostanie zaktualizowany o poprawki błędów lub nowe funkcje, cały wygenerowany kod i pliki, które nie są objęte genrule w pliku Android.bp, należy odświeżyć, aby zachować spójność.
  2. Zarządzanie zależnościami: zmiany w katalogu podstawowym często wymagają ponownego wygenerowania katalogów podrzędnych.
  3. Dokładność: automatyczne aktualizacje zmniejszają ryzyko błędu ludzkiego podczas określania ścieżek i zależności.

Uruchom narzędzie do regeneracji

Narzędzie regenerator przeszukuje drzewo katalogów, zaczynając od katalogu głównego SDV, i szuka plików o nazwie CATALOG_UPDATE.

Aby zaktualizować wszystkie skonfigurowane katalogi:

  1. Utwórz narzędzie:

    m regenerator
    
  2. Uruchom narzędzie:

    regenerator
    

    Opcjonalnie możesz uruchomić go rekurencyjnie w przypadku określonego katalogu:console regenerator --root /path/to/directory

Narzędzie aktualizuje wygenerowane pliki i przeprowadza pełną kompilację (m droid), aby sprawdzić, czy zmiany są zgodne z pozostałą częścią systemu.