Bu kurallar, geliştirme yaptığınız belirli donanım platformlarını modellemenize ve bu platformlar için kod derlemek üzere ihtiyaç duyabileceğiniz belirli araçları belirtmenize olanak tanır. Kullanıcı, burada açıklanan kavramları bilmelidir.
Kurallar
constraint_setting
Kural kaynağını gösterconstraint_setting(name, default_constraint_value, deprecation, distribs, features, licenses, tags, testonly, visibility)
Bu kural, platformun değer belirtebileceği yeni bir kısıtlama türünü tanıtmak için kullanılır.
Örneğin, platformların glibc kitaplığının farklı sürümlerine sahip olma özelliğini temsil etmek için "glibc_version" adlı bir constraint_setting
tanımlayabilirsiniz.
Daha fazla bilgi için Platformlar sayfasına bakın.
Her constraint_setting
, genişletilebilir bir ilişkili constraint_value
grubuna sahiptir. Bunlar genellikle aynı pakette tanımlanır ancak bazen farklı bir paket, mevcut bir ayar için yeni değerler sunar. Örneğin, önceden tanımlanmış @platforms//cpu:cpu
ayarı, bilinmeyen bir CPU mimarisini hedefleyen bir platform tanımlamak için özel bir değerle genişletilebilir.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
default_constraint_value
|
Ad; yapılandırılmamış; varsayılan constraint_value , bu constraint_setting ile aynı pakette tanımlanmış olmalıdır.
Bir kısıtlama ayarının varsayılan değeri varsa platform bu ayar için herhangi bir kısıtlama değeri eklemediğinde, platformun varsayılan değeri belirtmiş olmasıyla aynıdır. Aksi takdirde, varsayılan değer yoksa kısıtlama ayarının ilgili platform tarafından belirtilmediği kabul edilir. Bu durumda platform, söz konusu ayar için belirli bir değer gerektiren herhangi bir kısıtlama listesinde (ör. |
constraint_value
Kural kaynağını görüntülemeconstraint_value(name, constraint_setting, deprecation, distribs, features, licenses, tags, testonly, visibility)Bu kural, belirli bir kısıtlama türü için yeni bir değer sunar. Daha fazla bilgi için Platformlar sayfasına bakın.
Örnek
Aşağıdaki kod, CPU mimarisini temsil eden önceden tanımlanmış constraint_value
için yeni bir olası değer oluşturur.
constraint_value( name = "mips", constraint_setting = "@platforms//cpu:cpu", )Platformlar,
x86_64
, arm
vb. alternatif olarak mips
mimarisine sahip olduklarını beyan edebilir.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
constraint_setting
|
Etiket; yapılandırılamaz; zorunlu Buconstraint_value öğesinin olası bir seçim olduğu constraint_setting .
|
platform
Kural kaynağını görüntüleplatform(name, constraint_values, deprecation, distribs, exec_properties, features, licenses, parents, remote_execution_properties, tags, testonly, visibility)
Bu kural, derlemenin bir kısmının çalışabileceği ortamı tanımlayan, adlandırılmış bir kısıtlama seçenekleri koleksiyonu (ör. CPU mimarisi veya derleyici sürümü) olan yeni bir platform tanımlar. Daha fazla bilgi için Platformlar sayfasına bakın.
Örnek
Bu, ARM üzerinde Linux çalıştıran tüm ortamları tanımlayan bir platform tanımlar.
platform( name = "linux_arm", constraint_values = [ "@platforms//os:linux", "@platforms//cpu:arm", ], )
Platform Devralma
Platformlar, kısıtlama değerlerini devralacakları başka bir platformu belirtmek için parents
özelliğini kullanabilir. parents
özelliği liste alsa da şu anda en fazla tek bir değer desteklenmektedir. Birden fazla üst öğe belirtmek hatalı bir işlemdir.
Bir platformdaki kısıtlama ayarının değeri kontrol edilirken önce doğrudan ayarlanan değerler (constraint_values
özelliği aracılığıyla) kontrol edilir, ardından üst öğedeki kısıtlama değerleri kontrol edilir. Bu işlem, üst platform zincirinde yinelemeli olarak devam eder. Bu şekilde, doğrudan bir platformda ayarlanan tüm değerler, üst öğede ayarlanan değerleri geçersiz kılar.
Platformlar, exec_properties
özelliğini üst platformdan devralır.
Ana ve alt platformların exec_properties
dizin girişleri birleştirilir.
Aynı anahtar hem üst öğenin hem de alt yayıncının exec_properties
öğesinde görünüyorsa alt öğenin değeri kullanılır. Alt platform değer olarak boş bir dize belirtirse karşılık gelen özellik ayarlanmaz.
Platformlar, (desteği sonlandırılmış) remote_execution_properties
özelliğini de üst platformdan devralabilir. Not: yeni kodda bunun yerine exec_properties
kullanılmalıdır. Aşağıda açıklanan mantık, eski davranışla uyumlu olacak şekilde korunur ancak gelecekte kaldırılacaktır.
Üst platform olduğunda remote_execution_platform
ayarlama mantığı aşağıdaki gibidir:
-
Alt platformda
remote_execution_property
ayarlanmazsa üst öğeninremote_execution_properties
değeri kullanılır. -
remote_execution_property
alt platformda ayarlanmışsa ve {PARENT_REMOTE_EXECUTION_PROPERTIES} literal dizesini içeriyorsa bu makro, üst öğeninremote_execution_property
özelliğinin içeriğiyle değiştirilir. -
Alt platformda
remote_execution_property
ayarlanmışsa ve makro içermiyorsa alt platformunremote_execution_property
değeri değiştirilmeden kullanılır.
remote_execution_properties
desteği sonlandırıldığı ve kullanımdan kaldırılacağı için aynı devralma zincirinde remote_execution_properties
ve exec_properties
'nin birlikte kullanılmasına izin verilmez.
Desteği sonlandırılan remote_execution_properties
yerine exec_properties
kullanmayı tercih edin.
Örnek: Kısıt Değerleri
platform( name = "parent", constraint_values = [ "@platforms//os:linux", "@platforms//cpu:arm", ], ) platform( name = "child_a", parents = [":parent"], constraint_values = [ "@platforms//cpu:x86_64", ], ) platform( name = "child_b", parents = [":parent"], )
Bu örnekte, alt platformlar aşağıdaki özelliklere sahiptir:
-
child_a
,@platforms//os:linux
(üst öğeden devralınır) ve@platforms//cpu:x86_64
(doğrudan platformda ayarlanır) kısıtlama değerlerine sahiptir. -
child_b
, tüm kısıtlama değerlerini üst öğeden devralır ve kendi başına hiçbir değer belirlemez.
Örnek: Yürütme özellikleri
platform( name = "parent", exec_properties = { "k1": "v1", "k2": "v2", }, ) platform( name = "child_a", parents = [":parent"], ) platform( name = "child_b", parents = [":parent"], exec_properties = { "k1": "child" } ) platform( name = "child_c", parents = [":parent"], exec_properties = { "k1": "" } ) platform( name = "child_d", parents = [":parent"], exec_properties = { "k3": "v3" } )
Bu örnekte, alt platformlar aşağıdaki özelliklere sahiptir:
-
child_a
, üst öğenin "exec_properties" değerini devralır ve kendi değerini ayarlamaz. -
child_b
, üst öğeninexec_properties
değerini devralır vek1
değerini geçersiz kılar.exec_properties
değeri:{ "k1": "child", "k2": "v2" }
. -
child_c
, üst öğeninexec_properties
değerini devralır vek1
değerini sıfırlar.exec_properties
değeri:{ "k2": "v2" }
. -
child_d
, üst öğeninexec_properties
özelliğini devralır ve yeni bir özellik ekler.exec_properties
değeri:{ "k1": "v1", "k2": "v2", "k3": "v3" }
.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
constraint_values
|
Etiket listesi; yapılandırılabilir değil; varsayılan Bu listedeki her |
exec_properties
|
Sözlük: Dize -> Dize; yapılandırılamaz; varsayılan değer exec_properties özelliklerindeki tüm veriler buna dahildir.
Alt ve üst platform aynı anahtarları tanımlıyorsa alt öğenin değerleri korunur. Boş dize olan bir değerle ilişkili tüm anahtarlar sözlükten kaldırılır.
Bu özellik, kullanımdan kaldırılan remote_execution_properties öğesinin yerini tamamen alır.
|
parents
|
Etiketler listesi; yapılandırılamaz; varsayılan değer platform hedefinin etiketi. Özellik bir liste alsa da birden fazla platform bulunmamalıdır. Doğrudan bu platformda ayarlanmamış olan tüm kısıtlama_settings üst platformda bulunur.
Ayrıntılar için Platform Devralımı bölümüne bakın.
|
remote_execution_properties
|
Dize; yapılandırılamaz; varsayılan değer |
araç zinciri
Kural kaynağını görüntületoolchain(name, deprecation, distribs, exec_compatible_with, features, licenses, tags, target_compatible_with, target_settings, testonly, toolchain, toolchain_type, visibility)
Bu kural, belirli bir araç zincirinin türünü ve kısıtlamalarını belirtir. Böylece araç zinciri çözümü sırasında seçilebilir. Daha fazla bilgi için Araçlar zincirleri sayfasına bakın.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
exec_compatible_with
|
Etiketler listesi; yapılandırılamaz; varsayılan değer constraint_value 'lerin listesi.
|
target_compatible_with
|
Etiket listesi; yapılandırılabilir değil; varsayılan constraint_value 'lerin listesi.
|
target_settings
|
Etiket listesi; varsayılan config_setting öğelerinin listesi.
|
toolchain
|
Ad; zorunlu Bu araç zinciri seçildiğinde kullanıma sunulan gerçek aracı veya araç paketini temsil eden hedef. |
toolchain_type
|
Etiket; yapılandırılamaz; zorunlu Bu araç zincirinin oynadığı rolü temsil eden birtoolchain_type hedefinin etiketi.
|
toolchain_type
Kural kaynağını görüntületoolchain_type(name, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
Bu kural, farklı platformlarda aynı rolü üstlenen bir araç sınıfını temsil eden basit bir hedef olan yeni bir araç zinciri türünü tanımlar.
Daha fazla ayrıntı için Araç Zincirleri sayfasına bakın.
Örnek
Bu, özel kural için bir araç zinciri türünü tanımlar.
toolchain_type( name = "bar_toolchain_type", )
Bu, bzl dosyasında kullanılabilir.
bar_binary = rule( implementation = _bar_binary_impl, attrs = { "srcs": attr.label_list(allow_files = True), ... # No `_compiler` attribute anymore. }, toolchains = ["//bar_tools:toolchain_type"] )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |