Thông tin chi tiết về việc triển khai giải pháp chuỗi công cụ

Báo cáo vấn đề Xem nguồn Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Lưu ý: Phần này dành cho các nhà phát triển Bazel và không cần thiết đối với tác giả quy tắc.

Một số lớp SkyFunction triển khai quy trình phân giải chuỗi công cụ:

  1. RegisteredToolchainsFunctionRegisteredExecutionPlatformsFunction tìm các chuỗi công cụ và nền tảng thực thi hiện có, dựa trên cấu hình và tệp WORKSPACE hiện tại.

  2. SingleToolchainResolutionFunction giải quyết một loại chuỗi công cụ cho mỗi nền tảng thực thi. Tức là đối với mọi nền tảng thực thi, công cụ này sẽ tìm chuỗi công cụ đã đăng ký tốt nhất để sử dụng dựa trên các tiêu chí sau:

    1. Đảm bảo chuỗi công cụ và nền tảng mục tiêu tương thích bằng cách kiểm tra thuộc tính target_compatible_with.
    2. Đảm bảo chuỗi công cụ và nền tảng thực thi tương thích bằng cách kiểm tra thuộc tính exec_compatible_with.
    3. Nếu còn nhiều chuỗi công cụ, hãy chọn chuỗi công cụ có mức độ ưu tiên cao nhất (chuỗi công cụ được đăng ký trước tiên).
  3. ToolchainResolutionFunction gọi SingleToolchainResolutionFunction cho từng loại chuỗi công cụ được yêu cầu, sau đó xác định nền tảng thực thi tốt nhất để sử dụng.

    1. Trước tiên, hãy xoá mọi nền tảng thực thi không có chuỗi công cụ hợp lệ cho từng loại chuỗi công cụ được yêu cầu.
    2. Nếu còn nhiều nền tảng thực thi, hãy chọn nền tảng có mức độ ưu tiên cao nhất (nền tảng được đăng ký trước tiên).
      1. Nếu quá trình chuyển đổi chuỗi công cụ đã đặt nền tảng thực thi, thì nền tảng này sẽ được chọn trước như mô tả dưới đây.

Như đã thảo luận trong phần Chuỗi công cụ và cấu hình, phần phụ thuộc từ một mục tiêu đến một chuỗi công cụ sử dụng một cấu hình đặc biệt buộc nền tảng thực thi phải giống nhau cho cả hai. Mặc dù có tên là "chuyển đổi chuỗi công cụ", nhưng tính năng này không được triển khai dưới dạng chuyển đổi cấu hình mà là một lớp con đặc biệt của ConfiguredTargetKey, có tên là ToolchainDependencyConfiguredTargetKey. Ngoài dữ liệu khác trong ConfiguredTargetKey, lớp con này cũng chứa nhãn của nền tảng thực thi. Khi ToolchainResolutionFunction cân nhắc nền tảng thực thi nào sẽ sử dụng, nếu nền tảng thực thi bắt buộc từ ToolchainDependencyConfiguredTargetKey hợp lệ, thì nền tảng đó sẽ được sử dụng ngay cả khi không phải là nền tảng có mức độ ưu tiên cao nhất.

Lưu ý: Nếu nền tảng thực thi bắt buộc không hợp lệ (vì không có chuỗi công cụ hợp lệ hoặc do các quy tắc hoặc mục tiêu ràng buộc việc thực thi), thì nền tảng thực thi hợp lệ có mức độ ưu tiên cao nhất sẽ được sử dụng.