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 saat ini dan file WORKSPACE.SingleToolchainResolutionFunction
menentukan satu jenis toolchain untuk setiap platform eksekusi. Artinya, untuk setiap platform eksekusi, mereka 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 beberapa toolchain tersisa, pilih yang memiliki prioritas tertinggi (yang didaftarkan terlebih dahulu).
- Pastikan toolchain dan platform target kompatibel, dengan memeriksa
atribut
ToolchainResolutionFunction
memanggilSingleToolchainResolutionFunction
untuk setiap jenis toolchain yang diminta, lalu menentukan platform eksekusi terbaik yang akan digunakan.- Pertama, hapus platform eksekusi yang tidak memiliki toolchain valid untuk setiap jenis toolchain yang diminta.
- Jika beberapa platform eksekusi dibiarkan, pilih yang memiliki prioritas tertinggi (yang terdaftar terlebih dahulu).
- Jika platform eksekusi sudah ditetapkan oleh transisi toolchain, platform ini akan dipilih terlebih dahulu seperti yang dijelaskan di bawah ini.
Seperti yang dibahas di Toolchain dan Konfigurasi,
dependensi dari target ke toolchain menggunakan konfigurasi khusus yang
memaksa platform eksekusi tetap sama untuk keduanya. Meskipun namanya
"transisi toolchain", ini tidak diterapkan sebagai transisi
konfigurasi, tetapi sebagai subclass khusus
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 paksa dari ToolchainDependencyConfiguredTargetKey
valid, platform tersebut akan digunakan meskipun bukan prioritas tertinggi.
Catatan: Jika platform eksekusi paksa tidak valid (karena tidak ada toolchain yang valid, atau karena batasan eksekusi dari aturan atau target), eksekusi paling tinggi valid yang valid yang akan digunakan.