Este conjunto de reglas existe para permitirte modelar plataformas de hardware específicas compilar y especificar las herramientas específicas que podrías necesitar para compilar código para esas plataformas. El usuario debe estar familiarizado con los conceptos que se explican aquí.
Reglas
constraint_setting
Ver el código fuente de la reglaconstraint_setting(name, default_constraint_value, deprecation, distribs, 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 |
Nombre: obligatorio. Un nombre único para este destino. |
default_constraint_value
|
Nombre: no configurable; el valor predeterminado es 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
Ver el código fuente de la reglaconstraint_value(name, constraint_setting, deprecation, distribs, 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 |
Nombre: obligatorio. Un nombre único para este destino. |
constraint_setting
|
Etiqueta; no configurable; obligatorio. Elconstraint_setting para el que este constraint_value es un
la mejor opción posible.
|
plataforma
Ver el código fuente de la reglaplatform(name, constraint_values, deprecation, distribs, 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 información, consulta la página 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_property
no se configura en la plataforma secundaria, el directorio superior Se usaráremote_execution_properties
. -
Si
remote_execution_property
se 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_property
del elemento superior. -
Si
remote_execution_property
se configura en la plataforma secundaria y no contiene la macro, elremote_execution_property
del 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_a
tiene los valores de restricción@platforms//os:linux
(heredados). del elemento superior) y@platforms//cpu:x86_64
(configurado directamente en la plataforma). -
child_b
hereda 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_a
hereda las "exec_properties" del elemento superior y no establece el suyo. -
child_b
hereda elexec_properties
del elemento superior y anula el valor dek1
. Suexec_properties
será:{ "k1": "child", "k2": "v2" }
-
child_c
hereda elexec_properties
del elemento superior y no lo establece.k1
Suexec_properties
será:{ "k2": "v2" }
-
child_d
hereda elexec_properties
del elemento superior y agrega un nuevo propiedad. Suexec_properties
será:{ "k1": "v1", "k2": "v2", "k3": "v3" }
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
constraint_values
|
Lista de etiquetas; no configurable; el valor predeterminado es Cada |
exec_properties
|
Diccionario: Cadena -> String; no configurable; el valor predeterminado es 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
|
Lista de etiquetas; no configurable; el valor predeterminado es 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
|
String; no configurable; el valor predeterminado es |
cadena de herramientas
Ver el código fuente de la reglatoolchain(name, deprecation, distribs, exec_compatible_with, 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 |
Nombre: obligatorio. Un nombre único para este destino. |
exec_compatible_with
|
Lista de etiquetas; no configurable; el valor predeterminado es 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
|
Lista de etiquetas; no configurable; el valor predeterminado es 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
|
Lista de etiquetas; el valor predeterminado es config_setting que la configuración de destino debe satisfacer
para que se seleccione esta cadena de herramientas durante su resolución.
|
toolchain
|
Nombre: obligatorio. El objetivo que representa la herramienta o el paquete de herramientas real que está disponible cuando este la cadena de herramientas. |
toolchain_type
|
Etiqueta; no configurable; obligatorio. La etiqueta de un destinotoolchain_type que representa el rol que este
la cadena de herramientas.
|
toolchain_type
Ver el código fuente de la reglatoolchain_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 |
Nombre: obligatorio. Un nombre único para este destino. |