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