Platformlar ve Araç Zinciri Kuralları

Sorun bildir Kaynağı göster Nightly · 8.0 · 7.4 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bu kurallar, geliştirme yaptığınız belirli donanım platformlarını modellemenize ve bu platformlar için kod derlemek üzere ihtiyaç duyabileceğiniz belirli araçları belirtmenize olanak tanır. Kullanıcı, burada açıklanan kavramları bilmelidir.

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 belirtebileceği yeni bir kısıtlama türü tanıtmak için kullanılır. Örneğin, platformların glibc kitaplığının farklı sürümlerine sahip olma ö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 grubuna sahiptir. 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ı, bilinmeyen bir CPU mimarisini hedefleyen bir platform 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.

Hiçbir değer belirtilmezse kullanılacak olan bu ayarın varsayılan değerinin etiketi. Bu özellik varsa işaret ettiği constraint_value, bu constraint_setting ile aynı pakette tanımlanmış olmalıdır.

Bir kısıtlama ayarının varsayılan değeri varsa platform bu ayar için herhangi bir kısıtlama değeri eklemediğinde, platformun varsayılan değeri belirtmiş olmasıyla aynıdır. 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 herhangi bir kısıtlama listesinde (ö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, 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, x86_64, arm vb. alternatif olarak mips mimarisine sahip olduklarını beyan edebilir.

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'un olası bir seçim olduğu constraint_setting.

platform

Kural kaynağını görüntüleme
platform(name, constraint_values, deprecation, distribs, exec_properties, features, flags, licenses, parents, remote_execution_properties, required_settings, tags, testonly, visibility)

Bu kural, derlemenin bir kısmının çalışabileceği ortamı tanımlayan adlandırılmış bir kısıtlama seçenekleri koleksiyonu (ör. CPU mimarisi veya derleyici sürümü) olan yeni bir platform tanımlar. Daha fazla bilgi için Platformlar sayfasına bakın.

Örnek

Bu, ARM üzerinde Linux çalıştıran tüm ortamları tanımlayan bir platform tanımlar.

platform(
    name = "linux_arm",
    constraint_values = [
        "@platforms//os:linux",
        "@platforms//cpu:arm",
    ],
)

Platform işaretleri

Platformlar, platform hedef platform olarak kullanıldığında (yani --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ından, rc dosyasından veya geçişten gelen bu işaretin önceki değerlerinin üzerine yazılır.

Örnek

platform(
    name = "foo",
    flags = [
        "--dynamic_mode=fully",
        "--//bool_flag",
        "--no//package:other_bool_flag",
    ],
)

Bu, foo adlı bir platform tanımlar. Bu hedef platform olduğunda (kullanıcı --platforms//:foo'ü belirttiği, bir geçiş //command_line_option:platforms işaretini ["//:foo"] olarak ayarladığı veya //:foo'ın yürütme platformu olarak kullanıldığı için) yapılandırmada belirtilen işaretler ayarlanır.

Platformlar ve Tekrar Edilebilir İşaretler

Bazı işaretler, tekrarlandığında değerleri toplar (ör. --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 yazılır.

Örneğin, aşağıdaki platformda build --platforms=//:repeat_demo --features feature_a --features feature_b çağrısı sonucunda --feature işaretinin değeri ["feature_c", "feature_d"] olur ve komut satırında ayarlanan özellikler kaldırılır.

platform(
    name = "repeat_demo",
    flags = [
        "--features=feature_c",
        "--features=feature_d",
    ],
)

Bu nedenle, flags özelliğinde tekrarlanabilir işaretler kullanılması önerilmez.

Platform Devralımı

Platformlar, kısıtlama değerlerini devralacakları başka bir platformu belirtmek için parents özelliğini kullanabilir. parents özelliği bir liste almasına rağmen şu anda tek bir değerden fazlası desteklenmiyor ve birden fazla üst öğe belirtmek hatadır.

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) kontrol edilir, ardından üst öğedeki kısıtlama değerleri kontrol edilir. Bu işlem, üst platform 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. Ana ve alt platformların exec_properties dizin girişleri birleştirilir. Hem üst öğenin 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 mülkün değeri sıfırlanır.

Platformlar, (desteği sonlandırılmış) remote_execution_properties özelliğini de üst platformdan devralabilir. Not: Yeni kodda bunun yerine exec_properties kullanılmalıdır. Aşağıda açıklanan mantık, eski davranışla uyumlu olacak şekilde korunur ancak gelecekte kaldırılacaktır. Üst platform olduğunda remote_execution_platform ayarlama mantığı aşağıdaki gibidir:

  1. Alt platformda remote_execution_property ayarlanmazsa üst platformun remote_execution_properties değeri kullanılır.
  2. remote_execution_property alt platformda ayarlanmışsa ve {PARENT_REMOTE_EXECUTION_PROPERTIES} literal 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 makro içermiyorsa alt platformun remote_execution_property değeri değiştirilmeden kullanılır.

remote_execution_properties desteği sonlandırıldığı ve kullanımdan kaldırılacağı için aynı devralma zincirinde remote_execution_properties ve exec_properties'nin birlikte kullanılmasına izin verilmez. Desteği sonlandırılan remote_execution_properties yerine exec_properties kullanmayı tercih edin.

Örnek: Kısıt 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 başına hiçbir değer belirlemez.

Ö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 değerini devralır ve k1 değerini sıfırlar. 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

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

Bu platformun içerdiği kısıtlama seçeneklerinin kombinasyonu. Bir platformun belirli bir ortama uygulanması için ortama en az bu listedeki değerler eklenmiş 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

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

İşlemlerin uzaktan yürütülme şeklini etkileyen dizelerin haritası. Bazel bunu yorumlamaya çalışmaz. Bu veri, uzak yürütme protokolünün Platform alanı üzerinden yönlendirilen opak veri olarak değerlendirilir. Üst platformun exec_properties özelliklerindeki tüm veriler buna dahildir. Alt ve üst platform aynı anahtarları tanımlarsa 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, desteği sonlandırılan remote_execution_properties özelliğinin tam bir yerine
flags

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

Bu platform bir yapılandırmada hedef platform olarak kullanıldığında etkinleştirilecek işaretlerin listesi. Yalnızca geçişlerde ayarlanabilen işaretlerin kullanılmasına izin verilir.
parents

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

Bu platformun devralacağı platform hedefinin etiketi. Özellik bir liste alsa da birden fazla platform bulunmamalıdır. Doğrudan bu platformda ayarlanmayan tüm constraint_settings, ana platformda bulunur. Ayrıntılar için Platform Devralımı 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 bir dize. Gerçek derlemeler bunu yorumlamaya çalışmaz, belirli bir SpawnRunner tarafından kullanılabilecek opak veri olarak değerlendirilir. "{PARENT_REMOTE_EXECUTION_PROPERTIES}" makrosu kullanılarak üst platformun "remote_execution_properties" özelliğindeki veriler bu kapsamda olabilir. Ayrıntılar için Platform devralma bölümüne bakın.
required_settings

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

Bu platformun araç zinciri çözümü sırasında yürütme platformu olarak kullanılabilmesi için hedef yapılandırma tarafından karşılanması gereken config_setting'lerin listesi. Gerekli ayarlar üst platformlardan devralınmaz.

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, belirli bir araç zincirinin türünü ve kısıtlamalarını belirtir. Böylece araç zinciri çözümü sırasında seçilebilir. Daha fazla bilgi için Araçlar 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

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

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

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

Bu araç zincirinin, ilgili platformun hedef binası için seçilebilmesi amacıyla hedef platform tarafından karşılanması gereken constraint_value'lerin listesi.
target_settings

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

Bu araç zincirinin araç zinciri çözümü sırasında seçilebilmesi için hedef yapılandırma tarafından karşılanması gereken config_setting'lerin listesi.
toolchain

Ad; zorunlu

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

Etiket; yapılandırılamaz; zorunlu

Bu araç zincirinin oynadığı 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, farklı platformlarda aynı rolü üstlenen bir araç sınıfını temsil eden basit bir hedef olan yeni bir araç zinciri türünü tanımlar.

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

Örnek

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

Ad; zorunlu

Bu hedef için benzersiz bir ad.