Automatyczne aktualizacje katalogu i integracja z LSP

Platforma Software Defined Vehicle (SDV) zawiera wiele katalogów VSIDL w bazie kodu. Plik CATALOG_UPDATE zapewnia scentralizowaną konfigurację każdego katalogu, umożliwiając zarówno automatyczne aktualizacje, jak i integrację ze środowiskiem 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 kompilator lub zależności ulegną zmianie.
  2. Obsługa protokołu Language Server Protocol (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 katalogu VSIDL, utwórz plik CATALOG_UPDATE w katalogu głównym katalogu. Ten plik jest plikiem protobuf w formacie tekstowym.

Pola konfiguracji katalogu

  • output_path (ciąg tekstowy, 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 (powtarzający się ciąg znaków): 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 (ciąg znaków, opcjonalny): argumenty przekazywane do vsidlc. Serwer LSP sprawdza je, aby zastosować prawidłowe reguły sprawdzania poprawności (np. "--apex").
  • prebuilts_output_path (ciąg znaków, opcjonalnie): ścieżka do wygenerowanych gotowych konfiguracji środowiska wykonawczego.
  • prebuilts_filegroup (ciąg znaków, opcjonalny): nazwa filegroup Soong dla gotowych 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 jest aktualizowany o poprawki błędów lub nowe funkcje, wszystkie wygenerowane kody i pliki, które nie są objęte dyrektywą genrule w pliku Android.bp, powinny zostać odświeżone, 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 człowieka podczas określania ścieżek i zależności.

Uruchamianie narzędzia do ponownego generowania

Narzędzie regenerator przechodzi przez 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ć je rekurencyjnie dla określonego katalogu: console regenerator --root /path/to/directory

Narzędzie aktualizuje wygenerowane pliki i wykonuje pełną kompilację (m droid), aby sprawdzić, czy zmiany są zgodne z resztą systemu.