Kumpulan aturan ini ada untuk memungkinkan Anda memodelkan platform hardware tertentu yang Anda bangun dan menentukan alat tertentu yang mungkin Anda perlukan untuk mengompilasi kode untuk platform tersebut. Pengguna harus memahami konsep yang dijelaskan di sini.
Aturan
constraint_setting
Lihat sumber aturanconstraint_setting(name, default_constraint_value, deprecation, distribs, features, licenses, tags, testonly, visibility)
Aturan ini digunakan untuk memperkenalkan jenis batasan baru yang nilainya dapat ditentukan oleh platform.
Misalnya, Anda dapat menentukan constraint_setting bernama "glibc_version" untuk merepresentasikan kemampuan platform agar memiliki versi library glibc yang berbeda yang diinstal.
Untuk mengetahui detail selengkapnya, lihat halaman
Platform.
Setiap constraint_setting memiliki serangkaian constraint_value terkait yang dapat diperluas. Biasanya, nilai ini ditentukan dalam paket yang sama, tetapi terkadang paket yang berbeda akan memperkenalkan nilai baru untuk setelan yang ada. Misalnya, setelan
yang telah ditentukan sebelumnya @platforms//cpu:cpu dapat diperluas dengan nilai kustom untuk
menentukan penargetan platform yang menggunakan arsitektur CPU yang tidak umum.
  
Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| default_constraint_value | Name; nonconfigurable; default adalah  constraint_valueyang ditujuknya harus ditentukan dalam paket yang sama denganconstraint_settingini.Jika setelan batasan memiliki nilai default, setiap kali platform tidak menyertakan
        nilai batasan untuk setelan tersebut, nilai tersebut sama dengan jika platform telah menentukan
        nilai default. Jika tidak, 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  | 
constraint_value
Lihat sumber aturanconstraint_value(name, constraint_setting, deprecation, distribs, features, licenses, tags, testonly, visibility)
Contoh
Berikut akan membuat nilai baru yang mungkin untuk constraint_value yang telah ditentukan sebelumnya
yang merepresentasikan arsitektur CPU.
constraint_value(
    name = "mips",
    constraint_setting = "@platforms//cpu:cpu",
)
mips sebagai alternatif untuk
x86_64, arm, dan sebagainya.
  Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| constraint_setting | Label; tidak dapat dikonfigurasi; wajib constraint_settingyang memungkinkanconstraint_valueini menjadi
        pilihan. | 
