Lưu ý: Phần này dành cho nhà phát triển Bazel và không cần thiết cho 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ụ:
RegisteredToolchainsFunctionvàRegisteredExecutionPlatformsFunctiontì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 hiện tại và tệp WORKSPACE.SingleToolchainResolutionFunctionphân giải một loại chuỗi công cụ duy nhất 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, hàm 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:- Đả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. - Đả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. - Nếu còn lại 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ý đầu tiên).
- Đả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
ToolchainResolutionFunctiongọiSingleToolchainResolutionFunctioncho từng loại chuỗi công cụ được yêu cầu, và sau đó xác định nền tảng thực thi tốt nhất để sử dụng.- 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.
- Nếu còn lại nhiều nền tảng thực thi, hãy chọn nền tảng thực thi có mức ưu tiên cao nhất (nền tảng thực thi được đăng ký đầu tiên).
- Nếu nền tảng thực thi đã được quá trình chuyển đổi chuỗi công cụ đặt, thì nền tảng đó sẽ được chọn trước như mô tả bên dưới.
Như đã thảo luận trong Chuỗi công cụ và cấu hình,
phần phụ thuộc từ mục tiêu đến 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à
"quá trình chuyển đổi chuỗi công cụ", nhưng quá trình này không được triển khai dưới dạng cấu hình
chuyển đổi, mà thay vào đó là một lớp con đặc biệt của
ConfiguredTargetKey, được gọi là
ToolchainDependencyConfiguredTargetKey.
Ngoài 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 nên 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à 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 ràng buộc thực thi từ quy tắc hoặc mục tiêu), 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.