자동 카탈로그 업데이트 및 LSP 통합

소프트웨어 정의 차량 (SDV) 플랫폼에는 코드베이스 전반에 걸쳐 수많은 VSIDL 카탈로그가 포함되어 있습니다. CATALOG_UPDATE 파일은 각 카탈로그의 중앙 집중식 구성을 제공하여 자동 업데이트와 IDE 통합을 모두 지원합니다.

CATALOG_UPDATE 파일의 역할

CATALOG_UPDATE 파일은 다음과 같은 두 가지 주요 용도로 사용됩니다.

  1. 자동 업데이트: 이 파일을 사용하면 컴파일러나 종속 항목이 변경될 때 regenerator 도구가 시스템의 모든 카탈로그를 찾아 다시 컴파일할 수 있습니다.
  2. 언어 서버 프로토콜 (LSP) 지원: VSIDL 언어 서버는 이 파일을 사용하여 카탈로그 루트를 검색하고 종속 항목을 해결합니다. 이렇게 하면 다른 카탈로그에 정의된 유형에 대해 '정의로 이동', 자동 완성, 실시간 유효성 검사와 같은 기능을 사용할 수 있습니다.

카탈로그 구성

VSIDL 카탈로그의 자동 업데이트와 LSP 지원을 사용 설정하려면 카탈로그의 루트 디렉터리에 CATALOG_UPDATE 파일을 만드세요. 이 파일은 텍스트 protobuf 파일입니다.

카탈로그 구성 필드

  • output_path (문자열, 선택사항): 카탈로그 루트에서 생성된 미들웨어 코드를 배치해야 하는 디렉터리까지의 상대 경로입니다.
  • dependency_catalog_paths (반복 문자열): 다른 카탈로그 디렉터리의 상대 경로 목록입니다. LSP 서버는 이러한 경로를 사용하여 외부 유형을 확인합니다.
  • vsidlc_gen_args (문자열, 선택사항): vsidlc에 전달된 인수입니다. LSP 서버는 이를 검사하여 올바른 유효성 검사 규칙 (예: "--apex")을 적용합니다.
  • prebuilts_output_path (문자열, 선택사항): 생성된 런타임 구성 사전 빌드의 경로입니다.
  • prebuilts_filegroup (문자열, 선택사항): 사전 빌드의 Soong filegroup 이름입니다.

구성 예시

# 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"

자동 업데이트가 필요한 이유

모든 카탈로그에 대해 생성된 코드를 수동으로 유지관리하는 데는 다음과 같은 여러 문제가 있습니다.

  1. 컴파일러 업데이트: 버그 수정이나 새 기능으로 컴파일러가 업데이트되면 Android.bp 파일의 genrule로 처리되지 않는 생성된 모든 코드와 파일을 새로고침하여 일관성을 유지해야 합니다.
  2. 종속 항목 관리: 기본 카탈로그의 변경사항으로 인해 다운스트림 카탈로그를 재생성해야 하는 경우가 많습니다.
  3. 정확성: 자동 업데이트를 사용하면 경로와 종속 항목을 지정할 때 인적 오류의 위험이 줄어듭니다.

재생성 도구 실행

regenerator 도구는 SDV 루트에서 시작하여 디렉터리 트리를 탐색하고 이름이 정확히 CATALOG_UPDATE인 파일을 찾습니다.

구성된 모든 카탈로그를 업데이트하려면 다음 단계를 따르세요.

  1. 도구를 빌드합니다.

    m regenerator
    
  2. 도구를 실행합니다.

    regenerator
    

    선택적으로 특정 디렉터리에 대해 재귀적으로 실행합니다. console regenerator --root /path/to/directory

이 도구는 생성된 파일을 업데이트하고 전체 빌드 (m droid)를 실행하여 변경사항이 시스템의 나머지 부분과 호환되는지 확인합니다.