Integración con reglas de C++

Informar un problema . Ver fuente . Por la noche · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

En esta página, se describe cómo realizar integraciones con reglas de C++ en varios niveles.

Cómo acceder a la cadena de herramientas de C++

Debido a migración continua de reglas de C++ a las plataformas y cadenas de herramientas, debes usar la función auxiliar disponible en @bazel_tools//tools/cpp:toolchain_utils.bzl, que funciona cuando las cadenas de herramientas están inhabilitadas y habilitadas. Depender de una instancia de C++ en tu regla, agrega una Label atributo llamado _cc_toolchain y señalarlo a @bazel_tools//tools/cpp:current_cc_toolchain (una instancia de cc_toolchain_alias, que apunta a la cadena de herramientas de C++ seleccionada actualmente). Luego, en la implementación de reglas, usa find_cpp_toolchain(ctx) para obtener la CcToolchainInfo Puedes encontrar un ejemplo funcional completo en los ejemplos de rules_cc.

Generar líneas de comandos y variables de entorno con la cadena de herramientas de C++

Por lo general, la integración con la cadena de herramientas de C++ para tener la misma como las reglas de C++, pero sin usar directamente las acciones de C++. Esto se debe a que, al escribir nuestras propias acciones, deben comportarse de forma coherente con la cadena de herramientas de C++; por ejemplo, pasar la línea de comandos de C++ indicadores a una herramienta que invoca el compilador C++ en segundo plano.

Las reglas C++ usan una forma especial de construir líneas de comandos basadas en feature actual. Para construir una línea de comandos, necesitarás lo siguiente:

Aún hay métodos get específicos de la herramienta, como compiler_executable. Prefiere get_tool_for_action en lugar de estos, ya que los métodos get específicos de la herramienta lo harán en el futuro.

Puedes encontrar un ejemplo funcional completo en los ejemplos de rules_cc.

Cómo implementar reglas de Starlark que dependan de reglas C++ o de las que puedan depender las reglas C++

La mayoría de las reglas C++ proporcionan CcInfo, un proveedor que contiene CompilationContext y LinkingContext A través de ellas, es posible acceder a información como todos los encabezados transitivos o bibliotecas para vincular. Desde CcInfo y desde CcToolchainInfo personalizados Las reglas de Starlark deberían poder obtener toda la información que necesitan.

Si una regla de Starlark personalizada proporciona CcInfo, es una señal para las reglas de C++ que también pueden confiar en él. Sin embargo, ten cuidado: si solo necesitas propagar CcInfo a través del gráfico hasta la regla binaria que luego lo usa; une CcInfo en otro proveedor. Por ejemplo, si la regla java_library quisiera para propagar dependencias nativas hasta java_binary, no debería proporcionar CcInfo directamente (cc_binary según java_library no tiene sentido) debe encapsularla, por ejemplo, JavaCcInfo.

Puedes encontrar un ejemplo funcional completo en los ejemplos de rules_cc.

Reutiliza la lógica y las acciones de las reglas de C++

Aún no es estable; Esta sección se actualizará cuando la API se estabilice. Seguir #4570 para actualizar información.