Not: Bu bölüm Bazel geliştiricileri için hazırlanmıştır ve kural yazarları için gerekli değildir.
Çeşitli SkyFunction sınıfları, toolchain resolution sürecini uygular:
RegisteredToolchainsFunction
veRegisteredExecutionPlatformsFunction
mevcut yapılandırmaya ve WORKSPACE dosyasına göre kullanılabilir araç zincirlerini ve yürütme platformlarını bulur.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:target_compatible_with
özelliğini kontrol ederek araç zincirinin ve hedef platformun uyumlu olduğundan emin olun.exec_compatible_with
özelliğini kontrol ederek araç zincirinin ve yürütme platformunun uyumlu olduğundan emin olun.- Birden fazla araç zinciri kalırsa en yüksek öncelikli olanı (ilk kaydedilen) seçin.
ToolchainResolutionFunction
çağrıları yaparSingleToolchainResolutionFunction
ve ardından kullanılacak en iyi yürütme platformunu belirler.- Öncelikle, istenen her araç zinciri türü için geçerli bir araç zinciri olmayan tüm yürütme platformlarını kaldırın.
- Birden fazla yürütme platformu kalırsa en yüksek öncelikli olanı (ilk kaydedilen) seçin.
- Yürütme platformu, araç zinciri geçişiyle zaten ayarlanmışsa aşağıda açıklandığı gibi önce bu platform seçilir.
Toolchains and Configurations (Araç Zincirleri ve Yapılandırmalar) bölümünde açıklandığı gibi,
bir hedeften araç zincirine olan bağımlılık, yürütme platformunun her ikisi için de aynı olmasını zorlayan özel bir yapılandırma kullanır. "Toolchain geçişi" olarak adlandırılmasına rağmen, bu bir yapılandırma geçişi olarak değil, ConfiguredTargetKey
'nin ToolchainDependencyConfiguredTargetKey
adlı özel bir alt sınıfı olarak uygulanır.
Bu alt sınıf, ConfiguredTargetKey
içindeki diğer verilere ek olarak yürütme platformunun etiketini de içerir. ToolchainResolutionFunction
hangi yürütme platformunun kullanılacağını değerlendirirken ToolchainDependencyConfiguredTargetKey
'den gelen 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ç zinciri olmadığı veya kural ya da hedeften kaynaklanan yürütme kısıtlamaları olduğu için) bunun yerine en yüksek öncelikli geçerli yürütme platformu kullanılır.