Aturan
constraint_setting
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 nilainya dapat ditentukan oleh platform.
Misalnya, Anda dapat menentukan constraint_setting
bernama "glibc_version" untuk menunjukkan
kemampuan agar platform dapat menginstal versi library glibc berbeda.
Untuk mengetahui detail selengkapnya, lihat halaman Platform.
Setiap constraint_setting
memiliki kumpulan constraint_value
terkait
yang dapat diperluas. Biasanya paket ini ditentukan dalam paket yang sama, tetapi terkadang
paket yang berbeda akan memperkenalkan nilai baru untuk setelan yang sudah ada. Misalnya, @platforms//cpu:cpu
setelan standar dapat diperluas dengan nilai kustom untuk
menentukan platform yang menargetkan arsitektur CPU yang tidak jelas.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
default_constraint_value
|
constraint_value yang ditunjuknya harus ditentukan dalam
paket yang sama dengan constraint_setting ini.
Jika setelan batasan memiliki nilai default, setiap kali platform tidak menyertakan
nilai batasan apa pun untuk setelan tersebut, hal ini sama seolah-olah 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 |
constraint_value
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
Baris 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 platform tersebut memiliki arsitektur
mips
sebagai alternatif untuk
x86_64
, arm
, dan seterusnya.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
constraint_setting
|
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 bernama (seperti arsitektur CPU atau versi compiler) yang menjelaskan lingkungan di bagian mana build dapat dijalankan. 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 batasannya. Meskipun atribut parents
mengambil daftar, saat ini tidak lebih dari satu nilai yang 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
) diperiksa, lalu nilai batasan pada
induk. Hal ini berlanjut secara rekursif ke atas rantai platform induk. Dengan cara ini, nilai apa pun yang ditetapkan langsung pada platform akan menggantikan nilai yang ditetapkan pada induk.
Platform mewarisi atribut exec_properties
dari platform induk.
Entri kamus dalam 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 penetapannya.
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 ini 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_property
tidak ditetapkan di platform turunan,remote_execution_properties
induk akan digunakan. -
Jika
remote_execution_property
ditetapkan di platform turunan, dan berisi string literal {PARENT_REMOTE_EXECUTION_PROPERTIES}, makro tersebut akan diganti dengan konten atributremote_execution_property
induk. -
Jika
remote_execution_property
ditetapkan di platform turunan, dan tidak berisi makro,remote_execution_property
turunan akan digunakan tanpa perubahan.
Karena remote_execution_properties
tidak digunakan lagi dan akan dihentikan, menggabungkan
remote_execution_properties
dan exec_properties
dalam rantai
pewarisan yang sama tidak diizinkan.
Memilih 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_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 nilai batasannya 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 miliknya sendiri. -
child_b
mewarisiexec_properties
induk dan mengganti nilaik1
.exec_properties
-nya adalah:{ "k1": "child", "k2": "v2" }
. -
child_c
mewarisiexec_properties
induk dan membatalkan penetapank1
.exec_properties
-nya adalah:{ "k2": "v2" }
. -
child_d
mewarisiexec_properties
induk dan menambahkan properti baru.exec_properties
-nya adalah:{ "k1": "v1", "k2": "v2", "k3": "v3" }
.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
constraint_values
|
Setiap |
exec_properties
|
exec_properties platform 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 penuh untuk remote_execution_properties yang sudah tidak digunakan lagi.
|
parents
|
platform yang harus diwarisi oleh platform ini. Meskipun
atribut ini mengambil daftar, tidak boleh ada lebih dari satu platform. Setiap
constraint_settings yang tidak ditetapkan langsung pada platform ini akan ditemukan di platform induk.
Lihat bagian Pewarisan Platform untuk mengetahui detailnya.
|
remote_execution_properties
|
|
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 agar dapat dipilih selama resolusi toolchain. Lihat halaman Toolchain untuk mengetahui detail selengkapnya.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
exec_compatible_with
|
constraint_value yang harus dipenuhi oleh platform eksekusi agar toolchain ini dipilih untuk build target pada platform tersebut.
|
target_compatible_with
|
constraint_value yang harus dipenuhi oleh platform target agar toolchain ini dipilih untuk build target untuk platform tersebut.
|
target_settings
|
config_setting yang harus dipenuhi oleh konfigurasi target agar toolchain ini dapat dipilih selama resolusi toolchain.
|
toolchain
|
|
toolchain_type
|
toolchain_type yang mewakili peran yang dilayani 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 detail selengkapnya.
Contoh
Ini menetapkan 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 unik untuk target ini. |