1find_package(Doxygen QUIET) 2if (PICO_SDK_TOP_LEVEL_PROJECT AND ${DOXYGEN_FOUND}) 3 set(PICO_BUILD_DOCS_DEFAULT 1) 4endif() 5option(PICO_BUILD_DOCS "Build HTML Doxygen docs" ${PICO_BUILD_DOCS_DEFAULT}) 6 7if (DEFINED ENV{PICO_EXAMPLES_PATH} AND NOT PICO_EXAMPLES_PATH) 8 set(PICO_EXAMPLES_PATH $ENV{PICO_EXAMPLES_PATH}) 9 message("Using PICO_EXAMPLES_PATH from environment ('${PICO_EXAMPLES_PATH}')") 10endif() 11 12if(PICO_BUILD_DOCS) 13 if(NOT DOXYGEN_FOUND) 14 message(FATAL_ERROR "Doxygen is needed to build the documentation.") 15 endif() 16 17 include(ExternalProject) 18 19 if(PICO_EXAMPLES_PATH) 20 get_filename_component(PICO_EXAMPLES_PATH "${PICO_EXAMPLES_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") 21 if (EXISTS ${PICO_EXAMPLES_PATH}) 22 message("Documentation example code will come from ${PICO_EXAMPLES_PATH}") 23 else() 24 message(WARNING "Documentation example code configured to come from ${PICO_EXAMPLES_PATH}, but that path does not exist") 25 endif() 26 add_custom_target(doc-pico-examples) 27 else() 28 ExternalProject_Add(doc-pico-examples 29 GIT_REPOSITORY https://github.com/raspberrypi/pico-examples 30 GIT_TAG master 31 CONFIGURE_COMMAND "" 32 BUILD_COMMAND "" 33 INSTALL_COMMAND "" 34 ) 35 ExternalProject_Get_property(doc-pico-examples SOURCE_DIR) 36 ExternalProject_Get_property(doc-pico-examples GIT_REPOSITORY) 37 ExternalProject_Get_property(doc-pico-examples GIT_TAG) 38 set(PICO_EXAMPLES_PATH ${SOURCE_DIR}) 39 message("Documentation example code will come from git repo ${GIT_REPOSITORY}, branch ${GIT_TAG}") 40 endif() 41 42 set(DOXY_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doxygen") 43 string(REPLACE ";" " " DOXY_INPUT_DIRS "${PICO_DOXYGEN_PATHS}") 44 string(REPLACE ";" " " DOXY_EXCLUDE_DIRS "${PICO_DOXYGEN_EXCLUDE_PATHS}") 45 string(REPLACE ";" " " DOXY_PREDEFINED "${PICO_DOXYGEN_PRE_DEFINES}") 46 string(REPLACE ";" " " DOXY_ENABLED_SECTIONS "${PICO_DOXYGEN_ENABLED_SECTIONS}") 47 set(DOXY_EXAMPLE_DIR "${PICO_EXAMPLES_PATH}") 48 # auto genereate additional section enables from library paths 49 foreach (DIR IN LISTS PICO_DOXYGEN_PATHS) 50 get_filename_component(NAME "${DIR}" NAME) 51 if (NOT DIR STREQUAL "src") 52 set(DOXY_ENABLED_SECTIONS "${DOXY_ENABLED_SECTIONS} ${NAME}") 53 endif() 54 endforeach () 55 set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in) 56 set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) 57 58 if (PICO_PLATFORM STREQUAL "rp2040") 59 set(PICO_DOXYGEN_TAG "(RP2040)") 60 elseif (PICO_PLATFORM STREQUAL "rp2350-arm-s" OR PICO_PLATFORM STREQUAL "rp2350-riscv") 61 set(PICO_DOXYGEN_TAG "(RP2350)") 62 endif() 63 configure_file(${doxyfile_in} ${doxyfile} @ONLY) 64 65 add_custom_target(docs 66 COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile} 67 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 68 COMMENT "Generating API documentation with Doxygen" 69 VERBATIM) 70 71 add_dependencies(docs doc-pico-examples) 72endif() 73