platform
Lihat sumber aturanplatform(name, constraint_values, deprecation, distribs, exec_properties, features, licenses, parents, remote_execution_properties, tags, testonly, visibility)
Aturan ini menentukan platform baru -- kumpulan pilihan batasan bernama (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 dari platform tersebut. Meskipun atribut parents mengambil daftar, saat ini hanya satu nilai yang didukung, dan menentukan beberapa induk adalah error.
  Saat memeriksa nilai setelan batasan di platform, pertama-tama nilai yang ditetapkan secara langsung
  (melalui atribut constraint_values) diperiksa, lalu nilai batasan pada
  induk. Proses ini berlanjut secara rekursif hingga ke rantai platform induk. Dengan cara ini, semua
  nilai yang ditetapkan langsung di platform akan menggantikan nilai yang ditetapkan di 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,
  nilai turunan akan digunakan. Jika platform turunan menentukan string kosong sebagai nilai, properti yang sesuai akan dibatalkan.
  Platform juga dapat mewarisi atribut remote_execution_properties (tidak digunakan lagi)
  dari platform induk. Catatan: kode baru harus menggunakan exec_properties. Logika yang dijelaskan di bawah dipertahankan agar kompatibel dengan perilaku lama, tetapi akan dihapus pada masa mendatang.
  Logika untuk menetapkan remote_execution_platform adalah sebagai berikut jika ada platform induk:
  
- 
      Jika remote_execution_propertytidak disetel di platform turunan,remote_execution_propertiesinduk akan digunakan.
- 
      Jika remote_execution_propertyditetapkan di platform turunan, dan berisi string literal {PARENT_REMOTE_EXECUTION_PROPERTIES}, makro tersebut akan diganti dengan konten atributremote_execution_propertyinduk.
- 
      Jika remote_execution_propertyditetapkan di platform turunan, dan tidak berisi makro,remote_execution_propertyturunan akan digunakan tanpa perubahan.
  Karena remote_execution_properties tidak digunakan lagi dan akan dihentikan, penggabungan
  remote_execution_properties dan exec_properties dalam rantai
  pewarisan yang sama tidak diizinkan.
  Lebih baik menggunakan exec_properties daripada
  remote_execution_properties yang 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_amemiliki nilai batasan@platforms//os:linux(diwarisi dari induk) dan@platforms//cpu:x86_64(ditetapkan langsung di platform).
- 
      child_bmewarisi semua nilai batasan dari induk, dan tidak menetapkan nilai batasan 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_amewarisi "exec_properties" induk dan tidak menyetelnya sendiri.
- 
      child_bmewarisiexec_propertiesinduk dan menggantikan nilaik1.exec_properties-nya adalah:{ "k1": "child", "k2": "v2" }.
- 
      child_cmewarisiexec_propertiesinduk dan membatalkan setelank1.exec_properties-nya adalah:{ "k2": "v2" }.
- 
      child_dmewarisiexec_propertiesinduk dan menambahkan properti baru.exec_properties-nya adalah:{ "k1": "v1", "k2": "v2", "k3": "v3" }.
Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| constraint_values | Daftar label; tidak dapat dikonfigurasi; defaultnya adalah  Setiap  | 
| exec_properties | Dictionary: String -> String; nonconfigurable; default adalah  exec_propertiesplatform induk.
        Jika platform turunan dan induk menentukan kunci yang sama, nilai turunan akan dipertahankan. Setiap
        kunci yang terkait dengan nilai berupa string kosong akan dihapus dari kamus.
        Atribut ini adalah pengganti lengkap untukremote_execution_propertiesyang tidak digunakan lagi. | 
| parents | Daftar label; tidak dapat dikonfigurasi; defaultnya adalah  platformyang harus diwarisi oleh platform ini. Meskipun
        atribut mengambil daftar, tidak boleh ada lebih dari satu platform. Setelan batasan yang tidak ditetapkan langsung di platform ini akan ditemukan di platform induk.
        Lihat bagian Pewarisan Platform untuk mengetahui detailnya. | 
| remote_execution_properties | String; tidak dapat dikonfigurasi; defaultnya adalah  | 
toolchain
Lihat sumber aturantoolchain(name, deprecation, distribs, exec_compatible_with, 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 penyelesaian toolchain. Lihat halaman Toolchains untuk mengetahui detail selengkapnya.
Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| exec_compatible_with | Daftar label; tidak dapat dikonfigurasi; defaultnya adalah  constraint_valueyang harus dipenuhi oleh platform eksekusi agar toolchain ini dipilih untuk membangun target di platform tersebut. | 
| target_compatible_with | Daftar label; tidak dapat dikonfigurasi; defaultnya adalah  constraint_valueyang harus dipenuhi oleh platform target agar toolchain ini dipilih untuk pembuatan target bagi platform tersebut. | 
| target_settings | Daftar label; defaultnya adalah  config_settingyang harus dipenuhi oleh konfigurasi target
        agar toolchain ini dipilih selama penyelesaian toolchain. | 
| toolchain | Nama; wajibTarget yang merepresentasikan alat atau rangkaian alat sebenarnya yang tersedia saat toolchain ini dipilih. | 
| toolchain_type | Label; tidak dapat dikonfigurasi; wajibLabel target toolchain_typeyang merepresentasikan peran yang dilayani
        oleh toolchain ini. | 
toolchain_type
Lihat sumber aturantoolchain_type(name, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
Aturan ini menentukan jenis toolchain baru -- target sederhana yang merepresentasikan class alat yang memiliki peran yang sama untuk platform yang berbeda.
Lihat halaman Toolchains untuk mengetahui detail selengkapnya.
Contoh
Tindakan 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 | Nama; wajib Nama unik untuk target ini. |