कैटलॉग अपने-आप अपडेट होने और एलएसपी इंटिग्रेशन की सुविधा

सॉफ़्टवेयर-परिभाषित वाहन (एसडीवी) के प्लैटफ़ॉर्म में, कोड बेस में कई VSIDL कैटलॉग होते हैं. CATALOG_UPDATE फ़ाइल, हर कैटलॉग के लिए एक सेंट्रल कॉन्फ़िगरेशन उपलब्ध कराती है. इससे, ऑटोमेशन अपडेट और IDE इंटिग्रेशन, दोनों को चालू किया जा सकता है.

CATALOG_UPDATE फ़ाइल की भूमिका

CATALOG_UPDATE फ़ाइल का इस्तेमाल दो मुख्य कामों के लिए किया जाता है:

  1. अपने-आप अपडेट होने की सुविधा: इस फ़ाइल की मदद से, regenerator टूल को सिस्टम में मौजूद सभी कैटलॉग को ढूंढने और फिर से कंपाइल करने की अनुमति मिलती है. ऐसा तब होता है, जब कंपाइलर या डिपेंडेंसी में बदलाव होता है.
  2. लैंग्वेज सर्वर प्रोटोकॉल (एलएसपी) का इस्तेमाल: VSIDL लैंग्वेज सर्वर, इस फ़ाइल का इस्तेमाल कैटलॉग रूट का पता लगाने और डिपेंडेंसी को हल करने के लिए करता है. इससे "डेफ़िनिशन पर जाएं", अपने-आप पूरा होने की सुविधा, और अन्य कैटलॉग में तय किए गए टाइप के लिए रीयल-टाइम में पुष्टि करने जैसी सुविधाएं चालू होती हैं.

कैटलॉग कॉन्फ़िगर करना

VSIDL कैटलॉग के लिए, अपने-आप अपडेट होने की सुविधा और एलएसपी की सुविधा चालू करने के लिए, कैटलॉग की रूट डायरेक्ट्री में CATALOG_UPDATE फ़ाइल बनाएं. यह फ़ाइल, टेक्स्ट प्रोटोबफ़ फ़ाइल है.

कैटलॉग कॉन्फ़िगरेशन फ़ील्ड

  • output_path (स्ट्रिंग, ज़रूरी नहीं): कैटलॉग रूट से उस डायरेक्ट्री का रिलेटिव पाथ जहां जनरेट किए गए मिडलवेयर कोड को रखा जाना चाहिए.
  • dependency_catalog_paths (repeated string): अन्य कैटलॉग डायरेक्ट्री के लिए, रिलेटिव पाथ की सूची. एलएसपी सर्वर इन पाथ का इस्तेमाल, बाहरी टाइप को हल करने के लिए करता है.
  • vsidlc_gen_args (स्ट्रिंग, ज़रूरी नहीं): vsidlc को पास किए गए तर्क. एलएसपी सर्वर, पुष्टि करने के सही नियम लागू करने के लिए इनकी जांच करता है. उदाहरण के लिए, "--apex".
  • prebuilts_output_path (string, optional): जनरेट किए गए रनटाइम कॉन्फ़िगरेशन के प्रीबिल्ट का पाथ.
  • prebuilts_filegroup (string, optional): The Soong filegroup name for prebuilts.

कॉन्फ़िगरेशन का उदाहरण

# 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 टूल, एसडीवी रूट से शुरू होने वाले डायरेक्ट्री ट्री को स्कैन करता है. साथ ही, CATALOG_UPDATE नाम की फ़ाइलों को ढूंढता है.

कॉन्फ़िगर किए गए सभी कैटलॉग अपडेट करने के लिए:

  1. टूल बनाएं:

    m regenerator
    
  2. टूल चलाएं:

    regenerator
    

    अगर चाहें, तो इसे किसी डायरेक्ट्री के लिए बार-बार चलाएं: console regenerator --root /path/to/directory

यह टूल, जनरेट की गई फ़ाइलों को अपडेट करता है. साथ ही, यह पूरा बिल्ड (m droid) बनाता है, ताकि यह पुष्टि की जा सके कि बदलाव, सिस्टम के बाकी हिस्सों के साथ काम करते हैं.