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

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

มีคลาสของ SkyFunction หลายรายการที่ใช้กระบวนการแก้ปัญหาเกี่ยวกับเครื่องมือ

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

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

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

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

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

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