Reglas
constraint_setting
constraint_setting(name, default_constraint_value, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, testonly, visibility)
Esta regla se usa para ingresar un nuevo tipo de restricción para el cual una plataforma puede especificar un valor.
Por ejemplo, puedes definir un constraint_setting llamado "glibc_version" para representar
la capacidad de las plataformas de tener diferentes versiones de la biblioteca glibc instaladas.
Para obtener más detalles, consulta la
Plataformas.
Cada constraint_setting tiene un conjunto extensible de servicios
constraint_value Por lo general, se definen en el mismo paquete, pero a veces un
cada paquete ingresará valores nuevos para un parámetro de configuración existente. Por ejemplo, el rol predefinido
la configuración de @platforms//cpu:cpu se puede extender con un valor personalizado para
definir una plataforma dirigida a una arquitectura de CPU desconocida
Argumentos
| Atributos | |
|---|---|
name |
Un nombre único para este destino. |
default_constraint_value
|
constraint_value al que apunta debe definirse en el
mismo paquete que este constraint_setting.
Si la configuración de una restricción tiene un valor predeterminado, cada vez que una plataforma no incluya
cualquier valor de restricción para esa configuración, es lo mismo que si la plataforma hubiera especificado la
el valor predeterminado. De lo contrario, si no hay un valor predeterminado, se considera la configuración de la restricción.
que la plataforma no especifica. En ese caso, la plataforma no coincidiría con ninguna
lista de restricciones (como para un |
constraint_value
constraint_value(name, constraint_setting, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, testonly, visibility)
Ejemplo
Lo siguiente crea un nuevo valor posible para el constraint_value predefinido
que representan la arquitectura de la CPU.
constraint_value(
name = "mips",
constraint_setting = "@platforms//cpu:cpu",
)
mips como alternativa a
x86_64, arm, etcétera.
Argumentos
| Atributos | |
|---|---|
name |
Un nombre único para este destino. |
constraint_setting
|
constraint_setting para el que este constraint_value es un
la mejor opción posible.
|
plataforma
platform(name, constraint_values, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, parents, remote_execution_properties, tags, testonly, visibility)
Esta regla define una nueva plataforma: una colección con nombre de opciones de restricciones (como la arquitectura de CPU o la versión del compilador) y describir un entorno en qué parte de la compilación se puede ejecutar. Para obtener más detalles, consulta la Plataformas.
Ejemplo
Esto define una plataforma que describe cualquier entorno que ejecute Linux en ARM.
platform(
name = "linux_arm",
constraint_values = [
"@platforms//os:linux",
"@platforms//cpu:arm",
],
)
Herencia de la plataforma
Las plataformas pueden usar el atributo parents para especificar otra plataforma con la que
del que heredan los valores de las restricciones. Aunque el atributo parents toma una lista, no
se admite más de un solo valor, y un error especificar varios elementos superiores es un error.
Cuando verifiques el valor de una configuración de restricciones en una plataforma, primero, los valores establecen
(mediante el atributo constraint_values) y, luego, los valores de la restricción en
el elemento superior. Esto continúa de forma recurrente en la cadena de plataformas superiores. De esta manera, cualquier
de forma directa en una plataforma anularán los valores establecidos en la plataforma superior.
Las plataformas heredan el atributo exec_properties de la plataforma superior.
Las entradas del diccionario en exec_properties de las plataformas superiores y secundarias
se combinarán.
Si aparece la misma clave en el exec_properties del elemento superior y el secundario,
se usará el valor del elemento secundario. Si la plataforma secundaria especifica una cadena vacía como valor, el
la propiedad correspondiente.
Las plataformas también pueden heredar el atributo remote_execution_properties (obsoleto)
desde la plataforma principal. Nota: El código nuevo debe usar exec_properties en su lugar. El
descrita a continuación se mantiene para que sea compatible con el comportamiento heredado, pero se quitará
en el futuro.
La lógica para configurar remote_execution_platform es la siguiente cuando hay
es una plataforma principal:
-
Si
remote_execution_propertyno se configura en la plataforma secundaria, el directorio superior Se usaráremote_execution_properties. -
Si
remote_execution_propertyse configura en la plataforma secundaria y contiene el elemento literal {PARENT_REMOTE_EXECUTION_PROPERTIES}, esa macro se Se reemplazará por el contenido del atributoremote_execution_propertydel elemento superior. -
Si
remote_execution_propertyse configura en la plataforma secundaria y no contiene la macro, elremote_execution_propertydel elemento secundario se usará sin cambios.
Dado que remote_execution_properties dejó de estar disponible y se eliminará de forma gradual, la combinación
remote_execution_properties y exec_properties en el mismo
cadena de herencia no permitida.
Es preferible usar exec_properties en lugar de la versión obsoleta.
remote_execution_properties
Ejemplo: valores de restricción
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"],
)
En este ejemplo, las plataformas secundarias tienen las siguientes propiedades:
-
child_atiene los valores de restricción@platforms//os:linux(heredados). del elemento superior) y@platforms//cpu:x86_64(configurado directamente en la plataforma). -
child_bhereda todos los valores de restricción del elemento superior y no establece ninguno de por sí solos.
Ejemplo: Propiedades de ejecución
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"
}
)
En este ejemplo, las plataformas secundarias tienen las siguientes propiedades:
-
child_ahereda las "exec_properties" del elemento superior y no establece el suyo. -
child_bhereda elexec_propertiesdel elemento superior y anula el valor dek1. Suexec_propertiesserá:{ "k1": "child", "k2": "v2" } -
child_chereda elexec_propertiesdel elemento superior y no lo establece.k1Suexec_propertiesserá:{ "k2": "v2" } -
child_dhereda elexec_propertiesdel elemento superior y agrega un nuevo propiedad. Suexec_propertiesserá:{ "k1": "v1", "k2": "v2", "k3": "v3" }
Argumentos
| Atributos | |
|---|---|
name |
Un nombre único para este destino. |
constraint_values
|
Cada |
exec_properties
|
exec_properties de la plataforma superior.
Si la plataforma secundaria y la plataforma superior definen las mismas claves, se conservan los valores del elemento secundario. Cualquiera
las claves asociadas con un valor que es una cadena vacía se quitan del diccionario.
Este atributo reemplaza por completo el atributo obsoleto
remote_execution_properties
|
parents
|
platform del que esta plataforma debe heredar. Si bien
el atributo toma una lista, no debe haber más de una plataforma presente. Cualquiera
La configuración constraint_settings no establecida directamente en esta plataforma se encontrará en la plataforma superior.
Consulta la sección Herencia de la plataforma para obtener más detalles.
|
remote_execution_properties
|
|
cadena de herramientas
toolchain(name, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, target_compatible_with, target_settings, testonly, toolchain, toolchain_type, visibility)
Esta regla declara las restricciones y el tipo de una cadena de herramientas específica para que se pueda seleccionar. durante la resolución de la cadena de herramientas. Consulta la Cadenas de herramientas para obtener más información más detalles.
Argumentos
| Atributos | |
|---|---|
name |
Un nombre único para este destino. |
exec_compatible_with
|
constraint_value que una plataforma de ejecución debe cumplir en
a fin de que se seleccione esta cadena de herramientas para una compilación objetivo en esa plataforma.
|
target_compatible_with
|
constraint_value que la plataforma de segmentación debe cumplir en
a fin de que se seleccione esta cadena de herramientas para una compilación objetivo de esa plataforma.
|
target_settings
|
config_setting que la configuración de destino debe satisfacer
para que se seleccione esta cadena de herramientas durante su resolución.
|
toolchain
|
|
toolchain_type
|
toolchain_type que representa el rol que este
la cadena de herramientas.
|
toolchain_type
toolchain_type(name, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
Esta regla define un nuevo tipo de cadena de herramientas: un objetivo simple que representa una clase de herramientas que tienen la misma función en distintas plataformas.
Consulta la página Cadenas de herramientas para obtener más detalles.
Ejemplo
Esto define un tipo de cadena de herramientas para una regla personalizada.
toolchain_type(
name = "bar_toolchain_type",
)
Se puede utilizar en un archivo 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"]
)
Argumentos
| Atributos | |
|---|---|
name |
Un nombre único para este destino. |