अतिरिक्त कार्रवाइयों के नियम

नियम

action_listener

action_listener(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, extra_actions, features, licenses, mnemonics, restricted_to, tags, target_compatible_with, testonly, visibility)

चेतावनी: अतिरिक्त कार्रवाइयों का इस्तेमाल बंद कर दिया गया है. इसके बजाय, aspects का इस्तेमाल करें.

action_listener नियम से कोई आउटपुट नहीं मिलता. इसके बजाय, यह टूल डेवलपर को बिल्ड सिस्टम में extra_action डालने की अनुमति देता है. इसके लिए, ऐक्शन से extra_action तक मैपिंग की जाती है.

इस नियम के आर्ग्युमेंट, ऐक्शन के लिए याद रखने लायक शब्दों को extra_action नियमों पर मैप करते हैं.

--experimental_action_listener=<label> विकल्प चुनने पर, बिल्ड ग्राफ़ में extra_action डालने के लिए, बिल्ड में बताए गए action_listener का इस्तेमाल किया जाएगा.

उदाहरण

action_listener(
    name = "index_all_languages",
    mnemonics = [
        "Javac",
        "CppCompile",
        "Python",
    ],
    extra_actions = [":indexer"],
)

action_listener(
    name = "index_java",
    mnemonics = ["Javac"],
    extra_actions = [":indexer"],
)

extra_action(
    name = "indexer",
    tools = ["//my/tools:indexer"],
    cmd = "$(location //my/tools:indexer)" +
          "--extra_action_file=$(EXTRA_ACTION_FILE)",
)

तर्क

विशेषताएं
name

Name; required

इस टारगेट के लिए यूनीक नाम.

extra_actions

List of labels; required

extra_action टारगेट की सूची इस action_listener को बिल्ड ग्राफ़ में जोड़ना चाहिए. उदाहरण के लिए, [ "//my/tools:analyzer" ].
mnemonics

List of strings; required

ऐक्शन के उन मेनेमोनिक की सूची जिन पर इस action_listener को ध्यान देना चाहिए, जैसे कि [ "Javac" ].

मेमोनेमिक, सार्वजनिक इंटरफ़ेस नहीं होते. इस बात की कोई गारंटी नहीं है कि स्मृति सहायक और उनकी कार्रवाइयां न बदलें.

extra_action

extra_action(name, data, cmd, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, out_templates, requires_action_output, restricted_to, tags, target_compatible_with, testonly, toolchains, tools, visibility)

चेतावनी: अतिरिक्त कार्रवाइयों का इस्तेमाल बंद कर दिया गया है. इसके बजाय, aspects का इस्तेमाल करें.

extra_action नियम, रेगुलर बिल्ड टारगेट के तौर पर बताए जाने पर कोई काम का आउटपुट नहीं देता. इसके बजाय, यह टूल डेवलपर को बिल्ड ग्राफ़ में ऐसी अतिरिक्त कार्रवाइयां डालने की अनुमति देता है जो मौजूदा कार्रवाइयों को शैडो करती हैं.

extra_action को चालू करने के तरीके के बारे में जानकारी पाने के लिए, action_listener देखें.

extra_action, कमांड-लाइन के तौर पर काम करते हैं. कमांड-लाइन टूल को, $(EXTRA_ACTION_FILE) के तौर पर प्रोटोकॉल बफ़र वाली फ़ाइल का ऐक्सेस मिलता है. इसमें, ओरिजनल ऐक्शन के बारे में पूरी जानकारी होती है. इसके पास उन सभी इनपुट फ़ाइलों का ऐक्सेस भी होता है जिनका ऐक्सेस ओरिजनल ऐक्शन के पास होता है. प्रोटोकॉल बफ़र में सेव किए गए डेटा के बारे में जानकारी पाने के लिए, extra_actions_base.proto देखें. हर प्रोटो फ़ाइल में ExtraActionInfo मैसेज होता है.

अन्य सभी कार्रवाइयों की तरह ही, अतिरिक्त कार्रवाइयों को सैंडबॉक्स किया जाता है. साथ ही, उन्हें इस तरह से डिज़ाइन किया जाना चाहिए कि वे सैंडबॉक्स में काम कर सकें.

तर्क

विशेषताएं
name

Name; required

इस टारगेट के लिए यूनीक नाम.

इस नियम का रेफ़रंस देने के लिए, action_listener नियमों के extra_actions आर्ग्युमेंट में label का इस्तेमाल करें.
cmd

String; required

चलाया जाने वाला निर्देश.

यह genrule cmd एट्रिब्यूट की तरह ही है. हालांकि, इनमें ये अंतर हैं:

  1. ह्यूरिस्टिक लेबल एक्सपैंशन नहीं. सिर्फ़ $(location ...) का इस्तेमाल करने वाले लेबल बड़े किए जाते हैं.

  2. out_templates एट्रिब्यूट से जनरेट किए गए सभी आउटपुट की जगह, वैल्यू को बदलने के लिए स्ट्रिंग पर एक और पास लागू किया जाता है. $(output out_template) के सभी इंस्टेंस, label से दिखाए गए फ़ाइल के पाथ से बदल दिए जाते हैं.

    उदाहरण के लिए, out_template $(ACTION_ID).analysis को $(output $(ACTION_ID).analysis) से मैच किया जा सकता है.

    असल में, यह $(location) जैसा ही सबस्टिट्यूशन है, लेकिन इसका दायरा अलग है.

out_templates

List of strings; optional

extra_action निर्देश से जनरेट की गई फ़ाइलों के लिए टेंप्लेट की सूची.

टेंप्लेट में इन वैरिएबल का इस्तेमाल किया जा सकता है:

  • $(ACTION_ID), यह एक ऐसा आईडी है जिससे इस extra_action की खास पहचान की जाती है. इसका इस्तेमाल, यूनीक आउटपुट फ़ाइल जनरेट करने के लिए किया जाता है.

requires_action_output

Boolean; optional; default is False

इससे पता चलता है कि इस extra_action के लिए, ओरिजनल ऐक्शन का आउटपुट, इस extra_action के इनपुट के तौर पर मौजूद होना चाहिए.

अगर यह 'सही है' (डिफ़ॉल्ट रूप से 'गलत है') पर सेट है, तो extra_action यह मान सकता है कि ओरिजनल ऐक्शन के आउटपुट, इनपुट के हिस्से के तौर पर उपलब्ध हैं.

tools

List of labels; optional

इस नियम के लिए tool डिपेंडेंसी की सूची.

ज़्यादा जानकारी के लिए, डिपेंडेंसी की परिभाषा देखें.

बिल्ड सिस्टम यह पक्का करता है कि extra_action कमांड को चलाने से पहले, ये ज़रूरी शर्तें पूरी हो गई हों. इन्हें hostकॉन्फ़िगरेशन का इस्तेमाल करके बनाया जाता है, क्योंकि इन्हें बिल्ड के दौरान टूल के तौर पर चलाना ज़रूरी होता है. किसी एक tools टारगेट //x:y का पाथ, $(location //x:y) का इस्तेमाल करके पाया जा सकता है.

सभी टूल और उनके डेटा डिपेंडेंसी को एक ही ट्री में इकट्ठा किया जाता है जिसमें कमांड, रिलेटिव पाथ का इस्तेमाल कर सकता है. वर्किंग डायरेक्ट्री, उस यूनिफ़ाइड ट्री का रूट होगी.