CMakeLists.txt 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. find_package(Doxygen QUIET)
  2. if (PICO_SDK_TOP_LEVEL_PROJECT AND ${DOXYGEN_FOUND})
  3. set(PICO_BUILD_DOCS_DEFAULT 1)
  4. endif()
  5. option(PICO_BUILD_DOCS "Build HTML Doxygen docs" ${PICO_BUILD_DOCS_DEFAULT})
  6. if (DEFINED ENV{PICO_EXAMPLES_PATH} AND NOT PICO_EXAMPLES_PATH)
  7. set(PICO_EXAMPLES_PATH $ENV{PICO_EXAMPLES_PATH})
  8. message("Using PICO_EXAMPLES_PATH from environment ('${PICO_EXAMPLES_PATH}')")
  9. endif()
  10. if(PICO_BUILD_DOCS)
  11. if(NOT DOXYGEN_FOUND)
  12. message(FATAL_ERROR "Doxygen is needed to build the documentation.")
  13. endif()
  14. include(ExternalProject)
  15. if(PICO_EXAMPLES_PATH)
  16. get_filename_component(PICO_EXAMPLES_PATH "${PICO_EXAMPLES_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
  17. if (EXISTS ${PICO_EXAMPLES_PATH})
  18. message("Documentation example code will come from ${PICO_EXAMPLES_PATH}")
  19. else()
  20. message(WARNING "Documentation example code configured to come from ${PICO_EXAMPLES_PATH}, but that path does not exist")
  21. endif()
  22. add_custom_target(doc-pico-examples)
  23. else()
  24. ExternalProject_Add(doc-pico-examples
  25. GIT_REPOSITORY https://github.com/raspberrypi/pico-examples
  26. GIT_TAG master
  27. CONFIGURE_COMMAND ""
  28. BUILD_COMMAND ""
  29. INSTALL_COMMAND ""
  30. )
  31. ExternalProject_Get_property(doc-pico-examples SOURCE_DIR)
  32. ExternalProject_Get_property(doc-pico-examples GIT_REPOSITORY)
  33. ExternalProject_Get_property(doc-pico-examples GIT_TAG)
  34. set(PICO_EXAMPLES_PATH ${SOURCE_DIR})
  35. message("Documentation example code will come from git repo ${GIT_REPOSITORY}, branch ${GIT_TAG}")
  36. endif()
  37. set(DOXY_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doxygen")
  38. set(DOXY_INPUT_DIRS "${PICO_DOXYGEN_PATHS}")
  39. set(DOXY_EXCLUDE_DIRS "${PICO_DOXYGEN_EXCLUDE_PATHS}")
  40. set(DOXY_EXAMPLE_DIR "${PICO_EXAMPLES_PATH}")
  41. set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
  42. set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
  43. configure_file(${doxyfile_in} ${doxyfile} @ONLY)
  44. add_custom_target(docs
  45. COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
  46. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  47. COMMENT "Generating API documentation with Doxygen"
  48. VERBATIM)
  49. add_dependencies(docs doc-pico-examples)
  50. endif()