Detail Implementasi Resolusi Toolchain

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.
Laporkan masalah Lihat sumber

Catatan: Bagian ini ditujukan untuk developer Bazel, dan tidak diperlukan oleh penulis aturan.

Beberapa class SkyFunction menerapkan proses resolusi toolchain:

  1. RegisteredToolchainsFunction dan RegisteredExecutionPlatformsFunction menemukan toolchain dan platform eksekusi yang tersedia, berdasarkan konfigurasi saat ini dan file WORKSPACE.

  2. SingleToolchainResolutionFunction me-resolve satu jenis toolchain untuk setiap platform eksekusi. Artinya, untuk setiap platform eksekusi, toolchain terbaik yang terdaftar akan digunakan berdasarkan kriteria berikut:

    1. Pastikan toolchain dan platform target kompatibel, dengan memeriksa atribut target_compatible_with.
    2. Pastikan toolchain dan platform eksekusi kompatibel, dengan memeriksa atribut exec_compatible_with.
    3. Jika beberapa toolchain tersisa, pilih toolchain dengan prioritas tertinggi (satu yang didaftarkan terlebih dahulu).
  3. ToolchainResolutionFunction memanggil SingleToolchainResolutionFunction untuk setiap jenis toolchain yang diminta, lalu menentukan platform eksekusi terbaik untuk digunakan.

    1. Pertama, hapus setiap platform eksekusi yang tidak memiliki toolchain yang valid untuk setiap jenis toolchain yang diminta.
    2. Jika ada beberapa platform eksekusi yang tersisa, pilih platform dengan prioritas tertinggi (yang telah didaftarkan terlebih dahulu).
      1. Jika platform eksekusi sudah disetel 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", ini tidak diimplementasikan 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 otomatis tidak valid (karena tidak ada toolchain yang valid, atau karena batasan eksekusi dari aturan atau target), platform eksekusi yang valid dengan prioritas tertinggi akan digunakan.