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

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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