Platformlar ve Araç Zinciri Kuralları

Sorun bildirin Kaynağı göster

Bu kural grubu, geliştirdiğiniz belirli donanım platformlarını modellemenize ve bu platformlar için kod derlemek amacıyla ihtiyaç duyabileceğiniz belirli araçları belirtmenize olanak tanır. Kullanıcı, burada açıklanan kavramlar hakkında bilgi sahibi olmalıdır.

Kurallar

kısıtlama_ayarı

Kural kaynağını göster
constraint_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ünü kullanıma sunmak için kullanılır. Örneğin, "glibc_version" adlı bir constraint_setting tanımlayabilir ve platformların glibc kitaplığının farklı sürümlerine sahip olmasını sağlayabilirsiniz. Daha fazla bilgi için Platformlar sayfasına bakın.

Her constraint_setting genişletilebilir constraint_value kümesi içerir. Genellikle aynı pakette tanımlanırlar ancak bazen farklı bir paket mevcut ayar için yeni değerler sunar. Örneğin, önceden tanımlanmış @platforms//cpu:cpu ayarı, belirsiz bir cpu mimarisini hedefleyen bir platform tanımlamak için özel bir değerle uzatılabilir.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

default_constraint_value

Name; optional; nonconfigurable

Bu değer için varsayılan değer; değer verilmezse kullanılacak etiket. Bu özellik mevcutsa işaret ettiği constraint_value, bu constraint_setting ile aynı pakette tanımlanmalıdır.

Bir kısıtlama ayarının varsayılan değeri varsa bu platformun o ayar için herhangi bir kısıtlama değeri içermemesi, platformun varsayılan değeri belirttiği durumlarla aynıdır. Aksi takdirde, varsayılan değer yoksa kısıtlama ayarının söz konusu platform tarafından belirtilmemiş olarak kabul edilir. Bu durumda platform, söz konusu ayar için belirli bir değer gerektiren herhangi bir kısıtlama listesiyle (ör. config_setting için) eşleşmez.

kısıtlama_değeri

Kural kaynağını görüntüle
constraint_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, önceden tanımlanmış constraint_value cpu mimarisi için yeni bir olası değer oluşturulmuştur.

constraint_value(
    name = "mips",
    constraint_setting = "@platforms//cpu:cpu",
)
Platformlar bunun ardından, x86_64, arm vb. için alternatif olarak mips mimarisine sahip olduklarını belirtebilir.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

constraint_setting

Label; required; nonconfigurable

Bu constraint_value öğesinin olası bir seçim olduğu constraint_setting.

platform

Kural kaynağını göster
platform(name, constraint_values, deprecation, distribs, exec_properties, features, licenses, parents, remote_execution_properties, tags, testonly, visibility)

Bu kural, yeni bir platformu (yapılandırmanın bir kısmının çalıştırılabileceği bir ortamın açıklamasını sağlayan kısıtlama seçeneklerinden (cpu mimarisi veya derleyici sürümü gibi) oluşan bir koleksiyon tanımlar. Daha fazla bilgi için Platformlar sayfasına bakın.

Örnek

Bu, ARM'de Linux çalıştıran tüm ortamları açıklayan 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 bir liste içerse de şu anda en fazla bir değer desteklenir ve birden fazla üst öğe belirtmek bir hatadır.

Bir platformdaki kısıtlama ayarının değerini kontrol ederken, önce doğrudan (constraint_values özelliği aracılığıyla) belirlenen değerler, ardından üst öğedeki kısıtlama değerleri kontrol edilir. Bu, ana platformlar zincirinin yinelemeli şekilde devam etmesini sağlar. Bu şekilde, doğrudan platformda ayarlanan değerler, üst platformda ayarlanan değerleri geçersiz kılar.

Platformlar, exec_properties özelliğini üst platformdan devralır. Ana ve alt platformların exec_properties tanesindeki sözlük girişleri birleştirilecek. Aynı anahtar hem üst hem de alt exec_properties içinde görünüyorsa alt öğe değeri kullanılır. Alt platform, değer olarak boş bir dize belirtirse karşılık gelen özellik ayarlanır.

Platformlar, remote_execution_properties özelliğini (kullanımdan kaldırılan) üst platformdan da devralabilir. Not: Yeni kod, bunun yerine exec_properties kullanmalıdır. Aşağıda açıklanan mantık, eski davranışla uyumlu olmaya devam eder ancak gelecekte kaldırılacaktır. Üst platform olduğunda remote_execution_platform ayarlama mantığı şu şekildedir:

  1. Alt platformda remote_execution_property ayarlanmazsa üst öğedeki remote_execution_properties kullanılır.
  2. remote_execution_property alt platformda ayarlanmışsa ve {PARENT_REMOTE_EXECUTION_PROPERTIES} gerçek dizesini içeriyorsa bu makro, üst öğenin remote_execution_property özelliğinin içeriğiyle değiştirilecektir.
  3. remote_execution_property, alt platformda ayarlanmışsa ve makroyu içermiyorsa alt cihazın remote_execution_property değişkeni değişmeden kullanılır.

remote_execution_properties kullanımdan kaldı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. 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ındı) ve @platforms//cpu:x86_64 (doğrudan platformda ayarlanır) kısıtlama değerlerine sahip.
  • 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_propertys" öğesini devralır ve kendi üstünü ayarlamaz.
  • child_b, üst öğenin exec_properties değerini devralır ve k1 değerini geçersiz kılar. exec_properties değeri: { "k1": "child", "k2": "v2" }.
  • child_c, üst öğenin exec_properties değerini devralır ve k1 değerini ayarlar. exec_properties değeri: { "k2": "v2" }.
  • child_d, üst öğenin exec_properties değerini 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

