Platformlar ve Araç Zinciri Kuralları

Sorun bildir Kaynağı görüntüle Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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üleme
constraint_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 None'dir.

Bu ayarın varsayılan değerinin etiketi. Değer verilmediğinde kullanılır. Bu özellik varsa 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 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. config_setting için) eşleşmez.

constraint_value

Kural kaynağını görüntüleme
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ğı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",
)
Platformlar daha sonra 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

Bu constraint_value'nin olası bir seçenek olduğu constraint_setting.

platform

Kural kaynağını görüntüleme
platform(name, constraint_values, deprecation, distribs, exec_properties, features, licenses, parents, remote_execution_properties, 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 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 bölümündeki 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 ayarlanmamış olur.

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:

  1. Çocuk platformunda remote_execution_property ayarlanmamışsa üst öğenin remote_execution_properties kullanılır.
  2. Çocuk platformunda remote_execution_property ayarlanmışsa ve {PARENT_REMOTE_EXECUTION_PROPERTIES} hazır dizesini içeriyorsa bu makro, üst öğenin remote_execution_property özelliğinin içeriğiyle değiştirilir.
  3. Alt platformda remote_execution_property ayarlanmışsa ve makroyu içermiyorsa alt öğenin remote_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 kısıtlama 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" 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 değeri: { "k1": "child", "k2": "v2" }.
  • child_c, üst öğenin exec_properties özelliğini devralır ve k1 özelliğini ayarlanmamış hale getirir. exec_properties değeri: { "k2": "v2" }.
  • child_d, üst öğenin exec_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 platformun içerdiği kısıtlama seçeneklerinin kombinasyonu. Bir platformun belirli bir ortamda uygulanabilmesi için ortamda bu listedeki değerlerin en azından bulunması 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; nonconfigurable; varsayılan değer {}

İşlemlerin uzaktan yürütülme şeklini etkileyen dizelerin haritası. Bazel bunu yorumlamaya çalışmaz. Bu, uzaktan yürütme protokolünün Platform alanı üzerinden iletilen opak veri olarak değerlendirilir. Üst platformun 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.
parents

Etiket listesi; yapılandırılamaz; varsayılan değer []

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

KULLANIMDAN KALDIRILDI. Lütfen bunun yerine exec_properties özelliğini kullanın. Uzaktan yürütme platformunu yapılandırmak için kullanılan dize. Gerçek derlemeler bunu yorumlamaya çalışmaz. Belirli bir SpawnRunner tarafından kullanılabilen opak veri olarak değerlendirilir. 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örüntüleme
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ü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 []

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

Etiket listesi; yapılandırılamaz; varsayılan değer []

Bu araç zincirinin söz konusu platform için hedef bir derleme amacıyla seçilebilmesi için hedef platformun karşılaması gereken constraint_value listesi.
target_settings

Etiket listesi; varsayılan değer []'dir.

Bu araç zincirinin araç zinciri çözümü sırasında seçilebilmesi için hedef yapılandırmanın karşılaması gereken 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 bir toolchain_type hedefinin etiketi.

toolchain_type

Kural kaynağını görüntüleme
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: 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.