xref: /aosp_15_r20/external/pigweed/docs/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1# Copyright 2019 The Pigweed Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4# use this file except in compliance with the License. You may obtain a copy of
5# the License at
6#
7#     https://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations under
13# the License.
14
15import("//build_overrides/pigweed.gni")
16
17import("$dir_pw_build/python.gni")
18import("$dir_pw_build/python_action.gni")
19import("$dir_pw_docgen/docs.gni")
20
21pw_doc_group("static_assets") {
22  inputs = [
23    "_static/css/pigweed.css",
24    "_static/js/changelog.js",
25    "_static/js/pigweed.js",
26    "_static/pw_logo.ico",
27    "_static/pw_logo.svg",
28  ]
29}
30
31# Note: These may be useful for downstream projects, which is why they are
32# split out from the overall docgen target below.
33pw_doc_group("core_docs") {
34  inputs = [
35    "$dir_pigweed/Kconfig.zephyr",
36    "$dir_pw_async2/examples/coro_blinky_loop.cc",
37    "$dir_pw_async2/public/pw_async2/coro.h",
38    "$dir_pw_build/pigweed.bazelrc",
39    "$dir_pw_build/py/gn_tests/BUILD.gn",
40    "$dir_pw_build/py/pw_build/generate_python_wheel_cache.py",
41    "$dir_pw_build/python.gni",
42    "$dir_pw_build/python_gn_args.gni",
43    "layout/layout.html",
44    "run_doxygen.py",
45  ]
46  sources = [
47    "3p/index.rst",
48    "blog/01-kudzu.rst",
49    "blog/02-bazel-feature-flags.rst",
50    "blog/03-pigweed-sdk.rst",
51    "blog/04-fixed-point.rst",
52    "blog/05-coroutines.rst",
53    "blog/index.rst",
54    "blog/rss.xml",
55    "code_of_conduct.rst",
56    "code_reviews.rst",
57    "community/index.rst",
58    "concepts/index.rst",
59    "contributing/docs/changelog.rst",
60    "contributing/docs/guides.rst",
61    "contributing/docs/index.rst",
62    "contributing/docs/modules.rst",
63    "contributing/index.rst",
64    "embedded_cpp_guide.rst",
65    "facades.rst",
66    "faq.rst",
67    "get_started/bazel.rst",
68    "get_started/bazel_integration.rst",
69    "get_started/first_time_setup.rst",
70    "get_started/github_actions.rst",
71    "get_started/index.rst",
72    "get_started/install_bazel.rst",
73    "get_started/upstream.rst",
74    "get_started/zephyr.rst",
75    "glossary.rst",
76    "infra/ci_cq_intro.rst",
77    "infra/index.rst",
78    "infra/rollers.rst",
79    "mission.rst",
80    "module_structure.rst",
81    "os/index.rst",
82    "os/zephyr/index.rst",
83    "os/zephyr/kconfig.rst",
84    "overview.rst",
85    "showcases/index.rst",
86    "showcases/sense/index.rst",
87    "showcases/sense/tutorial/automate.rst",
88    "showcases/sense/tutorial/bazel_cloud.rst",
89    "showcases/sense/tutorial/build.rst",
90    "showcases/sense/tutorial/code_intelligence.rst",
91    "showcases/sense/tutorial/crash_handler.rst",
92    "showcases/sense/tutorial/device_tests.rst",
93    "showcases/sense/tutorial/explore.rst",
94    "showcases/sense/tutorial/factory.rst",
95    "showcases/sense/tutorial/flash.rst",
96    "showcases/sense/tutorial/host_sim.rst",
97    "showcases/sense/tutorial/host_tests.rst",
98    "showcases/sense/tutorial/index.rst",
99    "showcases/sense/tutorial/outro.rst",
100    "showcases/sense/tutorial/production.rst",
101    "showcases/sense/tutorial/rpc.rst",
102    "showcases/sense/tutorial/setup.rst",
103    "showcases/sense/tutorial/web.rst",
104    "size_optimizations.rst",
105    "style/cli.rst",
106    "style/commit_message.rst",
107    "style/cpp.rst",
108    "style/doxygen.rst",
109    "style/protobuf.rst",
110    "style/rest.rst",
111    "style/writing.rst",
112    "style_guide.rst",
113  ]
114}
115
116# Documentation for upstream Pigweed targets.
117group("target_docs") {
118  deps = [
119    "$dir_pigweed/targets/android:target_docs",
120    "$dir_pigweed/targets/apollo4:target_docs",
121    "$dir_pigweed/targets/apollo4_pw_system:target_docs",
122    "$dir_pigweed/targets/arduino:target_docs",
123    "$dir_pigweed/targets/docs:target_docs",
124    "$dir_pigweed/targets/emcraft_sf2_som:docs",
125    "$dir_pigweed/targets/host:target_docs",
126    "$dir_pigweed/targets/host_device_simulator:target_docs",
127    "$dir_pigweed/targets/lm3s6965evb_qemu:target_docs",
128    "$dir_pigweed/targets/mimxrt595_evk:target_docs",
129    "$dir_pigweed/targets/rp2040:target_docs",
130    "$dir_pigweed/targets/stm32f429i_disc1:target_docs",
131    "$dir_pigweed/targets/stm32f429i_disc1_stm32cube:target_docs",
132  ]
133}
134
135group("module_docs") {
136  deps = pw_module_docs
137}
138
139group("third_party_docs") {
140  deps = [
141    "$dir_pigweed/third_party/abseil-cpp:docs",
142    "$dir_pigweed/third_party/boringssl:docs",
143    "$dir_pigweed/third_party/emboss:docs",
144    "$dir_pigweed/third_party/freertos:docs",
145    "$dir_pigweed/third_party/fuchsia:docs",
146    "$dir_pigweed/third_party/fuzztest:docs",
147    "$dir_pigweed/third_party/googletest:docs",
148    "$dir_pigweed/third_party/nanopb:docs",
149    "$dir_pigweed/third_party/perfetto:docs",
150    "$dir_pigweed/third_party/re2:docs",
151    "$dir_pigweed/third_party/tinyusb:docs",
152  ]
153}
154
155# All sources with doxygen comment blocks.
156_doxygen_input_files = [  # keep-sorted: start
157  "$dir_pw_alignment/public/pw_alignment/alignment.h",
158  "$dir_pw_allocator/block/public/pw_allocator/block/alignable.h",
159  "$dir_pw_allocator/block/public/pw_allocator/block/allocatable.h",
160  "$dir_pw_allocator/block/public/pw_allocator/block/basic.h",
161  "$dir_pw_allocator/block/public/pw_allocator/block/contiguous.h",
162  "$dir_pw_allocator/block/public/pw_allocator/block/detailed_block.h",
163  "$dir_pw_allocator/block/public/pw_allocator/block/iterable.h",
164  "$dir_pw_allocator/block/public/pw_allocator/block/poisonable.h",
165  "$dir_pw_allocator/block/public/pw_allocator/block/result.h",
166  "$dir_pw_allocator/block/public/pw_allocator/block/with_layout.h",
167  "$dir_pw_allocator/bucket/public/pw_allocator/bucket/fast_sorted.h",
168  "$dir_pw_allocator/bucket/public/pw_allocator/bucket/sequenced.h",
169  "$dir_pw_allocator/bucket/public/pw_allocator/bucket/sorted.h",
170  "$dir_pw_allocator/bucket/public/pw_allocator/bucket/unordered.h",
171  "$dir_pw_allocator/public/pw_allocator/allocator.h",
172  "$dir_pw_allocator/public/pw_allocator/allocator_as_pool.h",
173  "$dir_pw_allocator/public/pw_allocator/best_fit.h",
174  "$dir_pw_allocator/public/pw_allocator/block_allocator.h",
175  "$dir_pw_allocator/public/pw_allocator/bucket_allocator.h",
176  "$dir_pw_allocator/public/pw_allocator/buddy_allocator.h",
177  "$dir_pw_allocator/public/pw_allocator/buffer.h",
178  "$dir_pw_allocator/public/pw_allocator/bump_allocator.h",
179  "$dir_pw_allocator/public/pw_allocator/capability.h",
180  "$dir_pw_allocator/public/pw_allocator/chunk_pool.h",
181  "$dir_pw_allocator/public/pw_allocator/config.h",
182  "$dir_pw_allocator/public/pw_allocator/deallocator.h",
183  "$dir_pw_allocator/public/pw_allocator/fallback_allocator.h",
184  "$dir_pw_allocator/public/pw_allocator/first_fit.h",
185  "$dir_pw_allocator/public/pw_allocator/fragmentation.h",
186  "$dir_pw_allocator/public/pw_allocator/fuzzing.h",
187  "$dir_pw_allocator/public/pw_allocator/layout.h",
188  "$dir_pw_allocator/public/pw_allocator/libc_allocator.h",
189  "$dir_pw_allocator/public/pw_allocator/metrics.h",
190  "$dir_pw_allocator/public/pw_allocator/null_allocator.h",
191  "$dir_pw_allocator/public/pw_allocator/pmr_allocator.h",
192  "$dir_pw_allocator/public/pw_allocator/pool.h",
193  "$dir_pw_allocator/public/pw_allocator/size_reporter.h",
194  "$dir_pw_allocator/public/pw_allocator/synchronized_allocator.h",
195  "$dir_pw_allocator/public/pw_allocator/test_harness.h",
196  "$dir_pw_allocator/public/pw_allocator/testing.h",
197  "$dir_pw_allocator/public/pw_allocator/tracking_allocator.h",
198  "$dir_pw_allocator/public/pw_allocator/typed_pool.h",
199  "$dir_pw_allocator/public/pw_allocator/unique_ptr.h",
200  "$dir_pw_allocator/public/pw_allocator/worst_fit.h",
201  "$dir_pw_analog/public/pw_analog/analog_input.h",
202  "$dir_pw_analog/public/pw_analog/microvolt_input.h",
203  "$dir_pw_async/public/pw_async/context.h",
204  "$dir_pw_async/public/pw_async/dispatcher.h",
205  "$dir_pw_async/public/pw_async/fake_dispatcher_fixture.h",
206  "$dir_pw_async/public/pw_async/function_dispatcher.h",
207  "$dir_pw_async/public/pw_async/heap_dispatcher.h",
208  "$dir_pw_async/public/pw_async/task.h",
209  "$dir_pw_async/public/pw_async/task_function.h",
210  "$dir_pw_async2/public/pw_async2/allocate_task.h",
211  "$dir_pw_async2/public/pw_async2/coro.h",
212  "$dir_pw_async2/public/pw_async2/coro_or_else_task.h",
213  "$dir_pw_async2/public/pw_async2/dispatcher.h",
214  "$dir_pw_async2/public/pw_async2/dispatcher_base.h",
215  "$dir_pw_async2/public/pw_async2/enqueue_heap_func.h",
216  "$dir_pw_async2/public/pw_async2/join.h",
217  "$dir_pw_async2/public/pw_async2/once_sender.h",
218  "$dir_pw_async2/public/pw_async2/pend_func_task.h",
219  "$dir_pw_async2/public/pw_async2/pendable_as_task.h",
220  "$dir_pw_async2/public/pw_async2/poll.h",
221  "$dir_pw_async2/public/pw_async2/simulated_time_provider.h",
222  "$dir_pw_async2/public/pw_async2/system_time_provider.h",
223  "$dir_pw_async2/public/pw_async2/time_provider.h",
224  "$dir_pw_async2_basic/public_overrides/pw_async2/dispatcher_native.h",
225  "$dir_pw_async_basic/public/pw_async_basic/dispatcher.h",
226  "$dir_pw_base64/public/pw_base64/base64.h",
227  "$dir_pw_bluetooth/public/pw_bluetooth/controller2.h",
228  "$dir_pw_bluetooth/public/pw_bluetooth/gatt/client2.h",
229  "$dir_pw_bluetooth/public/pw_bluetooth/gatt/server2.h",
230  "$dir_pw_bluetooth/public/pw_bluetooth/low_energy/central2.h",
231  "$dir_pw_bluetooth/public/pw_bluetooth/low_energy/channel.h",
232  "$dir_pw_bluetooth/public/pw_bluetooth/low_energy/connection2.h",
233  "$dir_pw_bluetooth/public/pw_bluetooth/low_energy/peripheral2.h",
234  "$dir_pw_bluetooth_proxy/public/pw_bluetooth_proxy/h4_packet.h",
235  "$dir_pw_bluetooth_proxy/public/pw_bluetooth_proxy/proxy_host.h",
236  "$dir_pw_bluetooth_sapphire/public/pw_bluetooth_sapphire/peripheral.h",
237  "$dir_pw_build/public/pw_build/linker_symbol.h",
238  "$dir_pw_build/public/pw_build/must_place.ld.h",
239  "$dir_pw_bytes/public/pw_bytes/alignment.h",
240  "$dir_pw_bytes/public/pw_bytes/bit.h",
241  "$dir_pw_bytes/public/pw_bytes/byte_builder.h",
242  "$dir_pw_bytes/public/pw_bytes/packed_ptr.h",
243  "$dir_pw_channel/public/pw_channel/channel.h",
244  "$dir_pw_channel/public/pw_channel/epoll_channel.h",
245  "$dir_pw_channel/public/pw_channel/forwarding_channel.h",
246  "$dir_pw_channel/public/pw_channel/loopback_channel.h",
247  "$dir_pw_channel/public/pw_channel/rp2_stdio_channel.h",
248  "$dir_pw_channel/public/pw_channel/stream_channel.h",
249  "$dir_pw_chre/public/pw_chre/chre.h",
250  "$dir_pw_chre/public/pw_chre/host_link.h",
251  "$dir_pw_chrono/public/pw_chrono/simulated_system_clock.h",
252  "$dir_pw_chrono/public/pw_chrono/system_clock.h",
253  "$dir_pw_chrono/public/pw_chrono/system_timer.h",
254  "$dir_pw_chrono/public/pw_chrono/virtual_clock.h",
255  "$dir_pw_clock_tree/public/pw_clock_tree/clock_tree.h",
256  "$dir_pw_clock_tree_mcuxpresso/public/pw_clock_tree_mcuxpresso/clock_tree.h",
257  "$dir_pw_containers/public/pw_containers/filtered_view.h",
258  "$dir_pw_containers/public/pw_containers/inline_deque.h",
259  "$dir_pw_containers/public/pw_containers/inline_queue.h",
260  "$dir_pw_containers/public/pw_containers/inline_var_len_entry_queue.h",
261  "$dir_pw_containers/public/pw_containers/internal/aa_tree.h",
262  "$dir_pw_containers/public/pw_containers/internal/intrusive_list.h",
263  "$dir_pw_containers/public/pw_containers/intrusive_forward_list.h",
264  "$dir_pw_containers/public/pw_containers/intrusive_list.h",
265  "$dir_pw_containers/public/pw_containers/intrusive_map.h",
266  "$dir_pw_containers/public/pw_containers/intrusive_multimap.h",
267  "$dir_pw_containers/public/pw_containers/intrusive_multiset.h",
268  "$dir_pw_containers/public/pw_containers/intrusive_set.h",
269  "$dir_pw_crypto/public/pw_crypto/ecdsa.h",
270  "$dir_pw_crypto/public/pw_crypto/sha256.h",
271  "$dir_pw_digital_io/public/pw_digital_io/digital_io.h",
272  "$dir_pw_digital_io/public/pw_digital_io/digital_io_mock.h",
273  "$dir_pw_display/public/pw_display/color.h",
274  "$dir_pw_elf/public/pw_elf/reader.h",
275  "$dir_pw_function/public/pw_function/function.h",
276  "$dir_pw_function/public/pw_function/pointer.h",
277  "$dir_pw_function/public/pw_function/scope_guard.h",
278  "$dir_pw_hdlc/public/pw_hdlc/decoder.h",
279  "$dir_pw_hdlc/public/pw_hdlc/encoder.h",
280  "$dir_pw_hdlc/public/pw_hdlc/router.h",
281  "$dir_pw_hex_dump/public/pw_hex_dump/hex_dump.h",
282  "$dir_pw_hex_dump/public/pw_hex_dump/log_bytes.h",
283  "$dir_pw_i2c/public/pw_i2c/address.h",
284  "$dir_pw_i2c/public/pw_i2c/device.h",
285  "$dir_pw_i2c/public/pw_i2c/i2c_service.h",
286  "$dir_pw_i2c/public/pw_i2c/initiator.h",
287  "$dir_pw_i2c/public/pw_i2c/initiator_gmock.h",
288  "$dir_pw_i2c/public/pw_i2c/initiator_mock.h",
289  "$dir_pw_i2c/public/pw_i2c/register_device.h",
290  "$dir_pw_i2c_linux/public/pw_i2c_linux/initiator.h",
291  "$dir_pw_interrupt/public/pw_interrupt/context.h",
292  "$dir_pw_json/public/pw_json/builder.h",
293  "$dir_pw_kvs/public/pw_kvs/key_value_store.h",
294  "$dir_pw_kvs/pw_kvs_private/config.h",
295  "$dir_pw_log/public/pw_log/tokenized_args.h",
296  "$dir_pw_log_string/public/pw_log_string/handler.h",
297  "$dir_pw_log_tokenized/public/pw_log_tokenized/base64.h",
298  "$dir_pw_log_tokenized/public/pw_log_tokenized/config.h",
299  "$dir_pw_log_tokenized/public/pw_log_tokenized/handler.h",
300  "$dir_pw_log_tokenized/public/pw_log_tokenized/metadata.h",
301  "$dir_pw_malloc/public/pw_malloc/config.h",
302  "$dir_pw_malloc/public/pw_malloc/malloc.h",
303  "$dir_pw_multibuf/public/pw_multibuf/allocator.h",
304  "$dir_pw_multibuf/public/pw_multibuf/chunk.h",
305  "$dir_pw_multibuf/public/pw_multibuf/from_span.h",
306  "$dir_pw_multibuf/public/pw_multibuf/header_chunk_region_tracker.h",
307  "$dir_pw_multibuf/public/pw_multibuf/multibuf.h",
308  "$dir_pw_multibuf/public/pw_multibuf/simple_allocator.h",
309  "$dir_pw_multibuf/public/pw_multibuf/simple_allocator_for_test.h",
310  "$dir_pw_multibuf/public/pw_multibuf/single_chunk_region_tracker.h",
311  "$dir_pw_multibuf/public/pw_multibuf/stream.h",
312  "$dir_pw_numeric/public/pw_numeric/integer_division.h",
313  "$dir_pw_perf_test/public/pw_perf_test/event_handler.h",
314  "$dir_pw_perf_test/public/pw_perf_test/perf_test.h",
315  "$dir_pw_polyfill/public/pw_polyfill/language_feature_macros.h",
316  "$dir_pw_polyfill/public/pw_polyfill/standard.h",
317  "$dir_pw_preprocessor/public/pw_preprocessor/apply.h",
318  "$dir_pw_preprocessor/public/pw_preprocessor/compiler.h",
319  "$dir_pw_protobuf/public/pw_protobuf/find.h",
320  "$dir_pw_random/public/pw_random/random.h",
321  "$dir_pw_random/public/pw_random/xor_shift.h",
322  "$dir_pw_rpc/public/pw_rpc/channel.h",
323  "$dir_pw_rpc/public/pw_rpc/internal/config.h",
324  "$dir_pw_rpc/public/pw_rpc/synchronous_call.h",
325  "$dir_pw_span/public/pw_span/internal/config.h",
326  "$dir_pw_spi/public/pw_spi/chip_selector.h",
327  "$dir_pw_spi/public/pw_spi/chip_selector_digital_out.h",
328  "$dir_pw_status/public/pw_status/status.h",
329  "$dir_pw_status/public/pw_status/status_with_size.h",
330  "$dir_pw_status/public/pw_status/try.h",
331  "$dir_pw_stream/public/pw_stream/stream.h",
332  "$dir_pw_stream_uart_linux/public/pw_stream_uart_linux/stream.h",
333  "$dir_pw_string/public/pw_string/format.h",
334  "$dir_pw_string/public/pw_string/string.h",
335  "$dir_pw_string/public/pw_string/string_builder.h",
336  "$dir_pw_string/public/pw_string/utf_codecs.h",
337  "$dir_pw_string/public/pw_string/util.h",
338  "$dir_pw_sync/public/pw_sync/binary_semaphore.h",
339  "$dir_pw_sync/public/pw_sync/borrow.h",
340  "$dir_pw_sync/public/pw_sync/counting_semaphore.h",
341  "$dir_pw_sync/public/pw_sync/inline_borrowable.h",
342  "$dir_pw_sync/public/pw_sync/interrupt_spin_lock.h",
343  "$dir_pw_sync/public/pw_sync/lock_annotations.h",
344  "$dir_pw_sync/public/pw_sync/mutex.h",
345  "$dir_pw_sync/public/pw_sync/thread_notification.h",
346  "$dir_pw_sync/public/pw_sync/timed_mutex.h",
347  "$dir_pw_sync/public/pw_sync/timed_thread_notification.h",
348  "$dir_pw_sync/public/pw_sync/virtual_basic_lockable.h",
349  "$dir_pw_sys_io/public/pw_sys_io/sys_io.h",
350  "$dir_pw_system/public/pw_system/system.h",
351  "$dir_pw_third_party/freertos/pw_assert_stack_overflow_hook.cc",
352  "$dir_pw_third_party/freertos/static_task_allocation.cc",
353  "$dir_pw_thread/public/pw_thread/options.h",
354  "$dir_pw_thread/public/pw_thread/test_thread_context.h",
355  "$dir_pw_thread/public/pw_thread/thread.h",
356  "$dir_pw_tokenizer/public/pw_tokenizer/config.h",
357  "$dir_pw_tokenizer/public/pw_tokenizer/detokenize.h",
358  "$dir_pw_tokenizer/public/pw_tokenizer/encode_args.h",
359  "$dir_pw_tokenizer/public/pw_tokenizer/enum.h",
360  "$dir_pw_tokenizer/public/pw_tokenizer/nested_tokenization.h",
361  "$dir_pw_tokenizer/public/pw_tokenizer/token_database.h",
362  "$dir_pw_tokenizer/public/pw_tokenizer/tokenize.h",
363  "$dir_pw_toolchain/public/pw_toolchain/no_destructor.h",
364  "$dir_pw_transfer/public/pw_transfer/atomic_file_transfer_handler.h",
365  "$dir_pw_uart/public/pw_uart/blocking_adapter.h",
366  "$dir_pw_uart/public/pw_uart/stream.h",
367  "$dir_pw_uart/public/pw_uart/uart.h",
368  "$dir_pw_uart/public/pw_uart/uart_base.h",
369  "$dir_pw_uart/public/pw_uart/uart_non_blocking.h",
370  "$dir_pw_unit_test/light_public_overrides/pw_unit_test/framework_backend.h",
371  "$dir_pw_unit_test/public/pw_unit_test/config.h",
372  "$dir_pw_unit_test/public/pw_unit_test/event_handler.h",
373  "$dir_pw_unit_test/public/pw_unit_test/googletest_handler_adapter.h",
374  "$dir_pw_unit_test/public/pw_unit_test/googletest_style_event_handler.h",
375  "$dir_pw_unit_test/public/pw_unit_test/logging_event_handler.h",
376  "$dir_pw_unit_test/public/pw_unit_test/multi_event_handler.h",
377  "$dir_pw_unit_test/public/pw_unit_test/printf_event_handler.h",
378  "$dir_pw_unit_test/public/pw_unit_test/simple_printing_event_handler.h",
379  "$dir_pw_unit_test/public/pw_unit_test/static_library_support.h",
380  "$dir_pw_unit_test/public/pw_unit_test/status_macros.h",
381  "$dir_pw_unit_test/public/pw_unit_test/test_record_event_handler.h",
382  "$dir_pw_varint/public/pw_varint/stream.h",
383  "$dir_pw_varint/public/pw_varint/varint.h",
384  "$dir_pw_work_queue/public/pw_work_queue/work_queue.h",
385]  # keep-sorted: end
386
387pw_python_action("generate_doxygen") {
388  _output_dir = "docs/doxygen"
389  script = "run_doxygen.py"
390  inputs = [
391    "//PIGWEED_MODULES",
392    "Doxyfile",
393  ]
394  inputs += _doxygen_input_files
395  args = [
396    "--gn-root",
397    rebase_path("//", root_build_dir),
398    "--pigweed-modules-file",
399    rebase_path("//PIGWEED_MODULES", root_build_dir),
400    "--output-dir",
401    _output_dir,
402    "--doxygen-config",
403    rebase_path("Doxyfile", root_build_dir),
404    "--include-paths",
405  ]
406  args += rebase_path(_doxygen_input_files, root_build_dir)
407  outputs = [
408    "$root_build_dir/$_output_dir/html/index.html",
409    "$root_build_dir/$_output_dir/xml/index.xml",
410  ]
411}
412
413pw_doc_gen("docs") {
414  conf = "conf.py"
415  sources = [
416    # Note: These must use the "docs" prefix for links and image references. In
417    # contrast, the pw_doc_group above should not use the docs prefix.
418    "automated_analysis.rst",
419    "bazel_compatibility.rst",
420    "build_system.rst",
421    "changelog.rst",
422    "index.rst",
423    "modules.rst",
424    "python_build.rst",
425    "targets.rst",
426    "third_party_support.rst",
427  ]
428  output_directory = target_gen_dir
429  deps = [
430    ":core_docs",
431    ":generate_doxygen",
432    ":module_docs",
433    ":static_assets",
434    ":target_docs",
435    ":third_party_docs",
436    "$dir_pigweed/kudzu:docs",
437    "$dir_pigweed/seed:docs",
438  ]
439
440  # Extra Python deps are required to set the PYTHONPATH so
441  # automodule, autoclass or autofunction RST directives work in
442  # sphinx.
443  python_deps = [ "$dir_pw_env_setup:core_pigweed_python_packages" ]
444}
445