Platformlar ve Araç Zinciri Kuralları

. Sorun bildir Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Bu kurallar dizisi, kullanmakta olduğunuz belirli donanım platformlarını modellemenize olanak ve bu platformlar için kod derlemek gerekebilecek belirli araçları belirlemeye çalışın. Kullanıcılar, burada açıklanan kavramlara aşina olmalıdır.

Kurallar

constraint_setting

Kural kaynağını görüntüle
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, "glibc_version" adlı bir constraint_setting tanımlayabilirsiniz. temsil etmek platformlara glibc kitaplığının farklı sürümlerini yükleme olanağı sunar. Daha fazla bilgi için Platformlar sayfası.

Her constraint_setting, genişletilebilir bir ilişkili constraint_value sn. Bunlar genellikle aynı paket içinde tanımlanır ancak bazen mevcut bir ayar için yeni değerler getirir. Örneğin, önceden tanımlanmış @platforms//cpu:cpu ayarı özel bir değerle uzatılabilir, böylece Anlaşılması zor bir CPU mimarisini hedefleyen bir platform tanımlamalıdır.

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

default_constraint_value

Ad; nonyapılandırabilir; varsayılan değer None

Bu ayar için varsayılan değerin etiketi ve herhangi bir değer verilmezse kullanılır. Bu özelliği mevcutsa bu constraint_value özelliğinin bu constraint_setting ile aynı paket.

Bir kısıtlama ayarının varsayılan değeri varsa bir platform herhangi bir kısıtlama değeri, platformun varsayılan değere sahiptir. Aksi takdirde, varsayılan değer yoksa kısıtlama ayarı dikkate alınır o platform tarafından belirtilmemelidir. Bu durumda, platform, şirketin en büyük belirli bir değer gerektiren kısıtlama listesi (ör. config_setting için) ekleyebilirsiniz.

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ı.

Örnek

Aşağıdaki işlem, önceden tanımlanmış constraint_value için yeni bir olası değer oluşturur CPU mimarisini temsil eder.

constraint_value(
    name = "mips",
    constraint_setting = "@platforms//cpu:cpu",
)
Ardından, platformlar alternatif olarak mips mimarisine sahip olduklarını beyan edebilir x86_64, arm vb.

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

constraint_setting

Etiket; nonyapılandırabilir; zorunlu

Bu constraint_value öğesinin olduğu constraint_setting tercih edebilirsiniz.

platform

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

Bu kural yeni bir platformu tanımlar. Kısıtlama seçeneklerinin adlandırılmış bir koleksiyonu (ör. cpu mimarisi veya derleyici sürümü) üzerinde çalışabileceğine dikkat edin. 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 Bayrakları

