รายละเอียดการติดตั้งใช้งานการแก้ไขปัญหาของ Toolchain

หมายเหตุ: ส่วนนี้มีไว้สำหรับนักพัฒนา Bazel และผู้เขียนกฎไม่จำเป็นต้องใช้

คลาส SkyFunction หลายคลาสใช้กระบวนการการแก้ไข Toolchain ดังนี้

  1. RegisteredToolchainsFunction และ RegisteredExecutionPlatformsFunction ค้นหาชุดเครื่องมือและแพลตฟอร์มการดำเนินการที่พร้อมใช้งานตาม การกำหนดค่าปัจจุบันและไฟล์ WORKSPACE

  2. SingleToolchainResolutionFunction จะแก้ไขประเภทเชนเครื่องมือเดียวสำหรับแพลตฟอร์มการดำเนินการทุกแพลตฟอร์ม กล่าวคือ สำหรับ แพลตฟอร์มการดำเนินการทุกแพลตฟอร์ม ระบบจะค้นหาเครื่องมือที่ลงทะเบียนที่ดีที่สุดเพื่อใช้ตาม เกณฑ์ต่อไปนี้

    1. ตรวจสอบว่า Toolchain และแพลตฟอร์มเป้าหมายเข้ากันได้โดยดูที่แอตทริบิวต์ target_compatible_with
    2. ตรวจสอบว่าเครื่องมือและแพลตฟอร์มการดำเนินการเข้ากันได้โดย ดูexec_compatible_withแอตทริบิวต์
    3. หากมี Toolchain หลายรายการ ให้เลือก Toolchain ที่มีลำดับความสำคัญสูงสุด (Toolchain ที่ลงทะเบียนก่อน)
  3. ToolchainResolutionFunction สำหรับเครื่องมือแต่ละประเภทที่ขอ และ จากนั้นจะพิจารณาแพลตฟอร์มการดำเนินการที่ดีที่สุดที่จะใช้SingleToolchainResolutionFunction

    1. ก่อนอื่น ให้นำแพลตฟอร์มการดำเนินการที่ไม่มี ทูลเชนที่ถูกต้องสำหรับทูลเชนแต่ละประเภทที่ขอออก
    2. หากเหลือแพลตฟอร์มการดำเนินการหลายแพลตฟอร์ม ให้เลือกแพลตฟอร์มที่มีลำดับความสำคัญสูงสุด (แพลตฟอร์มที่ลงทะเบียนก่อน)
      1. หากเครื่องมือเปลี่ยนชุดเครื่องมือได้ตั้งค่าแพลตฟอร์มการดำเนินการไว้แล้ว ระบบจะเลือกแพลตฟอร์มนั้นก่อนตามที่อธิบายไว้ด้านล่าง

ดังที่ได้กล่าวไว้ในชุดเครื่องมือและการกำหนดค่า การอ้างอิงจากเป้าหมายไปยังชุดเครื่องมือใช้การกำหนดค่าพิเศษที่ บังคับให้แพลตฟอร์มการดำเนินการเหมือนกันสำหรับทั้ง 2 อย่าง แม้จะชื่อว่า "การเปลี่ยนเครื่องมือ" แต่การดำเนินการนี้ไม่ได้เป็นการเปลี่ยนการกำหนดค่า แต่เป็นการใช้คลาสย่อยพิเศษของ ConfiguredTargetKey ที่เรียกว่า ToolchainDependencyConfiguredTargetKey นอกเหนือจากข้อมูลอื่นๆ ใน ConfiguredTargetKey แล้ว คลาสย่อยนี้ยังมี ป้ายกำกับของแพลตฟอร์มการดำเนินการด้วย เมื่อToolchainResolutionFunctionพิจารณาว่าจะใช้แพลตฟอร์มการดำเนินการใด หากแพลตฟอร์มการดำเนินการที่บังคับจาก ToolchainDependencyConfiguredTargetKey ใช้ได้ ระบบจะใช้แพลตฟอร์มดังกล่าวแม้ว่าจะไม่ใช่แพลตฟอร์มที่มีลำดับความสำคัญสูงสุดก็ตาม

หมายเหตุ: หากแพลตฟอร์มการดำเนินการที่บังคับใช้ไม่ถูกต้อง (เนื่องจากไม่มี ชุดเครื่องมือที่ถูกต้อง หรือเนื่องจากข้อจำกัดในการดำเนินการจากกฎหรือเป้าหมาย) ระบบจะใช้แพลตฟอร์มการดำเนินการที่ถูกต้องซึ่งมีลำดับความสำคัญสูงสุดแทน