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

Lưu ý: Phần này dành cho các nhà phát triển Bazel và không cần nhiều tác giả quy tắc.

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

  1. RegisteredToolchainsFunctionRegisteredExecutionPlatformsFunction tìm các chuỗi công cụ và nền tảng thực thi có sẵn, 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ụ duy nhất cho mọi nền tảng thực thi. Điều này có nghĩa là đối với mọi nền tảng thực thi, nó sẽ tìm ra chuỗi công cụ đượ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 với nhau, bằng cách kiểm tra thuộc tính target_compatible_with.
    2. Hãy đảm bảo rằng nền tảng công cụ và nền tảng thực thi tương thích với nhau bằng cách kiểm tra thuộc tính exec_compatible_with.
    3. Nếu còn lại nhiều chuỗi công cụ, hãy chọn công cụ có mức độ ưu tiên cao nhất (công cụ đã được đăng ký trước).
  3. ToolchainResolutionFunction sẽ gọi SingleToolchainResolutionFunction cho từng loại chuỗi công cụ mà bạn yêu cầu, sau đó sẽ xác định nền tảng thực thi tốt nhất để sử dụng.

    1. Trước tiên, hãy xóa mọi nền tảng thực thi không có công cụ hợp lệ cho từng loại công cụ chuỗi được yêu cầu.
    2. Nếu bạn còn lại 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).
      1. Nếu nền tảng thực thi đã được đặt bởi quá trình chuyển đổi công cụ, thì nền tảng thực thi này sẽ được chọn trước tiên như mô tả dưới đây.

Như đã thảo luận trong phần Công cụ và cấu hình, phần phụ thuộc từ mục tiêu đến công cụ chuỗi sử dụng 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ên này không được triển khai dưới dạng lượt chuyển đổi cấu hình mà thay vào đó là một lớp con đặc biệt của ConfiguredTargetKey, được gọi là ToolchainDependencyConfiguredTargetKey. Ngoài các dữ liệu khác trong ConfiguredTargetKey, lớp con này cũng giữ nhãn của nền tảng thực thi. Khi ToolchainResolutionFunction đang cân nhắc sử dụng nền tảng thực thi nào, nếu nền tảng thực thi bắt buộc từ ToolchainDependencyConfiguredTargetKey là hợp lệ, thì nền tảng sẽ được sử dụng ngay cả khi không phải là mức độ ưu tiên cao nhất.

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