หมายเหตุ: ส่วนนี้มีไว้สำหรับนักพัฒนาซอฟต์แวร์ Bazel และผู้เขียนกฎไม่จำเป็นต้องใช้
คลาส SkyFunction หลายคลาสใช้กระบวนการแก้ปัญหา Toolchain ดังนี้
RegisteredToolchainsFunctionและRegisteredExecutionPlatformsFunctionจะค้นหา Toolchain และแพลตฟอร์มการดำเนินการที่พร้อมใช้งานตามการกำหนดค่าปัจจุบันและไฟล์ WORKSPACESingleToolchainResolutionFunctionจะแก้ปัญหา Toolchain ประเภทเดียวสำหรับแพลตฟอร์มการดำเนินการทุกแพลตฟอร์ม นั่นคือ สำหรับแพลตฟอร์มการดำเนินการทุกแพลตฟอร์ม ฟังก์ชันนี้จะค้นหา Toolchain ที่ลงทะเบียนไว้ที่ดีที่สุดเพื่อใช้ตามเกณฑ์ต่อไปนี้- ตรวจสอบว่า Toolchain และแพลตฟอร์มเป้าหมายเข้ากันได้โดยดูแอตทริบิวต์
target_compatible_with - ตรวจสอบว่า Toolchain และแพลตฟอร์มการดำเนินการเข้ากันได้โดยดูแอตทริบิวต์
exec_compatible_with - หากมี Toolchain เหลืออยู่หลายรายการ ให้เลือกรายการที่มีลำดับความสำคัญสูงสุด (รายการที่ลงทะเบียนไว้ก่อน)
- ตรวจสอบว่า Toolchain และแพลตฟอร์มเป้าหมายเข้ากันได้โดยดูแอตทริบิวต์
ToolchainResolutionFunctionจะเรียกSingleToolchainResolutionFunctionสำหรับ Toolchain แต่ละประเภทที่ขอ แล้ว กำหนดแพลตฟอร์มการดำเนินการที่ดีที่สุดที่จะใช้- ก่อนอื่น ให้นำแพลตฟอร์มการดำเนินการที่ไม่มี Toolchain ที่ถูกต้องสำหรับ Toolchain แต่ละประเภทที่ขอออก
- หากมีแพลตฟอร์มการดำเนินการเหลืออยู่หลายรายการ ให้เลือกรายการที่มีลำดับความสำคัญสูงสุด (รายการที่ลงทะเบียนไว้ก่อน)
- หากการเปลี่ยน Toolchain ได้ตั้งค่าแพลตฟอร์มการดำเนินการไว้แล้ว ระบบจะเลือกแพลตฟอร์มดังกล่าวเป็นอันดับแรกตามที่อธิบายไว้ด้านล่าง
ตามที่กล่าวไว้ใน Toolchain และการกำหนดค่า,
ทรัพยากร Dependency จากเป้าหมายไปยัง Toolchain จะใช้การกำหนดค่าพิเศษที่
บังคับให้แพลตฟอร์มการดำเนินการของทั้ง 2 รายการเหมือนกัน แม้ว่าจะมีชื่อว่า
"การเปลี่ยน Toolchain" แต่ระบบไม่ได้ใช้การเปลี่ยนนี้เป็นการเปลี่ยนการกำหนดค่า
แต่ใช้เป็นคลาสย่อยพิเศษของ
ConfiguredTargetKeyที่เรียกว่า
ToolchainDependencyConfiguredTargetKey
คลาสย่อยนี้จะเก็บป้ายกำกับของแพลตฟอร์มการดำเนินการไว้ด้วย นอกเหนือจากข้อมูลอื่นๆ ใน ConfiguredTargetKey เมื่อ ToolchainResolutionFunction พิจารณาว่าจะใช้แพลตฟอร์มการดำเนินการใด หากแพลตฟอร์มการดำเนินการที่บังคับจาก ToolchainDependencyConfiguredTargetKey ถูกต้อง ระบบจะใช้แพลตฟอร์มดังกล่าวแม้ว่าจะไม่ใช่แพลตฟอร์มที่มีลำดับความสำคัญสูงสุดก็ตาม
หมายเหตุ: หากแพลตฟอร์มการดำเนินการที่บังคับไม่ถูกต้อง (เนื่องจากไม่มี Toolchain ที่ถูกต้อง หรือเนื่องจากข้อจำกัดในการดำเนินการจากกฎหรือเป้าหมาย) ระบบจะใช้แพลตฟอร์มการดำเนินการที่ถูกต้องซึ่งมีลำดับความสำคัญสูงสุดแทน