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

ध्यान दें: यह सेक्शन, 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 से मिले फ़ोर्स्ड एक्ज़ीक्यूशन प्लैटफ़ॉर्म की जानकारी मान्य है, तो उसका इस्तेमाल किया जाएगा. भले ही, वह सबसे ज़्यादा प्राथमिकता वाला प्लैटफ़ॉर्म न हो.

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