Como integrar com regras C++

Informar um problema Mostrar fonte Por noite · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

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:

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.