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

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

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

  1. RegisteredToolchainsFunction और RegisteredExecutionPlatformsFunction , मौजूदा कॉन्फ़िगरेशन और WORKSPACE फ़ाइल के आधार पर, उपलब्ध टूलचेन और एक्ज़ीक्यूशन प्लैटफ़ॉर्म ढूंढती हैं.

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

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

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

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

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