Esta página descreve como fazer a integração com regras C++ em vários níveis.
Como acessar o conjunto de ferramentas do C++
Devido ao
migração contínua das regras de C++
plataformas e
conjuntos de ferramentas, você
deve usar a função auxiliar disponível em
@bazel_tools//tools/cpp:toolchain_utils.bzl,
que funciona quando os conjuntos de ferramentas estão desativados e ativados. Para depender de uma biblioteca C++,
na sua regra, adicione uma
Label
atributo chamado _cc_toolchain
e apontá-lo
para @bazel_tools//tools/cpp:current_cc_toolchain
(uma instância de
cc_toolchain_alias
, que aponta para o conjunto de ferramentas C++ selecionado no momento.
Em seguida, na implementação da regra, use
find_cpp_toolchain(ctx)
para conseguir
CcToolchainInfo
Um exemplo completo de funcionamento pode ser encontrado
nos exemplos de rules_cc.
gerar linhas de comando e variáveis de ambiente usando o conjunto de ferramentas do C++;
Normalmente, você se integraria ao conjunto de ferramentas C++ para ter os mesmos sinalizações de linha de comando como as regras C++ fazem, mas sem usar ações C++ diretamente. Isso ocorre porque, ao escrever nossas próprias ações, elas devem se comportar de forma consistente com o conjunto de ferramentas C++ - por exemplo, passando a linha de comando C++ para uma ferramenta que invoca o compilador C++ nos bastidores.
As regras C++ usam uma forma especial de construir linhas de comando com base no feature do Terraform. Para criar uma linha de comando, você precisa do seguinte:
features
eaction_configs
: são doCcToolchainConfigInfo
e encapsulado emCcToolchainInfo
FeatureConfiguration
: retornado por cc_common.configure_features.- variáveis de configuração do conjunto de ferramentas cc - retornadas por cc_common.create_compile_variables ou cc_common.create_link_variables.
Ainda há getters específicos para ferramentas,
compiler_executable (em inglês).
Prefira get_tool_for_action
em vez desses, já que getters específicos da ferramenta vão
sejam removidos.
Um exemplo completo de funcionamento pode ser encontrado nos exemplos de rules_cc.
Implementar regras do Starlark que dependem das regras do C++ e/ou das quais as regras do C++ podem depender
A maioria das regras C++ fornece
CcInfo
,
um provedor contendo CompilationContext
e
LinkingContext
.
Com elas, é possível acessar informações como todos os cabeçalhos transitivos
ou bibliotecas para vincular. De CcInfo
e do CcToolchainInfo
personalizado
As regras do Starlark devem conseguir todas as informações necessárias.
Se uma regra do Starlark personalizada fornecer CcInfo
, ela será um sinal para as regras C++ que
elas também podem depender disso. Mas tome cuidado, se você só precisar propagar
CcInfo
no gráfico até a regra binária que a usa, una
CcInfo
em um provedor diferente. Por exemplo, se a regra java_library
quiser
para propagar dependências nativas até o java_binary
, ele não fornece
CcInfo
diretamente (cc_binary
dependendo de java_library
não faz sentido),
ele precisa ser unido, por exemplo, JavaCcInfo
.
Um exemplo completo de funcionamento pode ser encontrado nos exemplos de rules_cc.
Reutilizar lógica e ações de regras C++
Ainda não está estável, Esta seção vai ser atualizada quando a API estiver estabilizada. Seguir No 4570 para informações atualizadas informações.