BazelCon 2022 akan hadir pada 16-17 November ke New York dan online.
Daftar sekarang.

Aturan Platform

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Aturan

batasan_setelan

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

Aturan ini digunakan untuk memperkenalkan jenis batasan baru yang mungkin ditentukan oleh nilai platform. Misalnya, Anda dapat menentukan constraint_setting bernama "glibc_version" untuk mewakili kemampuan platform yang telah menginstal versi library glibc yang berbeda. Untuk mengetahui detail selengkapnya, lihat halaman Platform.

Setiap constraint_setting memiliki kumpulan constraint_value terkait. Biasanya ini ditentukan dalam paket yang sama, tetapi terkadang paket berbeda akan memperkenalkan nilai baru untuk setelan yang ada. Misalnya, setelan @platforms//cpu:cpu yang telah ditetapkan dapat diperluas dengan nilai khusus untuk menentukan platform yang menargetkan arsitektur cpu yang tidak jelas.

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

default_constraint_value

Name; optional

Label nilai default untuk setelan ini, yang akan digunakan jika tidak ada nilai yang diberikan. Jika atribut ini ada, constraint_value yang ditunjuknya harus ditentukan dalam paket yang sama dengan constraint_setting ini.

Jika setelan batasan memiliki nilai default, maka setiap kali platform tidak menyertakan nilai batasan untuk setelan tersebut, sama seperti jika platform telah menentukan nilai default. Sebaliknya, jika tidak ada nilai default, setelan batasan dianggap tidak ditentukan oleh platform tersebut. Dalam hal ini, platform tidak akan cocok dengan daftar batasan apa pun (seperti untuk config_setting) yang memerlukan nilai tertentu untuk setelan tersebut.

nilai_batasan

constraint_value(name, constraint_setting, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, testonly, visibility)
Aturan ini memperkenalkan nilai baru untuk jenis batasan tertentu. Untuk mengetahui detail selengkapnya, lihat halaman Platform.

Contoh

Hal berikut akan membuat nilai baru yang memungkinkan untuk constraint_value yang telah ditetapkan dan mewakili arsitektur cpu.

constraint_value(
    name = "mips",
    constraint_setting = "@platforms//cpu:cpu",
)
Platform kemudian dapat mendeklarasikan bahwa mereka memiliki arsitektur mips sebagai alternatif x86_64, arm, dan seterusnya.

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

constraint_setting

Label; required

constraint_setting yang memungkinkan constraint_value ini menjadi pilihan.

platform

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

Aturan ini menentukan platform baru -- kumpulan pilihan batasan yang diberi nama (seperti arsitektur cpu atau versi compiler) yang menjelaskan lingkungan tempat bagian build dapat berjalan. Untuk mengetahui detail selengkapnya, lihat halaman Platform.

Contoh

Ini menentukan platform yang menjelaskan lingkungan apa pun yang menjalankan Linux di ARM.

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

Pewarisan Platform

Platform dapat menggunakan atribut parents untuk menentukan platform lain yang akan mewarisi nilai batasan. Meskipun atribut parents mengambil daftar, tidak lebih dari satu nilai yang saat ini didukung, dan menentukan beberapa induk adalah sebuah error.

Saat memeriksa nilai setelan batasan di platform, pertama-tama nilai yang ditetapkan secara langsung (melalui atribut constraint_values) akan diperiksa, lalu nilai batasan pada induk. Tindakan ini akan terus berlanjut secara berulang pada rantai platform induk. Dengan cara ini, nilai apa pun yang ditetapkan secara langsung pada platform akan menggantikan nilai yang ditetapkan pada induk.

Platform mewarisi atribut exec_properties dari platform induk. Entri kamus di exec_properties platform induk dan turunan akan digabungkan. Jika kunci yang sama muncul di exec_properties induk dan turunan, maka nilai turunan akan digunakan. Jika platform turunan menentukan string kosong sebagai nilai, properti yang sesuai tidak akan ditetapkan.

Platform juga dapat mewarisi atribut remote_execution_properties (tidak digunakan lagi) dari platform induk. Catatan: kode baru harus menggunakan exec_properties sebagai gantinya. Logika yang dijelaskan di bawah ini dipertahankan agar kompatibel dengan perilaku lama, tetapi akan dihapus di masa mendatang. Logika untuk menyetel remote_execution_platform adalah sebagai berikut ketika ada platform induk:

  1. Jika remote_execution_property tidak disetel di platform turunan, remote_execution_properties induk akan digunakan.
  2. Jika remote_execution_property ditetapkan pada platform turunan, dan berisi string literal {PARENT_REMOTE_EXECUTION_PROPERTIES}, makro tersebut akan diganti dengan konten atribut remote_execution_property induk.
  3. Jika remote_execution_property ditetapkan di platform turunan, dan tidak berisi makro, remote_execution_property turunan tidak akan digunakan.

Karena remote_execution_properties tidak digunakan lagi dan akan dihentikan, pencampuran remote_execution_properties dan exec_properties dalam rantai warisan yang sama tidak diizinkan. Lebih suka menggunakan exec_properties daripada remote_execution_properties yang sudah tidak digunakan lagi.

