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

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

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

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

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

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

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

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

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