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

รายงานปัญหา ดูแหล่งที่มา

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

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

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

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

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

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

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

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