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ụ:
RegisteredToolchainsFunction
vàRegisteredExecutionPlatformsFunction
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.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:- Đả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
. - 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
. - 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).
- Đả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
ToolchainResolutionFunction
sẽ gọiSingleToolchainResolutionFunction
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.- 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.
- 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).
- 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.