pw_protobuf: Put codegen in a ::pwpb suffix namespace

The namespace suffix is applied at the package level, as specified in
the originating .proto file.

This change is mostly in order to avoid clashing with code generated by
the stock C++ representation outputted by protoc. This is useful, for
example, for projects that would like to use the stock C++ proto library
for additional tests, but which need to use pw_protobuf due to needs of
embedded targets.

For now, this change is set up in a way so that it is, by default,
backwards compatible with existing code. A flag has been added to the
plugin to opt out of legacy behaviour, but has not been implemented in
any rules that invoke the Pigweed proto compiler plugin.

Because of limitations with the current proto plugin implementation,
some external identifiers (references to things in other .proto files,
typically) are not parsed with a package annotation, and so we are
unable to codegen the ::pwpb suffix in the correct place. For now, I've
introduced an auxiliary namespace (discussed with hepler@google.com,
seems like the best fast workaround).

In the long term, potentially we can coax the plugin to traverse the
build graph better. (Package or namespace overrides are supported for
Java / Obj-C / C#, so presumably some mechanism is available.)

b/250945489

Change-Id: Ic1fae107063ec75d81da34baa89be61f66d4f94d
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/117934
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Anqi Dong <anqid@google.com>
4 files changed
tree: d44418f9485050b31792c59977af3f63362dc0a2
  1. .allstar/
  2. .vscode/
  3. build_overrides/
  4. docker/
  5. docs/
  6. pw_allocator/
  7. pw_analog/
  8. pw_android_toolchain/
  9. pw_arduino_build/
  10. pw_assert/
  11. pw_assert_basic/
  12. pw_assert_log/
  13. pw_assert_tokenized/
  14. pw_assert_zephyr/
  15. pw_base64/
  16. pw_bloat/
  17. pw_blob_store/
  18. pw_bluetooth/
  19. pw_bluetooth_hci/
  20. pw_boot/
  21. pw_boot_cortex_m/
  22. pw_build/
  23. pw_build_info/
  24. pw_build_mcuxpresso/
  25. pw_bytes/
  26. pw_checksum/
  27. pw_chrono/
  28. pw_chrono_embos/
  29. pw_chrono_freertos/
  30. pw_chrono_stl/
  31. pw_chrono_threadx/
  32. pw_chrono_zephyr/
  33. pw_cli/
  34. pw_compilation_testing/
  35. pw_console/
  36. pw_containers/
  37. pw_cpu_exception/
  38. pw_cpu_exception_cortex_m/
  39. pw_crypto/
  40. pw_digital_io/
  41. pw_docgen/
  42. pw_doctor/
  43. pw_env_setup/
  44. pw_file/
  45. pw_function/
  46. pw_fuzzer/
  47. pw_hdlc/
  48. pw_hex_dump/
  49. pw_i2c/
  50. pw_i2c_mcuxpresso/
  51. pw_ide/
  52. pw_interrupt/
  53. pw_interrupt_cortex_m/
  54. pw_interrupt_zephyr/
  55. pw_intrusive_ptr/
  56. pw_kvs/
  57. pw_libc/
  58. pw_log/
  59. pw_log_android/
  60. pw_log_basic/
  61. pw_log_null/
  62. pw_log_rpc/
  63. pw_log_string/
  64. pw_log_tokenized/
  65. pw_log_zephyr/
  66. pw_malloc/
  67. pw_malloc_freelist/
  68. pw_metric/
  69. pw_minimal_cpp_stdlib/
  70. pw_module/
  71. pw_multisink/
  72. pw_package/
  73. pw_perf_test/
  74. pw_persistent_ram/
  75. pw_polyfill/
  76. pw_preprocessor/
  77. pw_presubmit/
  78. pw_protobuf/
  79. pw_protobuf_compiler/
  80. pw_random/
  81. pw_result/
  82. pw_ring_buffer/
  83. pw_router/
  84. pw_rpc/
  85. pw_rust/
  86. pw_snapshot/
  87. pw_software_update/
  88. pw_span/
  89. pw_spi/
  90. pw_status/
  91. pw_stm32cube_build/
  92. pw_stream/
  93. pw_string/
  94. pw_symbolizer/
  95. pw_sync/
  96. pw_sync_baremetal/
  97. pw_sync_embos/
  98. pw_sync_freertos/
  99. pw_sync_stl/
  100. pw_sync_threadx/
  101. pw_sync_zephyr/
  102. pw_sys_io/
  103. pw_sys_io_arduino/
  104. pw_sys_io_baremetal_lm3s6965evb/
  105. pw_sys_io_baremetal_stm32f429/
  106. pw_sys_io_emcraft_sf2/
  107. pw_sys_io_mcuxpresso/
  108. pw_sys_io_stdio/
  109. pw_sys_io_stm32cube/
  110. pw_sys_io_zephyr/
  111. pw_system/
  112. pw_target_runner/
  113. pw_thread/
  114. pw_thread_embos/
  115. pw_thread_freertos/
  116. pw_thread_stl/
  117. pw_thread_threadx/
  118. pw_tls_client/
  119. pw_tls_client_boringssl/
  120. pw_tls_client_mbedtls/
  121. pw_tokenizer/
  122. pw_tool/
  123. pw_toolchain/
  124. pw_trace/
  125. pw_trace_tokenized/
  126. pw_transfer/
  127. pw_unit_test/
  128. pw_varint/
  129. pw_watch/
  130. pw_web/
  131. pw_work_queue/
  132. targets/
  133. third_party/
  134. ts/
  135. zephyr/
  136. .bazelignore
  137. .bazelrc
  138. .clang-format
  139. .clang-tidy
  140. .eslintrc.json
  141. .gitattributes
  142. .gitignore
  143. .gn
  144. .mypy.ini
  145. .prettierrc.js
  146. .pw_ide.yaml
  147. .pylintrc
  148. activate.bat
  149. Android.bp
  150. AUTHORS
  151. bootstrap.bat
  152. bootstrap.sh
  153. BUILD.bazel
  154. BUILD.gn
  155. BUILDCONFIG.gn
  156. CMakeLists.txt
  157. jest.config.ts
  158. Kconfig.zephyr
  159. LICENSE
  160. modules.gni
  161. OWNERS
  162. package-lock.json
  163. package.json
  164. PIGWEED_MODULES
  165. PW_PLUGINS
  166. README.md
  167. rollup.config.js
  168. tsconfig.json
  169. WORKSPACE
README.md

Pigweed

Pigweed is an open source collection of embedded-targeted libraries–or as we like to call them, modules. These modules are building blocks and infrastructure that enable faster and more reliable development on small-footprint MMU-less 32-bit microcontrollers like the STMicroelectronics STM32L452 or the Nordic nRF52832.

For more information please see our website: https://pigweed.dev/.

Links