Araç Zinciri Çözüm Uygulama Ayrıntıları

Sorun bildirin Kaynağı göster

Not: Bu bölüm, Bazel geliştiricileri için hazırlanmıştır ve kural yazarları tarafından gerekli değildir.

Çeşitli SkyFunction sınıfları, araç zinciri çözümleme işlemini uygular:

  1. RegisteredToolchainsFunction ve RegisteredExecutionPlatformsFunction, mevcut yapılandırmaya ve WORKSPACE dosyasına göre kullanılabilir araç zincirlerini ve yürütme platformlarını bulun.

  2. SingleToolchainResolutionFunction, her yürütme platformu için tek bir araç zinciri türünü çözer. Yani her yürütme platformu için aşağıdaki ölçütlere göre kullanılacak en iyi kayıtlı araç zincirini bulur:

    1. target_compatible_with özelliğini kontrol ederek araç zincirinin ve hedef platformun uyumlu olduğundan emin olun.
    2. exec_compatible_with özelliğini kontrol ederek araç zincirinin ve yürütme platformunun uyumlu olduğundan emin olun.
    3. Birden fazla araç zinciri kalırsa en yüksek öncelikli olanı (ilk kaydedilen araç zinciri) seçin.
  3. ToolchainResolutionFunction, istenen her araç zinciri türü için SingleToolchainResolutionFunction yöntemini çağırır ve ardından kullanılacak en iyi yürütme platformunu belirler.

    1. Öncelikle, istenen her araç zinciri türü için geçerli bir araç zincirine sahip olmayan yürütme platformlarını kaldırın.
    2. Birden fazla yürütme platformu kalırsa en yüksek öncelikli olanı (ilk kaydedilen platform) seçin.
      1. Yürütme platformu zaten araç zinciri geçişi tarafından ayarlanmışsa aşağıda açıklandığı gibi ilk olarak seçilir.

Araç Zincirleri ve Yapılandırmalar'da açıklandığı gibi, bir hedeften araç zincirine olan bağımlılıkta, yürütme platformunu her ikisi için de aynı olmaya zorlayan özel bir yapılandırma kullanılır. "Araç zinciri geçişi" adından sonra bu, bir yapılandırma geçişi olarak değil, ToolchainDependencyConfiguredTargetKey adlı özel bir ConfiguredTargetKey alt sınıfı olarak uygulanır. ConfiguredTargetKey öğesindeki diğer verilere ek olarak, bu alt sınıf yürütme platformunun etiketini de içerir. ToolchainResolutionFunction hangi yürütme platformunun kullanılacağını belirlerken ToolchainDependencyConfiguredTargetKey kapsamındaki zorunlu yürütme platformu geçerliyse en yüksek öncelikli olmasa bile kullanılır.

Not: Zorunlu yürütme platformu geçerli değilse (geçerli araç zincirleri olmadığı ya da kural veya hedefteki yürütme kısıtlamaları nedeniyle) geçerli değilse bunun yerine en yüksek öncelikli geçerli yürütme platformu kullanılır.