Bu kurallar, uygulama geliştirdiğiniz belirli donanım platformlarını modellemenizi ve bu platformlar için kod derlemek gerekebilecek belirli araçları belirtmenizi sağlar. Kullanıcılar, burada açıklanan kavramlara aşina olmalıdır.
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 etmesi 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. Genellikle bunlar aynı paket içinde tanımlanır ancak bazen farklı bir paket, mevcut bir ayar için yeni değerler sağlar. Örneğin, belirsiz bir CPU mimarisini hedefleyen bir platform tanımlamak için önceden tanımlanmış @platforms//cpu:cpu
ayarı özel bir değerle genişletilebilir.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli 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ımlanmalıdır.
Bir kısıtlama ayarı varsayılan değere sahipse platform bu ayar için herhangi bir kısıtlama değeri eklemediğinde platform varsayılan değeri belirtmiş gibi olur. Aksi takdirde, varsayılan değer yoksa kısıtlama ayarının söz konusu platform tarafından belirtilmemiş olduğu kabul edilir. Bu durumda platform, söz konusu ayar için belirli bir değer gerektiren hiçbir kısıtlama listesiyle ( |
constraint_value
Kural kaynağını görüntüleconstraint_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ğıda, CPU mimarisini temsil eden önceden tanımlanmış constraint_value
için yeni bir olası değer oluşturulur.
constraint_value( name = "mips", constraint_setting = "@platforms//cpu:cpu", )Daha sonra platformlar
x86_64
, arm
vb. yerine mips
mimarisine sahip olduklarını beyan edebilir.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli Bu hedef için benzersiz bir ad. |
constraint_setting
|
Etiket; yapılandırılamaz; gerekli Buconstraint_value öğesinin olası bir seçim olduğu constraint_setting .
|
platform
Kural kaynağını gösterplatform(name, constraint_values, deprecation, distribs, exec_properties, features, licenses, parents, remote_execution_properties, tags, testonly, visibility)
Bu kural yeni bir platformu tanımlar. Derlemenin bir kısmının çalışabileceği ortamı tanımlayan kısıtlama seçenekleri (cpu mimarisi veya derleyici sürümü gibi) adlandırılmış bir koleksiyondur. Daha fazla bilgi için Platformlar sayfasına bakın.
Örnek
Bu, ARM'de Linux çalıştıran tüm ortamları tanımlayan bir platformu 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) ve ardından üst öğedeki kısıtlama değerleri kontrol edilir. Bu, üst platformlar zincirinde yinelenen şekilde devam eder. Böylece, 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.
Üst ve alt platformların exec_properties
oranındaki sözlük 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 ayrıca üst platformdan (desteği sonlandırılmış) remote_execution_properties
özelliğini de devralabilir. Not: Yeni kodda bunun yerine exec_properties
kullanılmalıdır. Aşağıda açıklanan mantık, eski davranışla uyumlu olmaya devam eder ancak ileride kaldırılacaktır.
Bir üst platform olduğunda remote_execution_platform
için ayarlama mantığı aşağıdaki gibidir:
-
remote_execution_property
alt platformda ayarlanmazsa üst platformunremote_execution_properties
değeri kullanılır. -
remote_execution_property
alt platformda ayarlanmışsa ve {PARENT_REMOTE_EXECUTION_PROPERTIES} sabit dizesini içeriyorsa bu makro, üst öğeninremote_execution_property
özelliğinin içeriğiyle değiştirilir. -
remote_execution_property
, alt platformda ayarlanmışsa ve makroyu içermiyorsa alt öğeninremote_execution_property
değeri değiştirilmeden kullanılır.
remote_execution_properties
öğesinin desteği sonlandırıldığı ve aşamalı olarak kullanımdan kaldırılacağı için remote_execution_properties
ile exec_properties
öğelerinin aynı devralma zincirinde birlikte kullanılmasına izin verilmez.
Desteği sonlandırılan remote_execution_properties
yerine exec_properties
kullanmayı tercih edin.
Örnek: Kısıtlama 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 değerini ayarlamaz.
Ö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 kimliğini ayarlamaz. -
child_b
, üst öğeninexec_properties
değerini devralır vek1
değerini geçersiz kılar. Etkinliğinexec_properties
ayarı şu şekilde olacak:{ "k1": "child", "k2": "v2" }
. -
child_c
, üst öğeninexec_properties
değerini devralır vek1
ayarını kaldırır. Etkinliğinexec_properties
ayarı şu şekilde olacak:{ "k2": "v2" }
. -
child_d
, üst öğeninexec_properties
özelliğini devralır ve yeni bir özellik ekler. Etkinliğinexec_properties
ayarı şu şekilde olacak:{ "k1": "v1", "k2": "v2", "k3": "v3" }
.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli 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ılmamış; varsayılan değer exec_properties özelliklerindeki tüm veriler de 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, desteği sonlandırılmış remote_execution_properties öğesinin tamamen yerini almaktadır.
|
parents
|
Etiket listesi; yapılandırılabilir değil; varsayılan platform hedefinin etiketi. Özellik bir liste alsa da en fazla bir platform olmalıdır. Doğrudan bu platformda ayarlanmamış olan tüm kısıtlama_settings üst platformda bulunur.
Ayrıntılar için Platform Devralma bölümüne bakın.
|
remote_execution_properties
|
Dize; yapılandırılmamış; varsayılan değer |
araç zinciri
Kural kaynağını göstertoolchain(name, deprecation, distribs, exec_compatible_with, features, licenses, tags, target_compatible_with, target_settings, testonly, toolchain, toolchain_type, visibility)
Bu kural, araç zinciri çözünürlüğü sırasında seçilebilmesi için belirli bir araç zincirinin türünü ve kısıtlamalarını tanımlar. Daha fazla ayrıntı için Araç Zincirleri sayfasına bakın.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli Bu hedef için benzersiz bir ad. |
exec_compatible_with
|
Etiket listesi; yapılandırılabilir değil; varsayılan constraint_value öğelerinin 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; gerekli Bu araç zinciri seçildiğinde kullanılabilen gerçek araç veya araç paketini temsil eden hedef. |
toolchain_type
|
Etiket; yapılandırılamaz; gerekli Bu araç zincirinin hizmet verdiği rolü temsil edentoolchain_type hedefinin etiketi.
|
toolchain_type
Kural kaynağını göstertoolchain_type(name, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
Bu kural yeni bir araç zinciri türünü tanımlar. Basit bir hedef, farklı platformlar için aynı rolü üstlenen araç sınıfını temsil eder.
Daha fazla ayrıntı için Araç Zincirleri sayfasına bakın.
Örnek
Bu, özel bir kural için 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; gerekli Bu hedef için benzersiz bir ad. |