Contoh: Nilai Batasan

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"],
)

Dalam contoh ini, platform turunan memiliki properti berikut:

  • child_a memiliki nilai batasan @platforms//os:linux (diwarisi dari induk) dan @platforms//cpu:x86_64 (ditetapkan langsung di platform).
  • child_b mewarisi semua nilai batasan dari induk, dan tidak menetapkan salah satu nilai miliknya sendiri.

Contoh: Properti eksekusi

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"
    }
)

Dalam contoh ini, platform turunan memiliki properti berikut:

  • child_a mewarisi "exec_properties" dari induk dan tidak menetapkan induk sendiri.
  • child_b mewarisi exec_properties induk dan mengganti nilai k1. exec_properties-nya adalah: { "k1": "child", "k2": "v2" }.
  • child_c mewarisi exec_properties induk dan membatalkan setelan k1. exec_properties-nya adalah: { "k2": "v2" }.
  • child_d mewarisi exec_properties induk dan menambahkan properti baru. exec_properties-nya adalah: { "k1": "v1", "k2": "v2", "k3": "v3" }.

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

constraint_values

List of labels; optional

Kombinasi pilihan batasan yang terdiri dari platform ini. Agar platform dapat diterapkan ke lingkungan tertentu, lingkungan harus memiliki setidaknya nilai dalam daftar ini.

Setiap constraint_value dalam daftar ini harus untuk constraint_setting yang berbeda. Misalnya, Anda tidak dapat menentukan platform yang mengharuskan arsitektur cpu menjadi @platforms//cpu:x86_64 dan @platforms//cpu:arm.

exec_properties

Dictionary: String -> String; optional

Peta string yang memengaruhi cara tindakan dieksekusi dari jarak jauh. Bazel tidak berupaya untuk menafsirkan hal ini, Bazel diperlakukan sebagai data buram yang diteruskan melalui kolom Platform protokol eksekusi jarak jauh. Ini mencakup semua data dari atribut exec_properties platform induk. Jika platform turunan dan induk menentukan kunci yang sama, nilai turunan akan dipertahankan. Setiap kunci yang berkaitan dengan nilai yang merupakan string kosong akan dihapus dari kamus. Atribut ini adalah pengganti penuh untuk remote_execution_properties yang tidak digunakan lagi.
parents

List of labels; optional

Label target platform yang harus diwarisi oleh platform ini. Meskipun atribut mengambil daftar, tidak boleh ada lebih dari satu platform. Setiap constraint_settings yang tidak disetel secara langsung di platform ini akan ditemukan di platform induk. Lihat bagian Pewarisan Platform untuk detailnya.
remote_execution_properties

String; optional

TIDAK DIGUNAKAN LAGI. Sebagai gantinya, gunakan atribut exec_properties. String yang digunakan untuk mengonfigurasi platform eksekusi jarak jauh. Build yang sebenarnya tidak berupaya menafsirkannya, tetapi dianggap sebagai data buram yang dapat digunakan oleh SpawnRunner tertentu. Ini dapat mencakup data dari atribut "remote_execution_properties" platform induk, dengan menggunakan makro "{PARENT_REMOTE_EXECUTION_PROPERTIES}". Lihat bagian tentang Pewarisan Platform untuk detailnya.

toolchain

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

Aturan ini mendeklarasikan jenis dan batasan toolchain tertentu sehingga dapat dipilih selama resolusi toolchain. Lihat halaman Toolchain untuk mengetahui detail selengkapnya.

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

exec_compatible_with

List of labels; optional; nonconfigurable

Daftar constraint_value yang harus dipenuhi oleh platform eksekusi agar toolchain ini dipilih bagi build target pada platform tersebut.
target_compatible_with

List of labels; optional; nonconfigurable

Daftar constraint_value yang harus dipenuhi oleh platform target agar toolchain ini dipilih bagi gedung target untuk platform tersebut.
target_settings

List of labels; optional

Daftar config_setting yang harus dipenuhi oleh konfigurasi target agar toolchain ini dipilih selama resolusi toolchain.
toolchain

Name; required

Target yang mewakili alat sebenarnya atau rangkaian alat yang tersedia saat toolchain ini dipilih.
toolchain_type

Label; required; nonconfigurable

Label target toolchain_type yang mewakili peran yang disalurkan toolchain ini.

toolchain_type

toolchain_type(name, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)

Aturan ini menentukan jenis toolchain baru -- target sederhana yang mewakili class alat yang memiliki peran yang sama untuk platform yang berbeda.

Lihat halaman Toolchain untuk mengetahui detail selengkapnya.

Contoh

Ini menentukan jenis toolchain untuk aturan kustom.

toolchain_type(
    name = "bar_toolchain_type",
)

Ini dapat digunakan dalam file bzl.

bar_binary = rule(
    implementation = _bar_binary_impl,
    attrs = {
        "srcs": attr.label_list(allow_files = True),
        ...
        # No `_compiler` attribute anymore.
    },
    toolchains = ["//bar_tools:toolchain_type"]
)

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.