Catatan: Bagian ini ditujukan untuk developer Bazel, dan tidak diperlukan oleh penulis aturan.
Beberapa class SkyFunction menerapkan proses resolusi toolchain:
RegisteredToolchainsFunction
danRegisteredExecutionPlatformsFunction
menemukan toolchain dan platform eksekusi yang tersedia, berdasarkan konfigurasi dan file WORKSPACE.SingleToolchainResolutionFunction
me-resolve satu jenis toolchain untuk setiap platform eksekusi. Yaitu, untuk setiap platform eksekusi, ia 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 ada beberapa toolchain yang tersisa, pilih yang memiliki prioritas tertinggi ( satu yang didaftarkan terlebih dahulu).
- Pastikan toolchain dan platform target kompatibel, dengan memeriksa
atribut
ToolchainResolutionFunction
panggilanSingleToolchainResolutionFunction
untuk setiap jenis toolchain yang diminta, dan kemudian menentukan platform eksekusi terbaik yang akan digunakan.- Pertama, hapus semua platform eksekusi yang tidak memiliki untuk setiap jenis toolchain yang diminta.
- Jika ada beberapa platform eksekusi yang tersisa, pilih prioritas tertinggi
satu (yang didaftarkan pertama kali).
- Jika platform eksekusi sudah ditetapkan oleh toolchain pilihan ini akan dipilih terlebih dahulu sebagaimana dijelaskan di bawah ini.
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", ini tidak diterapkan sebagai konfigurasi
transisi, namun alih-alih sebagai subclass khusus dari
ConfiguredTargetKey
, dipanggil
ToolchainDependencyConfiguredTargetKey
.
Selain data lain di ConfiguredTargetKey
, subclass ini juga memiliki
label platform eksekusi. Jika ToolchainResolutionFunction
adalah
mempertimbangkan platform eksekusi mana yang akan digunakan, jika platform {i>forced execution<i}
dari ToolchainDependencyConfiguredTargetKey
adalah valid, ini akan digunakan bahkan
jika itu bukan prioritas tertinggi.
Catatan: Jika platform eksekusi paksa tidak valid (karena tidak ada toolchain yang valid, atau karena batasan eksekusi dari aturan atau target), maka platform eksekusi valid dengan prioritas tertinggi akan digunakan.