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

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

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

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

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

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

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

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

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