Platformlar ve Araç Zinciri Kuralları

Sorun bildirin.3 2.02}332}12/}22}18}

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öster
constraint_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 None

Bu ayar için varsayılan değerin etiketi ve herhangi bir değer verilmezse kullanılır. Bu özellik mevcutsa işaret ettiği 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 (config_setting gibi) eşleşmez.

constraint_value

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, 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

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 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:

  1. remote_execution_property alt platformda ayarlanmazsa üst platformun remote_execution_properties değeri kullanılır.
  2. remote_execution_property alt platformda ayarlanmışsa ve {PARENT_REMOTE_EXECUTION_PROPERTIES} sabit dizesini içeriyorsa bu makro, üst öğenin remote_execution_property özelliğinin içeriğiyle değiştirilir.
  3. remote_execution_property, alt platformda ayarlanmışsa ve makroyu içermiyorsa alt öğenin remote_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 öğenin exec_properties değerini devralır ve k1 değerini geçersiz kılar. Etkinliğin exec_properties ayarı şu şekilde olacak: { "k1": "child", "k2": "v2" }.
  • child_c, üst öğenin exec_properties değerini devralır ve k1 ayarını kaldırır. Etkinliğin exec_properties ayarı şu şekilde olacak: { "k2": "v2" }.
  • child_d, üst öğenin exec_properties özelliğini devralır ve yeni bir özellik ekler. Etkinliğin exec_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 platformun oluşturduğu kısıtlama seçeneklerinin kombinasyonu. Bir platformun belirli bir ortama uygulanabilmesi için ortamın en azından bu listedeki değerlere sahip olması gerekir.

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

Sözlük: Dize -> Dize; yapılandırılmamış; varsayılan değer {}

İşlemlerin uzaktan yürütülme şeklini etkileyen dize haritası. Bazel bunu yorumlamak için herhangi bir girişimde bulunmaz. Bunlar, uzaktan yürütme protokolünün Platform alanı aracılığıyla iletilen opak veriler olarak işlenir. Buna üst platformun 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 []

Bu platformun devralması gereken 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 ""

KULLANIMDAN KALDIRILDI. Lütfen bunun yerine exec_properties ö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. Bu, "{PARENT_REMOTE_EXECUTION_PROPERTIES}" makrosu kullanılarak üst platformun "remote_execution_properties" özelliğindeki verileri içerebilir. Ayrıntılar için Platform Devralma bölümüne 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, 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 []

Bu araç zincirinin belirli bir platformdaki hedef binaya seçilebilmesi için yürütme platformu tarafından karşılanması gereken constraint_value öğelerinin listesi.
target_compatible_with

Etiket listesi; yapılandırılabilir değil; varsayılan []

Bu araç zincirinin söz konusu platformdaki bir hedef bina için seçilebilmesi için hedef platformun karşılaması gereken constraint_value'lerin listesi.
target_settings

Etiket listesi; varsayılan []

Araç zinciri çözümlemesi sırasında bu araç zincirinin seçilmesi için hedef yapılandırmanın karşılaması gereken 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 eden toolchain_type hedefinin etiketi.

toolchain_type

Kural kaynağını göster
toolchain_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.