ध्यान दें: यह सेक्शन, Bazel डेवलपर के लिए है. नियम लिखने वालों के लिए इसकी ज़रूरत नहीं है.
SkyFunction की कई क्लास, टूलचेन रिज़ॉल्यूशन प्रोसेस को लागू करती हैं:
RegisteredToolchainsFunctionऔरRegisteredExecutionPlatformsFunctionमौजूदा कॉन्फ़िगरेशन और WORKSPACE फ़ाइल के आधार पर, उपलब्ध टूलचेन और एक्ज़ीक्यूशन प्लैटफ़ॉर्म ढूंढते हैं.SingleToolchainResolutionFunctionहर एक्ज़ीक्यूशन प्लैटफ़ॉर्म के लिए, एक टूलचेन टाइप को हल करता है. इसका मतलब है कि यह हर प्लैटफ़ॉर्म के लिए, सबसे अच्छी रजिस्टर की गई टूलचेन का पता लगाता है. यह पता लगाने के लिए, इन शर्तों का इस्तेमाल किया जाता है:target_compatible_withएट्रिब्यूट की वैल्यू देखकर पक्का करें कि टूलचेन और टारगेट प्लैटफ़ॉर्म एक-दूसरे के साथ काम करते हों.exec_compatible_withएट्रिब्यूट की वैल्यू देखकर पक्का करें कि टूलचेन और एक्ज़ीक्यूशन प्लैटफ़ॉर्म एक-दूसरे के साथ काम करते हों.- अगर एक से ज़्यादा टूलचेन बचे हैं, तो सबसे ज़्यादा प्राथमिकता वाला टूलचेन चुनें. यह वह टूलचेन होता है जिसे सबसे पहले रजिस्टर किया गया था.
ToolchainResolutionFunctionकॉल करता है. इसके बाद, यह तय करता है कि किस टूलचेन टाइप के लिएSingleToolchainResolutionFunctionका इस्तेमाल करना सबसे सही होगा.- सबसे पहले, ऐसे सभी एक्ज़ीक्यूशन प्लैटफ़ॉर्म हटाएं जिनमें अनुरोध किए गए हर टूलचेन टाइप के लिए, मान्य टूलचेन नहीं है.
- अगर एक से ज़्यादा प्लैटफ़ॉर्म पर एक्सपेरिमेंट चल रहे हैं, तो सबसे ज़्यादा प्राथमिकता वाला प्लैटफ़ॉर्म चुनें. यह वह प्लैटफ़ॉर्म होता है जिसे सबसे पहले रजिस्टर किया गया था.
- अगर टूलचेन ट्रांज़िशन से एक्ज़ीक्यूशन प्लैटफ़ॉर्म पहले से सेट है, तो उसे सबसे पहले चुना जाएगा. इसके बारे में यहां बताया गया है.
टूलचेन और कॉन्फ़िगरेशन में बताए गए तरीके के मुताबिक, टारगेट से टूलचेन तक की डिपेंडेंसी, एक खास कॉन्फ़िगरेशन का इस्तेमाल करती है. इससे दोनों के लिए एक ही एक्ज़ीक्यूशन प्लैटफ़ॉर्म इस्तेमाल करना ज़रूरी हो जाता है. "टूलचेन ट्रांज़िशन" नाम होने के बावजूद, इसे कॉन्फ़िगरेशन ट्रांज़िशन के तौर पर लागू नहीं किया जाता है. इसके बजाय, इसे ConfiguredTargetKey की खास सबक्लास के तौर पर लागू किया जाता है. इसे ToolchainDependencyConfiguredTargetKey कहा जाता है.
ConfiguredTargetKey में मौजूद अन्य डेटा के अलावा, इस सबक्लास में एक्ज़ीक्यूशन प्लैटफ़ॉर्म का लेबल भी होता है. ToolchainResolutionFunction यह तय करते समय कि किस प्लैटफ़ॉर्म का इस्तेमाल करना है, अगर ToolchainDependencyConfiguredTargetKey से मिला फ़ोर्स्ड एक्ज़ीक्यूशन प्लैटफ़ॉर्म मान्य है, तो उसका इस्तेमाल किया जाएगा. भले ही, वह सबसे ज़्यादा प्राथमिकता वाला न हो.
ध्यान दें: अगर फ़ोर्स किए गए एक्ज़ीक्यूशन प्लैटफ़ॉर्म मान्य नहीं हैं (क्योंकि कोई मान्य टूलचेन नहीं है या नियम या टारगेट की वजह से एक्ज़ीक्यूशन की सीमाएं हैं), तो सबसे ज़्यादा प्राथमिकता वाले मान्य एक्ज़ीक्यूशन प्लैटफ़ॉर्म का इस्तेमाल किया जाएगा.