pw_build: Compile requirements for Python venvs

This change introduces a pip-tools workflow for compiling Python
package requirements and constraints for a pw_python_venv. This
produces a single requirements.txt file for installing all necessary
dependencies.

Using pip-tools enables a few additional features added in this CL:

- Adding hashes to the requirements.txt for package verification.
- A new optional GN subtarget for pw_python_venvs to download Python
  packages locally.
- The pw_python_zip_with_setup template now takes a venv option and
  will include third party python packages in the zip output. This
  allows for fully offline installs of distributable bundles.

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