Catatan: Bagian ini ditujukan untuk developer Bazel, dan tidak diperlukan oleh penulis aturan.
Beberapa class SkyFunction mengimplementasikan proses resolusi toolchain:
RegisteredToolchainsFunctiondanRegisteredExecutionPlatformsFunctionmenemukan toolchain dan platform eksekusi yang tersedia, berdasarkan konfigurasi saat ini dan file WORKSPACE.SingleToolchainResolutionFunctionmenyelesaikan satu jenis toolchain untuk setiap platform eksekusi. Artinya, untuk setiap platform eksekusi, fungsi ini akan menemukan toolchain terdaftar terbaik untuk digunakan berdasarkan kriteria berikut:- Pastikan toolchain dan platform target kompatibel, dengan memeriksa atribut
target_compatible_with. - Pastikan toolchain dan platform eksekusi kompatibel, dengan memeriksa atribut
exec_compatible_with. - Jika masih ada beberapa toolchain, pilih toolchain dengan prioritas tertinggi (toolchain yang didaftarkan pertama).
- Pastikan toolchain dan platform target kompatibel, dengan memeriksa atribut
ToolchainResolutionFunctionmemanggilSingleToolchainResolutionFunctionuntuk setiap jenis toolchain yang diminta, dan lalu menentukan platform eksekusi terbaik untuk digunakan.- Pertama, hapus platform eksekusi yang tidak memiliki toolchain yang valid untuk setiap jenis toolchain yang diminta.
- Jika masih ada beberapa platform eksekusi, pilih platform eksekusi dengan prioritas tertinggi (platform eksekusi yang didaftarkan pertama).
- Jika platform eksekusi sudah ditetapkan oleh transisi toolchain, platform tersebut akan dipilih terlebih dahulu seperti yang dijelaskan di bawah.
Seperti yang dibahas dalam Toolchain dan Konfigurasi,
dependensi dari target ke toolchain menggunakan konfigurasi khusus yang
memaksa platform eksekusi menjadi sama untuk keduanya. Meskipun namanya
"transisi toolchain", hal ini tidak diimplementasikan sebagai transisi
konfigurasi, melainkan sebagai subclass khusus dari
ConfiguredTargetKey, yang disebut
ToolchainDependencyConfiguredTargetKey.
Selain data lainnya di ConfiguredTargetKey, subclass ini juga menyimpan label platform eksekusi. Saat ToolchainResolutionFunction mempertimbangkan platform eksekusi mana yang akan digunakan, jika platform eksekusi yang dipaksakan dari ToolchainDependencyConfiguredTargetKey valid, platform tersebut akan digunakan meskipun bukan yang memiliki prioritas tertinggi.
Catatan: Jika platform eksekusi yang dipaksakan tidak valid (karena tidak ada toolchain yang valid, atau karena batasan eksekusi dari aturan atau target), platform eksekusi valid dengan prioritas tertinggi akan digunakan.