Name; required

Bu hedef için benzersiz bir ad.

constraint_values

List of labels; optional; nonconfigurable

Bu platformun oluşturduğu kısıtlama seçeneklerinin kombinasyonu. Bir platformun belirli bir ortama uygulayabilmesi için bu listede en azından bu listedeki değerler olmalıdır.

Bu listedeki her constraint_value farklı bir constraint_setting için olmalıdır. Örneğin, cpu mimarisinin hem @platforms//cpu:x86_64 hem de @platforms//cpu:arm olmasını gerektiren bir platform tanımlayamazsınız.

exec_properties

Dictionary: String -> String; optional

İşlemlerin uzaktan yürütülme şeklini etkileyen dizelerin haritası. Bazel bunu yorumlamaya çalışmaz, uzaktan yürütme protokolünün Platform alanı üzerinden yönlendirilen opak veriler olarak işlenir. Buna üst platformun exec_properties özelliklerindeki veriler de dahildir. Alt ve üst platform aynı anahtarları tanımlarsa alt öğelerin 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 ifadesinin yerine geçer.
parents

List of labels; optional; nonconfigurable

Bu platformun devralması gereken bir platform hedefinin etiketi. Özellik bir liste seçse de birden fazla platform bulunmamalıdır. Doğrudan bu platformda ayarlanmayan kısıtlama_ayarları üst platformda yer alır. Ayrıntılar için Platform Devralma bölümündeki bölüme bakın.
remote_execution_properties

String; optional

KULLANIMDAN KALDIRILDI. Bunun yerine lütfen exec_property özelliğini kullanın. Uzaktan yürütme platformunu yapılandırmak için kullanılan bir dize. Gerçek derlemeler bunu yorumlamaya çalışmaz, belirli bir SpawnRunner tarafından kullanılabilecek opak veriler olarak işlenir. Buna, "{PARENT_REMOTE_EXECUTION_PROPERTIES}" makrosu kullanılarak üst platformun "remote_execution_property" özelliğinin verileri dahil edilebilir. Ayrıntılar için Platform Devralma bölümündeki bölüme bakın.

araç zinciri

Kural kaynağını göster
toolchain(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ı tanımlayarak araç zinciri çözümü sırasında seçilebilmesini sağlar. Daha fazla bilgi için Araç Zincirleri sayfasına bakın.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

exec_compatible_with

List of labels; optional; nonconfigurable

Bu araç zincirinin söz konusu platformdaki bir hedef yapı için seçilmesi amacıyla bir yürütme platformu tarafından karşılanması gereken constraint_value öğelerinin listesi.
target_compatible_with

List of labels; optional; nonconfigurable

Bu araç zincirinin söz konusu platforma yönelik bir hedef yapı olarak seçilmesi için hedef platform tarafından karşılanması gereken constraint_value listesi.
target_settings

List of labels; optional

Araç zinciri çözümü sırasında bu araç zincirinin seçilebilmesi için hedef yapılandırmanın karşılaması gereken config_setting öğelerinin listesi.
toolchain

Name; required

Bu araç zinciri seçildiğinde, sunulan gerçek aracı veya araç paketini temsil eden hedef.
toolchain_type

Label; required; nonconfigurable

Bu araç zincirinin sunduğu rolü temsil eden bir toolchain_type hedefinin etiketi.

araç zinciri_türü

Kural kaynağını göster
toolchain_type(name, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)

Bu kural, farklı platformlar için aynı rolü sunan bir araç grubunu temsil eden basit bir hedef olan yeni bir araç zinciri türünü tanımlar.

Daha fazla bilgi için Araç Zincirleri sayfasına bakın.

Örnek

Bu, özel bir kural için bir araç zinciri türünü tanımlar.

toolchain_type(
    name = "bar_toolchain_type",
)

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

Name; required

Bu hedef için benzersiz bir ad.