Platformlar, eklenecek işaret listesini belirtmek için flags özelliğini kullanabilir. her platform hedef platform olarak kullanıldığında (ör. (--platforms işaretini) tıklayın.

Platformdan ayarlanan bayraklar etkili biçimde en yüksek önceliğe sahiptir ve önceki komut satırından, rc dosyasından veya geçişten söz konusu işaret için bir değer girin.

Örnek

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

Bu, foo adlı bir platformu tanımlar. Bu, hedef platform olduğunda (çünkü kullanıcı --platforms//:foo belirtti. Çünkü bir geçiş ["//:foo"] olarak //command_line_option:platforms işareti veya //:foo yürütme platformu olarak kullanıldıysa), belirtilen işaretler yapılandırma.

Platformlar ve Tekrarlanabilir İşaretler

Bazı işaretler tekrarlandığında değer biriktirir (ör. --features, --copt, config.string(repeatable = True) olarak oluşturulmuş herhangi bir Starlark bayrağı. Bu flag'ler, platformdan işaretlerin ayarlanmasıyla uyumlu değildir. Bunun yerine, önceki tüm işaretlerle değerleri kaldırılır ve platformdaki değerlerin üzerine yazılır.

Örneğin, aşağıdaki platform göz önünde bulundurulduğunda build --platforms=//:repeat_demo --features feature_a --features feature_b çağrısı, ["feature_c", "feature_d"] olan --feature işareti, özellikler kaldırılıyor komut satırından ayarlanır.

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

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

Platform Devralma

Platformlar, etkinleştirecekleri başka bir platformu belirtmek için parents özelliğini kullanabilir. kısıtlama değerlerini şuradan devralabilir. parents özelliği bir liste alsa da şu anda birden fazla değer desteklenmektedir. Birden fazla üst değer belirtmek hatadır.

Bir platformda bir kısıtlama ayarının değerini kontrol ederken, önce doğrudan değerler (constraint_values özelliği ile) işaretli olup ardından kısıtlama değerleri ebeveyndir. Bu, üst platformlar zincirinde yinelenen şekilde devam eder. Bu şekilde, size Doğrudan bir platformda ayarlanan 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 hem de alt yayıncının exec_properties öğesinde görünüyorsa alt değerin değeri kullanılır. Alt platform değer olarak boş bir dize belirtirse ilgili özelliğin ayarı kaldırılır.

Platformlar (desteği sonlandırılmış) remote_execution_properties özelliğini de devralabilir ana platformdan alabilirsiniz. Not: Yeni kodda bunun yerine exec_properties kullanılmalıdır. İlgili içeriği oluşturmak için kullanılan aşağıda açıklanan mantık eski davranışla uyumlu olmak üzere korunur ancak kaldırılacak daha avantajlı bir konumda olursunuz. Bu kural için remote_execution_platform politikasını ayarlamanın mantığı aşağıdaki gibidir: üst platformdur:

  1. remote_execution_property alt platformda ayarlanmazsa üst platformun remote_execution_properties kullanılacak.
  2. remote_execution_property alt platformda ayarlanmışsa ve {PARENT_REMOTE_EXECUTION_PROPERTIES} değişmez dizesi olursa bu makro üst öğenin remote_execution_property özelliğinin içeriğiyle değiştirilir.
  3. remote_execution_property alt platformda ayarlanmışsa ve şunu içermiyorsa: alt öğenin remote_execution_property parametresi değiştirilmeden kullanılır.

remote_execution_properties desteğinin sonlandırılması ve kademeli olarak kullanımdan kaldırılması nedeniyle, remote_execution_properties ve exec_properties aynı devralma zincirine izin verilmez. Kullanımdan kaldırılanlar yerine exec_properties kullanımını tercih et remote_execution_properties.

Ö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 kısıtlama değerlerine sahip (Devralındı) üst öğeden) ve @platforms//cpu:x86_64 (doğrudan platformda ayarlanır).
  • child_b, tüm kısıtlama değerlerini üst öğeden devralır ve şunlardan hiçbirini ayarlamaz sahip olmalıdır.

Ö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, "exec_properties" özelliğini devralır üst öğedir ve kendi kimliğini ayarlamaz.
  • child_b, üst öğenin exec_properties değerini devralır ve k1 değerine ayarlanır. Toplantının exec_properties özelliği: { "k1": "child", "k2": "v2" }.
  • child_c, üst öğenin exec_properties değerini devralır ve ayarı kaldırır k1. Toplantının exec_properties özelliği: { "k2": "v2" }.
  • child_d, üst öğenin exec_properties öğesini devralır ve yeni bir ekler Toplantının exec_properties özelliği: { "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; nonyapılandırabilir; varsayılan değer []

Bu platformun oluşturduğu kısıtlama seçeneklerinin kombinasyonu. Başarılı bir şekilde ortamın bu listedeki en az değere sahip olması gerekir.

Bu listedeki her constraint_value farklı bir değere ait olmalıdır constraint_setting. Örneğin, CPU mimarisi hem @platforms//cpu:x86_64 hem de @platforms//cpu:arm.

exec_properties

Sözlük: Dize -> String; nonconfig; varsayılan değer {}

İşlemlerin uzaktan yürütülme şeklini etkileyen dize haritası. Bazel hiç deneme yapmıyor bunun yorumlanması için platformun Platform alanı aracılığıyla iletilen opak veriler olarak işlenir. uzaktan yürütme protokolünü test edin. 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. Herhangi biri Boş dize olan bir değerle ilişkili anahtarlar sözlükten kaldırılır. Bu özellik, kullanımdan kaldırılan ve remote_execution_properties
flags

Dize listesi; nonconfig; varsayılan değer []

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

Etiket listesi; nonyapılandırabilir; varsayılan değer []

Bu platformun devralması gereken platform hedefinin etiketi. Her ne kadar özellik bir liste aldığında en fazla bir platform olmalıdır. Herhangi biri Doğrudan bu platformda ayarlanmamış olan kısıtlama_settings üst platformda bulunur. Ayrıntılar için Platform Devralma bölümüne bakın.
remote_execution_properties

String; nonconfig; 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 derlemelerde belirli bir SpawnRunner tarafından kullanılabilecek opak veriler olarak işlenir. Bu, üst platformun "remote_execution_properties" verileri içerebilir. özelliğine, şunu yapabilirsiniz: "{PARENT_REMOTE_EXECUTION_PROPERTIES}". Bu bölümde, Ayrıntılı bilgi için Platform Devralma bölümünü inceleyin.
required_settings

Etiket listesi; varsayılan değer []

Hedef yapılandırmanın karşılaması gereken config_setting listesi . Gerekli ayarlar üst platformlardan devralınmaz.

araç zinciri

Kural kaynağını görüntüle
toolchain(name, deprecation, distribs, exec_compatible_with, features, licenses, tags, target_compatible_with, target_settings, testonly, toolchain, toolchain_type, visibility)

Bu kural, seçilebilmesi için belirli bir araç zincirinin türünü ve kısıtlamalarını açıklar çok önemlidir. Bkz. Daha fazlası için Araç Zincirleri sayfasını bolca fırsat sunuyor.

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

exec_compatible_with

Etiket listesi; nonyapılandırabilir; varsayılan değer []

Şuradaki bir yürütme platformu tarafından karşılanması gereken constraint_value listesi: bu araç zincirinin söz konusu platformda bir hedef bina için seçilmesini gerektirir.
target_compatible_with

Etiket listesi; nonyapılandırabilir; varsayılan değer []

Hedef platformun karşılaması gereken constraint_value öğelerinin listesi: bu araç zincirinin söz konusu platformdaki bir hedef bina için seçilmesini gerektirir.
target_settings

Etiket listesi; varsayılan değer []

Hedef yapılandırmanın karşılaması gereken config_setting listesi seçilmesine izin verir.
toolchain

Ad; zorunlu

Bu durumda kullanıma sunulan asıl aracı veya araç paketini temsil eden hedef araç zincirinin seçili olduğundan emin olun.
toolchain_type

Etiket; nonyapılandırabilir; zorunlu

Bir toolchain_type hedefin, bu reklamverenin araç zincirinin sunulması.

toolchain_type

Kural kaynağını görüntüle
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ı platformlarda aynı rolü üstlenir.

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; zorunlu

Bu hedef için benzersiz bir ad.