Detail Implementasi Resolusi Toolchain

Laporkan masalah Lihat sumber {/18/}{/1/}

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

Beberapa class SkyFunction menerapkan proses resolusi toolchain:

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

  2. SingleToolchainResolutionFunction me-resolve satu jenis toolchain untuk setiap platform eksekusi. Artinya, untuk setiap platform eksekusi, organisasi akan menemukan toolchain terdaftar terbaik untuk 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 ada beberapa toolchain yang tersisa, pilih yang berprioritas tertinggi (yang didaftarkan terlebih dahulu).
  3. ToolchainResolutionFunction memanggil SingleToolchainResolutionFunction untuk setiap jenis toolchain yang diminta, lalu menentukan platform eksekusi terbaik yang akan digunakan.

    1. Pertama, hapus semua platform eksekusi yang tidak memiliki toolchain yang valid untuk setiap jenis toolchain yang diminta.
    2. Jika ada beberapa platform eksekusi yang tersisa, pilih yang berprioritas tertinggi (yang didaftarkan terlebih dahulu).
      1. 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 agar sama untuk keduanya. Terlepas dari namanya "transisi toolchain", ini tidak diterapkan sebagai transisi konfigurasi, melainkan sebagai subclass khusus ConfiguredTargetKey, yang disebut ToolchainDependencyConfiguredTargetKey. Selain data lain di ConfiguredTargetKey, subclass ini juga memiliki label platform eksekusi. Saat ToolchainResolutionFunction mempertimbangkan platform eksekusi 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 rantai alat yang valid, atau karena batasan eksekusi dari aturan atau target), yang akan digunakan adalah platform eksekusi valid dengan prioritas tertinggi.