Platform Kuralları

Kurallar

constraint_setting

constraint_setting(name, default_constraint_value, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, testonly, visibility)

Bu kural, platformun değer belirtebileceği yeni bir kısıtlama türünü kullanıma sunmak için kullanılır. Örneğin, platformlarda glibc kitaplığının farklı sürümlerinin yüklü olma özelliğini göstermek için "glibc_version" adlı bir constraint_setting tanımlayabilirsiniz. Daha fazla ayrıntı için Platformlar sayfasına bakın.

Her constraint_setting, genişletilebilir bir ilişkilendirilmiş constraint_value grubuna sahiptir. Bunlar genellikle aynı paket içinde tanımlanır ancak bazen farklı bir paket, mevcut bir ayar için yeni değerler katabilir. Örneğin, önceden tanımlanmış @platforms//cpu:cpu ayarı, anlaşılması güç bir CPU mimarisini hedefleyen bir platform tanımlamak için özel bir değerle genişletilebilir.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

default_constraint_value

Name; optional; nonconfigurable

Herhangi bir değer sağlanmazsa bu ayar için kullanılacak varsayılan değerin etiketi. 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 platformda bu ayar için herhangi bir kısıtlama değeri içermediğinde bu, platformun varsayılan değeri belirttiğiyle aynı olur. 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 kısıtlama listeleriyle (ör. config_setting) eşleşmez.

constraint_value

constraint_value(name, constraint_setting, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, testonly, visibility)
Bu kural, belirli bir kısıtlama türü için yeni bir değer sunar. Daha fazla ayrıntı için Platformlar sayfasına bakın.

Örnek

Aşağıdaki komut, 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",
)
Platformlar daha sonra x86_64, arm ve benzerlerine alternatif olarak mips mimarisine sahip olduklarını beyan edebilirler.

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

platform(name, constraint_values, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, parents, remote_execution_properties, tags, testonly, visibility)

Bu kural, yeni bir platformu tanımlar. Bu, derlemenin bir bölümünün çalışabileceği bir ortamı tanımlayan kısıtlama seçeneklerinden oluşan adlandırılmış bir koleksiyon (ör. CPU mimarisi veya derleyici sürümü) belirtir. Daha fazla ayrıntı için Platformlar sayfasına bakın.

Örnek

Bu, ARM üzerinde 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 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 tek bir değerden fazlası desteklenmemektedir ve birden fazla üst öğe belirtmek bir hatadır.

Bir platformda bir 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 tekrar tekrar devam eder. Böylece doğrudan bir platformda ayarlanan tüm değerler, üst platform üzerinde ayarlanan değerleri geçersiz kılar.

Platformlar, exec_properties özelliğini üst platformdan devralır. Üst ve alt platformların exec_properties dilindeki sözlük girişleri birleştirilecek. Hem üst 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 özellik ayarlanmaz.

Platformlar, remote_execution_properties özelliğini ü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 olacak şekilde korunmaktadır ancak gelecekte kaldırılacaktır. Bir üst platform olduğunda remote_execution_platform özelliğinin ayarlanmasının mantığı aşağıdaki gibidir:

  1. Alt platformda remote_execution_property ayarlanmazsa üst platformun remote_execution_properties kullanılır.
  2. remote_execution_property alt platformda ayarlanmışsa ve {PARENT_REMOTE_EXECUTION_PROPERTIES} değişmez dizesini içeriyorsa bu makro, üst öğenin remote_execution_property özelliğinin içeriğiyle değiştirilir.
  3. remote_execution_property alt platformda ayarlanırsa ve makroyu içermezse alt yayıncının remote_execution_property öğesi değiştirilmeden 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 ve exec_properties öğelerinin aynı devralma zincirinde karıştırı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 değerini ayarlamaz.
  • child_b üst öğenin exec_properties değerini devralır ve k1 değerini geçersiz kılar. exec_properties etkinliği: { "k1": "child", "k2": "v2" }.
  • child_c, üst öğenin exec_properties değerini devralır ve k1 ayarını kaldırır. exec_properties etkinliği: { "k2": "v2" }.
  • child_d, üst öğenin exec_properties öğesini devralır ve yeni bir mülk ekler. exec_properties etkinliği: { "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

Bu platformun içerdiği sınırlama seçeneklerinin kombinasyonu. Bir platformun belirli bir ortama uygulanması 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

Dictionary: String -> String; optional

İşlemlerin uzaktan yürütülme şeklini etkileyen dize haritası. Bazel bunu yorumlamaya çalışmaz. Bu veriler, uzaktan yürütme protokolünün Platform alanı aracılığıyla iletilen opak veriler olarak işlenir. Buna üst platformun exec_properties özelliklerindeki veriler de dahildir. Alt platform ve üst platform aynı anahtarları tanımlıyorsa 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, kullanımdan kaldırılan remote_execution_properties sürümünün tamamen yerini almıştır.
parents

List of labels; optional

Bu platformun devralması gereken bir platform hedefinin etiketi. Özellik bir liste alsa da birden fazla platform bulunmamalıdır. Doğrudan bu platformda ayarlanmayan tüm restricted_settings, üst platformda bulunur. Ayrıntılar için Platform Devralma bölümüne bakın.
remote_execution_properties

String; optional

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 ele alınır. 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

toolchain(name, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, target_compatible_with, target_settings, testonly, toolchain, toolchain_type, visibility)

Bu kural, araç zincirinin çözümlenmesi 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

Name; required

Bu hedef için benzersiz bir ad.

exec_compatible_with

List of labels; optional; nonconfigurable

Bu araç zincirinin ilgili platformdaki bir hedef bina için seçilebilmesi için yürütme platformu tarafından karşılanması gereken constraint_value listesi.
target_compatible_with

List of labels; optional; nonconfigurable

Bu araç zincirinin ilgili platformdaki bir hedef yapıda seçilebilmesi için hedef platformun karşılaması gereken constraint_value listesi.
target_settings

List of labels; optional

Bu araç zincirinin araç zinciri çözümlemesi sırasında 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 kullanıma sunulan gerçek aracı veya araç paketini temsil eden hedef.
toolchain_type

Label; required; nonconfigurable

Bu araç zincirinin hizmet verdiği rolü temsil eden toolchain_type hedefinin etiketi.

toolchain_type

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. Bu, farklı platformlar için aynı rolü taşıyan bir araç sınıfını temsil eden basit bir hedeftir.

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

Örnek

Bu değer, ö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

Name; required

Bu hedef için benzersiz bir ad.