Bu kural grubu, oluşturduğunuz belirli donanım platformlarını modellemenize ve bu platformlar için kodu derlemek üzere ihtiyaç duyabileceğiniz belirli araçları belirtmenize olanak tanımak için vardır. Kullanıcı, burada açıklanan kavramlar hakkında bilgi sahibi 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 belirleyebileceği yeni bir kısıtlama türü sunmak için kullanılır.
Örneğin, platformların glibc kitaplığının farklı sürümlerini yükleme ö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
grubu içerir. 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ı, belirsiz bir CPU mimarisini hedefleyen bir platformu 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ımlanmalıdır.
Bir kısıtlama ayarının varsayılan değeri varsa bir platform bu ayar için herhangi bir kısıtlama değeri içermediğinde, platform varsayılan değeri belirtmiş gibi olur. Aksi takdirde, varsayılan değer yoksa kısıtlama ayarının platform tarafından belirtilmemiş olduğu kabul edilir. Bu durumda platform, bu ayar için belirli bir değer gerektiren herhangi bir kısıtlama listesiyle (ö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, önceden tanımlanmış constraint_value
için yeni bir olası değer oluşturur.
Bu değer, CPU mimarisini temsil eder.
constraint_value( name = "mips", constraint_setting = "@platforms//cpu:cpu", )
x86_64
, arm
vb. yerine mips
mimarisine sahip olduklarını bildirebilir.
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 'nin olası bir seçenek 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 bölümünün çalışabileceği bir ortamı tanımlayan, kısıtlama seçeneklerinin (ör. CPU mimarisi veya derleyici sürümü) adlandırılmış bir koleksiyonu olan yeni bir platform tanımlar. Daha fazla bilgi için Platformlar sayfasına bakın.
Örnek
Bu, ARM'de Linux çalıştıran herhangi bir ortamı tanımlayan bir platformu tanımlar.
platform( name = "linux_arm", constraint_values = [ "@platforms//os:linux", "@platforms//cpu:arm", ], )
Platform Bayrakları
Platformlar, platform hedef platform olarak kullanıldığında (ör. --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ı, rc dosyası veya geçişten gelen bu işaretin önceki değerlerinin üzerine yazar.
Örnek
platform( name = "foo", flags = [ "--dynamic_mode=fully", "--//bool_flag", "--no//package:other_bool_flag", ], )
Bu, foo
adlı bir platformu tanımlar. Hedef platform bu olduğunda (kullanıcı --platforms//:foo
belirttiği, bir geçiş //command_line_option:platforms
işaretini ["//:foo"]
olarak ayarladığı veya //:foo
yürütme platformu olarak kullanıldığı için) belirtilen işaretler yapılandırmada ayarlanır.
Platformlar ve Tekrarlanabilir İşaretler
Bazı işaretler tekrarlandığında değerleri biriktirir. Örneğin, --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 üzerine yazılır.
Örneğin, aşağıdaki platformda build --platforms=//:repeat_demo
--features feature_a --features feature_b
çağrısı, komut satırında ayarlanan özellikleri kaldırarak --feature
işaretinin değerinin ["feature_c", "feature_d"]
olmasına neden olur.
platform( name = "repeat_demo", flags = [ "--features=feature_c", "--features=feature_d", ], )
Bu nedenle, flags
özelliğinde tekrarlanabilir işaretlerin kullanılması önerilmez.
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 alsa da şu anda birden fazla değer desteklenmemektedir ve birden fazla üst öğe belirtmek hataya neden olur.
Bir platformda 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 işlem, üst platformlar 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.
Üst ve alt platformların exec_properties
sözlük girişleri birleştirilir.
Aynı anahtar hem üst öğenin hem de alt öğenin exec_properties
içinde görünüyorsa alt öğenin değeri kullanılır. Alt platform değer olarak boş bir dize belirtirse ilgili özellik ayarlanmaz.
Platformlar, (kullanımdan kaldırılan) remote_execution_properties
özelliğini üst platformdan da devralabilir. Not: Yeni kodda bunun yerine exec_properties
kullanılmalıdır. Aşağıda açıklanan mantık, eski davranışlarla uyumlu olması için korunur ancak gelecekte kaldırılacaktır.
Bir üst platform olduğunda remote_execution_platform
ayarlanmasıyla ilgili mantık aşağıdaki gibidir:
-
Çocuk platformunda
remote_execution_property
ayarlanmamışsa üst öğeninremote_execution_properties
kullanılır. -
Çocuk platformunda
remote_execution_property
ayarlanmışsa ve {PARENT_REMOTE_EXECUTION_PROPERTIES} hazır 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 makroyu içermiyorsa alt öğeninremote_execution_property
değeri değiştirilmeden kullanılır.
remote_execution_properties
kullanımdan kaldırılacağı için aynı devralma zincirinde remote_execution_properties
ve exec_properties
karıştırılamaz.
Kullanımdan kaldı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ınan) ve@platforms//cpu:x86_64
(doğrudan platformda ayarlanan) kısıtlama değerlerine sahip. -
child_b
, tüm kısıtlama değerlerini üst öğeden devralır ve kendi değerlerini 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" özelliğini devralır ve kendi özelliğ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
özelliğini devralır vek1
özelliğini ayarlanmamış hale getirir.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ılamaz; varsayılan değer Bu listedeki her |
exec_properties
|
Sözlük: Dize -> Dize; nonconfigurable; varsayılan değer exec_properties özelliklerinden gelen tüm veriler buna dahildir.
Çocuk ve üst platform aynı anahtarları tanımlarsa çocuğun değerleri korunur. Boş dize değeriyle ilişkili tüm anahtarlar sözlükten kaldırılır.
Bu özellik, kullanımdan kaldırılan remote_execution_properties özelliğinin yerini tamamen almıştır.
|
flags
|
Dizelerin listesi; yapılandırılamaz; varsayılan değer |
parents
|
Etiket listesi; yapılandırılamaz; varsayılan değer platform hedefinin etiketi. Özellik bir liste alsa da birden fazla platform bulunmamalıdır. Bu platformda doğrudan ayarlanmayan tüm constraint_settings, üst platformda bulunur.
Ayrıntılar için Platform Devralma bölümüne bakın.
|
remote_execution_properties
|
Dize; yapılandırılamaz; varsayılan değer |
required_settings
|
Etiket listesi; varsayılan değer config_setting 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, araç zinciri çözümlemesi sırasında seçilebilmesi için belirli bir araç zincirinin türünü ve kısıtlamalarını bildirir. Daha fazla bilgi için Toolchains (Araç 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
|
Etiket listesi; yapılandırılamaz; varsayılan değer constraint_value listesi.
|
target_compatible_with
|
Etiket listesi; yapılandırılamaz; varsayılan değer constraint_value listesi.
|
target_settings
|
Etiket listesi; varsayılan değer config_setting listesi.
|
toolchain
|
Ad; zorunlu Bu araç zinciri seçildiğinde kullanılabilen gerçek aracı veya araç paketini temsil eden hedef. |
toolchain_type
|
Etiket; yapılandırılamaz; zorunlu Bu araç zincirinin hizmet verdiği 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, yeni bir araç zinciri türünü tanımlar: Farklı platformlarda aynı rolü üstlenen bir araç sınıfını temsil eden basit bir hedef.
Daha fazla bilgi için Toolchains (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, bir 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. |