टूलचेन रिज़ॉल्यूशन को लागू करने से जुड़ी जानकारी

ध्यान दें: यह सेक्शन, Bazel डेवलपर के लिए है. यह नियम बनाने वाले लोगों के लिए ज़रूरी नहीं है.

कई Skyफ़ंक्शन क्लास टूलचेन रिज़ॉल्यूशन प्रक्रिया को लागू करती हैं:

  1. RegisteredToolchainsFunction और RegisteredExecutionPlatformsFunction मौजूदा कॉन्फ़िगरेशन और वर्कवर्क प्लैटफ़ॉर्म के आधार पर उपलब्ध टूलचेन और निष्पादन प्लैटफ़ॉर्म ढूंढें.

  2. SingleToolchainResolutionFunction, हर एक परफ़ॉर्मेंस प्लैटफ़ॉर्म के लिए एक ही तरह के टूल की समस्या बताता है. इसका मतलब है कि एक्ज़ीक्यूशन के लिए हर प्लैटफ़ॉर्म को, रजिस्टर की गई बेहतरीन टूलचेन का इस्तेमाल, इन शर्तों के आधार पर करना होता है:

    1. target_compatible_with एट्रिब्यूट की जांच करके, यह पक्का करें कि टूलचेन और टारगेट प्लैटफ़ॉर्म एक-दूसरे के साथ काम करते हैं.
    2. exec_compatible_with एट्रिब्यूट की जांच करके पक्का करें कि टूलचेन और एक्ज़ीक्यूशन प्लैटफ़ॉर्म काम कर सकते हैं.
    3. अगर एक से ज़्यादा टूल चेन बाकी हैं, तो सबसे ज़्यादा प्राथमिकता वाला (सिर्फ़ पहले रजिस्टर किया गया) चुनें.
  3. अनुरोध किए गए हर तरह के टूल के लिए, ToolchainResolutionFunction कॉल SingleToolchainResolutionFunction करता है. इसके बाद, इस्तेमाल करने के लिए सबसे सही प्लैटफ़ॉर्म तय करता है.

    1. सबसे पहले, अनुरोध किए गए हर टूल के प्रकार के लिए ऐसा कोई भी निष्पादन प्लैटफ़ॉर्म हटा दें जिसमें मान्य टूलचेन नहीं हो.
    2. अगर एक से ज़्यादा एक्ज़ीक्यूशन प्लैटफ़ॉर्म बचे हैं, तो सबसे ज़्यादा प्राथमिकता वाला (वह जिसे सबसे पहले रजिस्टर किया गया है) चुनें.
      1. अगर टूलचैन ट्रांज़िशन के ज़रिए एक्ज़ीक्यूशन प्लैटफ़ॉर्म पहले से सेट है, तो पहले नीचे बताए गए तरीके से उसे चुना जाएगा.

जैसा कि टूल डिज़ाइन और कॉन्फ़िगरेशन में बताया गया है, टारगेट से टूल चेन पर निर्भरता एक ऐसे खास कॉन्फ़िगरेशन का इस्तेमाल करती है जो एक्ज़ीक्यूशन प्लैटफ़ॉर्म को दोनों के लिए एक जैसा बनाता है. "टूलचेन ट्रांज़िशन" नाम के बावजूद, इसे कॉन्फ़िगरेशन ट्रांज़िशन के तौर पर लागू नहीं किया गया है. इसके बजाय, इसे ConfiguredTargetKey के खास सब-क्लास के तौर पर लागू किया जाता है. इस क्लास को ToolchainDependencyConfiguredTargetKey. ConfiguredTargetKey में मौजूद दूसरे डेटा के अलावा, इस सब-क्लास में, एक्ज़ीक्यूशन प्लैटफ़ॉर्म का लेबल भी होता है. जब ToolchainResolutionFunction इस बात पर विचार कर रहा हो कि किस निष्पादन प्लेटफ़ॉर्म का उपयोग करना है, अगर ToolchainDependencyConfiguredTargetKey का बाध्य किया गया निष्पादन प्लेटफ़ॉर्म मान्य है, तो उसका उपयोग किया जाएगा, भले ही वह उच्च-प्राथमिकता नहीं हो.

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