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

รายงานปัญหา ดูซอร์สโค้ด รุ่นสำหรับนักพัฒนาซอฟต์แวร์รายวัน · 8.0 · 7.5 · 7.4 · 7.3 · 7.2

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

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

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

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

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

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

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

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