Esse conjunto de regras existe para permitir que você modele plataformas de hardware específicas para as quais você está criando e especifique as ferramentas específicas que podem ser necessárias para compilar código para essas plataformas. O usuário precisa estar familiarizado com os conceitos explicados aqui.
Regras
constraint_setting
Exibir origem da regraconstraint_setting(name, default_constraint_value, deprecation, distribs, features, licenses, tags, testonly, visibility)
Essa regra é usada para introduzir um novo tipo de restrição para o qual uma plataforma pode especificar um valor.
Por exemplo, defina um constraint_setting
chamado "glibc_version" para representar
a capacidade que as plataformas têm de ter diferentes versões da biblioteca glibc instaladas.
Para mais detalhes, consulte a página Plataformas.
Cada constraint_setting
tem um conjunto extensível de constraint_value
s
associados. Normalmente, eles são definidos no mesmo pacote, mas às vezes um
pacote diferente introduz novos valores para uma configuração atual. Por exemplo, a configuração
predefinida @platforms//cpu:cpu
pode ser estendida com um valor personalizado para
definir uma plataforma direcionada a uma arquitetura de CPU obscura.
Argumentos
Atributos | |
---|---|
name |
Nome, obrigatório Um nome exclusivo para o destino. |
default_constraint_value
|
Nome; não configurável; o padrão é constraint_value para o qual ele aponta precisará ser definido no
mesmo pacote que esse constraint_setting .
Se uma configuração de restrição tiver um valor padrão, sempre que uma plataforma não incluir
nenhum valor de restrição para essa configuração, será como se ela tivesse especificado o
valor padrão. Caso contrário, se não houver um valor padrão, a configuração da restrição será considerada não especificada por essa plataforma. Nesse caso, a plataforma não corresponderia a nenhuma
lista de restrições (como para |
constraint_value
Ver origem da regraconstraint_value(name, constraint_setting, deprecation, distribs, features, licenses, tags, testonly, visibility)Esta regra introduz um novo valor para um determinado tipo de restrição. Para mais detalhes, consulte a página Plataformas.
Exemplo
O código abaixo cria um novo valor possível para o constraint_value
predefinido
que representa a arquitetura de CPU.
constraint_value( name = "mips", constraint_setting = "@platforms//cpu:cpu", )As plataformas podem declarar que têm a arquitetura
mips
como uma alternativa a
x86_64
, arm
e assim por diante.
Argumentos
Atributos | |
---|---|
name |
Nome, obrigatório Um nome exclusivo para o destino. |
constraint_setting
|
Rótulo; não configurável; obrigatório Oconstraint_setting para o qual esse constraint_value é uma
opção possível.
|
platform [plataforma]
Exibir origem da regraplatform(name, constraint_values, deprecation, distribs, exec_properties, features, licenses, parents, remote_execution_properties, tags, testonly, visibility)
Essa regra define uma nova plataforma, uma coleção nomeada de opções de restrição (como arquitetura de CPU ou versão do compilador) que descreve um ambiente em que parte do build pode ser executada. Para mais detalhes, consulte a página Plataformas.
Exemplo
Isso define uma plataforma que descreve qualquer ambiente que execute o Linux no ARM.
platform( name = "linux_arm", constraint_values = [ "@platforms//os:linux", "@platforms//cpu:arm", ], )
Herança da plataforma
As plataformas podem usar o atributo parents
para especificar outra plataforma de onde herdarão valores de restrição. Embora o atributo parents
use uma lista, no momento não
é possível usar mais de um valor, e especificar vários pais é um erro.
Ao verificar o valor de uma configuração de restrição em uma plataforma, primeiro os valores definidos diretamente
(pelo atributo constraint_values
) são verificados e, em seguida, os valores de restrição
no pai. Isso continua recursivamente na cadeia de plataformas pai. Dessa forma, os valores definidos diretamente em uma plataforma vão substituir aqueles definidos no pai.
As plataformas herdam o atributo exec_properties
da plataforma pai.
As entradas do dicionário no exec_properties
das plataformas mãe e filha
serão combinadas.
Se a mesma chave aparecer no exec_properties
do pai e do filho,
o valor do filho será usado. Se a plataforma filha especificar uma string vazia como valor, a propriedade correspondente não será definida.
As plataformas também podem herdar o atributo remote_execution_properties
(descontinuado) da plataforma pai. Observação: o novo código precisa usar exec_properties
. A lógica descrita abaixo é mantida para ser compatível com o comportamento legado, mas será removida no futuro.
A lógica para definir o remote_execution_platform
é a seguinte quando há
uma plataforma mãe:
-
Se
remote_execution_property
não estiver definido na plataforma filha, oremote_execution_properties
do pai será usado. -
Se
remote_execution_property
for definido na plataforma filha e contiver a string literal {PARENT_REMOTE_EXECUTION_PROPERTIES}, essa macro será substituída pelo conteúdo do atributoremote_execution_property
do pai. -
Se
remote_execution_property
for definido na plataforma filha e não contiver a macro, aremote_execution_property
filha será usada inalterada.
Como remote_execution_properties
foi descontinuado e será desativado, não é permitido misturar
remote_execution_properties
e exec_properties
na mesma
cadeia de herança.
Prefira usar exec_properties
em vez do remote_execution_properties
descontinuado.
Exemplo: valores de restrição
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"], )
Neste exemplo, as plataformas filhas têm as seguintes propriedades:
-
child_a
tem os valores de restrição@platforms//os:linux
(herdados do pai) e@platforms//cpu:x86_64
(definidos diretamente na plataforma). -
child_b
herda todos os valores de restrição do pai e não define nenhum próprio.
Exemplo: propriedades de execução
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" } )
Neste exemplo, as plataformas filhas têm as seguintes propriedades:
-
child_a
herda as "exec_properties" do pai e não define as próprias. -
child_b
herda oexec_properties
do pai e substitui o valor dek1
. Oexec_properties
será:{ "k1": "child", "k2": "v2" }
. -
child_c
herda oexec_properties
do pai e cancela a configuração dek1
. Oexec_properties
será:{ "k2": "v2" }
. -
child_d
herda oexec_properties
do pai e adiciona uma nova propriedade. Oexec_properties
será:{ "k1": "v1", "k2": "v2", "k3": "v3" }
.
Argumentos
Atributos | |
---|---|
name |
Nome, obrigatório Um nome exclusivo para o destino. |
constraint_values
|
Lista de marcadores; não configurável; o padrão é Cada |
exec_properties
|
Dicionário: String -> String; nonconfigurable; o padrão é exec_properties da plataforma mãe.
Se as plataformas mãe e filha definirem as mesmas chaves, os valores da filha serão mantidos. Todas as chaves associadas a um valor que seja uma string vazia são removidas do dicionário.
Esse atributo é uma substituição completa para o remote_execution_properties
descontinuado.
|
parents
|
Lista de marcadores; não configurável; o padrão é platform do qual esta plataforma deve herdar. Embora
o atributo use uma lista, não pode haver mais de uma plataforma presente. Qualquer
restricted_settings não definida diretamente nessa plataforma será encontrada na plataforma pai.
Consulte a seção sobre Herança da plataforma para mais detalhes.
|
remote_execution_properties
|
String; não configurável; o padrão é |
conjunto de ferramentas
Exibir origem da regratoolchain(name, deprecation, distribs, exec_compatible_with, features, licenses, tags, target_compatible_with, target_settings, testonly, toolchain, toolchain_type, visibility)
Essa regra declara o tipo e as restrições de um conjunto de ferramentas específico para que ele possa ser selecionado durante a resolução. Consulte a página Conjuntos de ferramentas para mais detalhes.
Argumentos
Atributos | |
---|---|
name |
Nome, obrigatório Um nome exclusivo para o destino. |
exec_compatible_with
|
Lista de marcadores; não configurável; o padrão é constraint_value s que precisam ser atendidas por uma plataforma de execução para que esse conjunto de ferramentas seja selecionado para uma criação de destino nessa plataforma.
|
target_compatible_with
|
Lista de marcadores; não configurável; o padrão é constraint_value s que precisam ser atendidas pela plataforma de destino para que esse conjunto de ferramentas seja selecionado para uma compilação de destino dessa plataforma.
|
target_settings
|
Lista de rótulos. O padrão é config_setting s que precisam ser atendidas pela configuração de destino
para que esse conjunto de ferramentas seja selecionado durante a resolução dele.
|
toolchain
|
Nome, obrigatório O destino que representa a ferramenta ou o conjunto de ferramentas real disponibilizado quando esse conjunto de ferramentas é selecionado. |
toolchain_type
|
Rótulo; não configurável; obrigatório O rótulo de um destinotoolchain_type que representa o papel veiculado pelo conjunto de ferramentas.
|
toolchain_type
Exibir origem da regratoolchain_type(name, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
Essa regra define um novo tipo de conjunto de ferramentas: um destino simples que representa uma classe de ferramentas que têm a mesma função em plataformas diferentes.
Consulte a página Conjuntos de ferramentas para mais detalhes.
Exemplo
Isso define um tipo de conjunto de ferramentas para uma regra personalizada.
toolchain_type( name = "bar_toolchain_type", )
Isso pode ser usado em um arquivo 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 |
Nome, obrigatório Um nome exclusivo para o destino. |