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 sürecini uygular:
RegisteredToolchainsFunction
veRegisteredExecutionPlatformsFunction
mevcut yapılandırmaya ve WORKSPACE dosyasına göre kullanılabilen araç zincirlerini ve yürütme platformlarını bulun.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 kaldıysa en yüksek öncelikli olanı (ilk kaydedilen) seçin.
ToolchainResolutionFunction
, istenen her araç zinciri türü içinSingleToolchainResolutionFunction
'ı çağırır ve ardından kullanılacak en iyi yürütme platformunu belirler.- Öncelikle, istenen her toolchain türü için geçerli bir toolchain'e sahip olmayan tüm yürütme platformlarını kaldırın.
- Birden fazla yürütme platformu kaldıysa en yüksek öncelikli olanı (ilk kaydedilen) seçin.
- Yürütme platformu, araç zinciri geçişi tarafından zaten ayarlanmışsa aşağıda açıklandığı gibi öncelikli olarak seçilir.
Araçlar zincirleri ve yapılandırmalar bölümünde belirtildiği gibi, bir hedeften araç zincirine olan bağımlılık, yürütme platformunun her ikisi için de aynı olmasını zorunlu kılan özel bir yapılandırma kullanır. "Araç zinciri geçişi" olarak adlandırılmasına rağmen bu, yapılandırma geçişi olarak değil, ConfiguredTargetKey
sınıfının ToolchainDependencyConfiguredTargetKey
adlı özel alt sınıfı olarak uygulanır.
Bu alt sınıf, ConfiguredTargetKey
'teki 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
'ten gelen zorunlu yürütme platformu geçerliyse en yüksek önceliğe sahip olmasa bile kullanılır.
Not: Zorunlu yürütme platformu geçerli değilse (geçerli araç zincirleri olmadığı veya kural ya da hedeften kaynaklanan yürütme kısıtlamaları olduğu için) bunun yerine en yüksek önceliğe sahip geçerli yürütme platformu kullanılır.