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ılar, burada açıklanan kavramlara aşina olmalıdır.
Kurallar
constraint_setting
Kural kaynağını görüntülemeconstraint_setting(name, default_constraint_value, deprecation, distribs, features, licenses, tags, testonly, visibility)
Bu kural, bir platformun değer belirtebileceği yeni bir kısıtlama türü 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, 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; 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 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ülemeconstraint_value(name, constraint_setting, deprecation, distribs, features, licenses, tags, testonly, visibility)
Ö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", )
x86_64
, arm
vb.'ye 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; gerekli Buconstraint_value 'un olası bir seçim olduğu constraint_setting .
|
platform
Kural kaynağını görüntülemeplatform(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 bir liste almasına rağmen şu anda tek bir değerden fazlası desteklenmiyor ve birden fazla üst öğe belirtmek hatadır.
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. 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.
Hem üst öğenin hem de alt öğenin exec_properties
öğesinde aynı anahtar 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 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} 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
öğ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.exec_properties
değeri:{ "k1": "child", "k2": "v2" }
. -
child_c
, üst öğeninexec_properties
değerini devralır vek1
ayarını kaldırır.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
|
Etiketler listesi; yapılandırılamaz; varsayılan değer 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ımlarsa alt platformun 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ılan remote_execution_properties özelliğinin tam bir yerine
|
parents
|
Etiketler listesi; yapılandırılamaz; varsayılan değer platform hedefinin etiketi. Özellik bir liste alsa da en fazla bir platform olmalıdır. Doğrudan bu platformda ayarlanmayan tüm constraint_settings, ana platformda bulunur.
Ayrıntılar için Platform Devralma bölümüne bakın.
|
remote_execution_properties
|
Dize; yapılandırılabilir değil; varsayılan değer |
araç zinciri
Kural kaynağını görüntülemetoolchain(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ı açıklar. 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
|
Etiketler listesi; yapılandırılamaz; varsayılan değer constraint_value 'lerin listesi.
|
target_compatible_with
|
Etiketler listesi; yapılandırılamaz; varsayılan değer constraint_value 'lerin listesi.
|
target_settings
|
Etiket listesi; varsayılan config_setting 'lerin 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 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. |