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ö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, ö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ılamaz; varsayılan değer 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)
Ö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", )
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 '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, flags, licenses, parents, remote_execution_properties, required_settings, 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 işaretleri
Platformlar, hedef platform olarak kullanıldığında (yani --platforms
işaretinin değeri olarak) yapılandırmaya eklenecek işaretlerin listesini belirtmek için flags
özelliğini kullanabilir.
Platformdan ayarlanan işaretler en yüksek önceliğe sahiptir ve komut satırından, rc dosyasından veya geçişten gelen bu işaretin önceki değerlerinin üzerine yazılır.
Örnek
platform( name = "foo", flags = [ "--dynamic_mode=fully", "--//bool_flag", "--no//package:other_bool_flag", ], )
Bu, foo
adlı bir platform tanımlar. Bu hedef platform olduğunda (kullanıcı --platforms//:foo
'ü belirttiği, bir geçiş //command_line_option:platforms
işaretini ["//:foo"]
olarak ayarladığı veya //:foo
'ın yürütme platformu olarak kullanıldığı için) yapılandırmada belirtilen işaretler ayarlanır.
Platformlar ve Tekrar Edilebilir İşaretler
Bazı işaretler, tekrarlandığında değerleri toplar (ör. --features
,
--copt
, config.string(repeatable = True)
olarak oluşturulan tüm Starlark işaretleri).
Bu işaretler, platformdan işaret ayarlamayla uyumlu değildir. Bunun yerine, önceki tüm değerler kaldırılır ve platformdaki değerlerle yazılır.
Örneğin, aşağıdaki platformda build --platforms=//:repeat_demo
--features feature_a --features feature_b
çağrısı sonucunda --feature
işaretinin değeri ["feature_c", "feature_d"]
olur ve komut satırında ayarlanan özellikler kaldırılır.
platform( name = "repeat_demo", flags = [ "--features=feature_c", "--features=feature_d", ], )
Bu nedenle, flags
özelliğinde tekrarlanabilir işaretler kullanılması önerilmez.
Platform Devralımı
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) 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.
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 ilgili mülkün değeri sıfırlanır.
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 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
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
|
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
|
flags
|
Dize listesi; yapılandırılamaz; varsayılan değer |
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 ayarlanmayan tüm constraint_settings, ana 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 |
required_settings
|
Etiketler listesi; varsayılan değer config_setting 'lerin listesi.
Gerekli ayarlar, üst platformlardan devralınmaz.
|
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, 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
|
Etiketler listesi; yapılandırılamaz; varsayılan değer constraint_value 'lerin listesi.
|
target_settings
|
Etiketler listesi; varsayılan değer config_setting 'lerin 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ülemetoolchain_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 bilgi için Araçlar 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. |