blob: 5cfce578a4a9e821a7cd597f38161d1af8a6cbf0 [file] [log] [blame]
Anas Nashif3ae52622019-04-06 09:08:09 -04001# SPDX-License-Identifier: Apache-2.0
2
Torsten Rasmussen1cccc8a2021-08-10 14:44:56 +02003cmake_minimum_required(VERSION 3.20.0)
Sebastian Bøe5748fe12019-01-04 09:13:07 +01004project(Zephyr-Kernel-Doc LANGUAGES)
Carles Cufiae699342018-07-09 14:12:17 +02005
Martí Bolívar523de0d2023-03-08 10:37:34 -08006set(MIN_WEST_VERSION 1.0.0)
Torsten Rasmussen604f7052021-12-17 13:15:42 +01007find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE} .. COMPONENTS doc)
Torsten Rasmussend7862cf2020-02-12 15:42:09 +01008
Torsten Rasmussend7862cf2020-02-12 15:42:09 +01009file(TO_CMAKE_PATH "${ZEPHYR_BASE}" ZEPHYR_BASE)
Carles Cufiae699342018-07-09 14:12:17 +020010message(STATUS "Zephyr base: ${ZEPHYR_BASE}")
11
Gerard Marull-Paretase5b7d3f2021-06-16 21:12:36 +020012#-------------------------------------------------------------------------------
Gerard Marull-Paretase06ebed2021-06-16 21:19:35 +020013# Options
14
Gerard Marull-Paretasd3d93d432023-06-29 10:56:18 +020015set(SPHINXOPTS "-j auto -W --keep-going -T" CACHE STRING "Default Sphinx Options")
Gerard Marull-Paretas2c89bf52023-06-29 10:49:09 +020016set(SPHINXOPTS_EXTRA "" CACHE STRING "Extra Sphinx Options (added to defaults)")
Gerard Marull-Paretas3db8d2b2021-07-15 10:22:42 +020017set(LATEXMKOPTS "-halt-on-error -no-shell-escape" CACHE STRING "Default latexmk options")
Gerard Marull-Paretas5986d882022-02-02 20:09:01 +010018set(DT_TURBO_MODE OFF CACHE BOOL "Enable DT turbo mode")
Gerard Marull-Paretase06ebed2021-06-16 21:19:35 +020019set(DOC_TAG "development" CACHE STRING "Documentation tag")
Gerard Marull-Paretas5ec89802021-06-16 23:28:55 +020020set(DTS_ROOTS "${ZEPHYR_BASE}" CACHE STRING "DT bindings root folders")
Gerard Marull-Paretase06ebed2021-06-16 21:19:35 +020021
22separate_arguments(SPHINXOPTS)
Gerard Marull-Paretas2c89bf52023-06-29 10:49:09 +020023separate_arguments(SPHINXOPTS_EXTRA)
Gerard Marull-Paretas3db8d2b2021-07-15 10:22:42 +020024separate_arguments(LATEXMKOPTS)
Gerard Marull-Paretase06ebed2021-06-16 21:19:35 +020025
26#-------------------------------------------------------------------------------
Gerard Marull-Paretase5b7d3f2021-06-16 21:12:36 +020027# Dependencies
28
Gerard Marull-Paretas41271382021-07-20 16:12:23 +020029find_package(Doxygen REQUIRED dot)
Carles Cufiae699342018-07-09 14:12:17 +020030
Gerard Marull-Paretase5b7d3f2021-06-16 21:12:36 +020031find_program(SPHINXBUILD sphinx-build)
32if(NOT SPHINXBUILD)
33 message(FATAL_ERROR "The 'sphinx-build' command was not found")
Carles Cufiae699342018-07-09 14:12:17 +020034endif()
35
Gerard Marull-Paretase5b7d3f2021-06-16 21:12:36 +020036find_package(LATEX COMPONENTS PDFLATEX)
37find_program(LATEXMK latexmk)
38if(NOT LATEX_PDFLATEX_FOUND OR NOT LATEXMK)
39 message(WARNING "LaTeX components not found. PDF build will not be available.")
40endif()
41
Gerard Marull-Paretas35f44782021-06-16 23:14:29 +020042#-------------------------------------------------------------------------------
43# Environment & Paths
44
45set(SPHINX_ENV
Gerard Marull-Paretas35f44782021-06-16 23:14:29 +020046 DOXYGEN_EXECUTABLE=${DOXYGEN_EXECUTABLE}
Gerard Marull-Paretas41271382021-07-20 16:12:23 +020047 DOT_EXECUTABLE=${DOXYGEN_DOT_EXECUTABLE}
Gerard Marull-Paretas35f44782021-06-16 23:14:29 +020048)
49
50set(DOCS_CFG_DIR ${CMAKE_CURRENT_LIST_DIR})
51set(DOCS_DOCTREE_DIR ${CMAKE_CURRENT_BINARY_DIR}/doctrees)
52set(DOCS_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR})
53set(DOCS_SRC_DIR ${CMAKE_CURRENT_BINARY_DIR}/src)
54set(DOCS_HTML_DIR ${CMAKE_CURRENT_BINARY_DIR}/html)
Gerard Marull-Paretas41566e22022-09-23 15:51:29 +020055set(DOCS_LINKCHECK_DIR ${CMAKE_CURRENT_BINARY_DIR}/linkcheck)
Gerard Marull-Paretas35f44782021-06-16 23:14:29 +020056set(DOCS_LATEX_DIR ${CMAKE_CURRENT_BINARY_DIR}/latex)
57
Fabio Baltieri838dbaa2022-04-22 23:08:22 +010058if(WIN32)
59 set(SEP $<SEMICOLON>)
60else()
61 set(SEP :)
62endif()
63
Gerard Marull-Paretas35f44782021-06-16 23:14:29 +020064#-------------------------------------------------------------------------------
65# Functions
66
67# Create a custom doc target.
68#
69# This function has the same signature as `add_custom_target()`
70#
71# The function will create two targets for the doc build system.
72# - Target 1 named: `<name>`
73# - Target 2 named: `<name>-nodeps`
74#
75# Both targets will produce same result, but target 2 must have no dependencies.
76# This is useful to, e.g. re-run the Sphinx build without dependencies such as
Gerard Marull-Paretasfc942ef2022-01-12 13:41:15 +010077# devicetree generator.
Gerard Marull-Paretas35f44782021-06-16 23:14:29 +020078#
79function(add_doc_target name)
80 add_custom_target(${name} ${ARGN})
81 add_custom_target(${name}-nodeps ${ARGN})
82endfunction()
83
Gerard Marull-Paretas8a8b58c2021-06-16 22:43:15 +020084#-------------------------------------------------------------------------------
85# Doxygen (standalone)
86
87set(DOXY_OUT ${CMAKE_CURRENT_BINARY_DIR}/doxygen)
Carles Cufie182dbc2018-07-16 19:05:05 +020088set(DOXYFILE_IN ${CMAKE_CURRENT_LIST_DIR}/zephyr.doxyfile.in)
89set(DOXYFILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/zephyr.doxyfile)
Gerard Marull-Paretasa42ee8b2021-10-03 19:32:42 +020090set(ZEPHYR_VERSION "${Zephyr_VERSION}")
Carles Cufiae699342018-07-09 14:12:17 +020091
Carles Cufie182dbc2018-07-16 19:05:05 +020092configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY)
Carles Cufiae699342018-07-09 14:12:17 +020093
Marc Herbert52842312019-02-07 13:39:59 -080094add_custom_target(
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +020095 doxygen
Gerard Marull-Paretas8a8b58c2021-06-16 22:43:15 +020096 COMMAND
97 ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT}
Gerard Marull-Paretas53b90182021-06-17 16:13:29 +020098 COMMENT "Running Doxygen..."
Marc Herbert52842312019-02-07 13:39:59 -080099)
100
Gerard Marull-Paretas0db41262021-06-16 23:35:37 +0200101set_target_properties(
102 doxygen
103 PROPERTIES
104 ADDITIONAL_CLEAN_FILES "${DOXY_OUT}"
105)
106
Gerard Marull-Paretas21c4cc82021-06-16 23:24:51 +0200107#-------------------------------------------------------------------------------
Gerard Marull-Paretas5ec89802021-06-16 23:28:55 +0200108# devicetree
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700109
Gerard Marull-Paretas3282cf82021-03-29 20:50:01 +0200110set(GEN_DEVICETREE_REST_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/_scripts/gen_devicetree_rest.py)
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700111
Gerard Marull-Paretas5986d882022-02-02 20:09:01 +0100112set(DTS_ARGS)
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700113foreach(root ${DTS_ROOTS})
Gerard Marull-Paretas5986d882022-02-02 20:09:01 +0100114 list(APPEND DTS_ARGS --dts-root ${root})
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700115endforeach()
116
Gerard Marull-Paretas5986d882022-02-02 20:09:01 +0100117if(DT_TURBO_MODE)
118 list(APPEND DTS_ARGS --turbo-mode)
119endif()
120
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700121add_custom_target(
122 devicetree
123 COMMAND ${CMAKE_COMMAND} -E env
Martí Bolívar53328472021-03-26 16:18:58 -0700124 PYTHONPATH=${ZEPHYR_BASE}/scripts/dts/python-devicetree/src${SEP}$ENV{PYTHONPATH}
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700125 ZEPHYR_BASE=${ZEPHYR_BASE}
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700126 ${PYTHON_EXECUTABLE} ${GEN_DEVICETREE_REST_SCRIPT}
127 --vendor-prefixes ${ZEPHYR_BASE}/dts/bindings/vendor-prefixes.txt
Gerard Marull-Paretas5986d882022-02-02 20:09:01 +0100128 ${DTS_ARGS}
Anas Nashif6e9a43b2022-04-05 10:17:26 -0400129 ${DOCS_SRC_DIR}/build/dts/api
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700130 VERBATIM
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700131 USES_TERMINAL
Gerard Marull-Paretas53b90182021-06-17 16:13:29 +0200132 COMMENT "Generating Devicetree bindings documentation..."
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700133)
134
135set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${GEN_DEVICETREE_REST_SCRIPT})
Carles Cufiae699342018-07-09 14:12:17 +0200136
Gerard Marull-Paretas2f1932c2021-06-16 22:30:23 +0200137#-------------------------------------------------------------------------------
Gerard Marull-Paretas2f1932c2021-06-16 22:30:23 +0200138# html
139
140add_doc_target(
Carles Cufiae699342018-07-09 14:12:17 +0200141 html
Gerard Marull-Paretas2f1932c2021-06-16 22:30:23 +0200142 COMMAND ${CMAKE_COMMAND} -E env ${SPHINX_ENV}
143 ${SPHINXBUILD}
144 -b html
145 -c ${DOCS_CFG_DIR}
146 -d ${DOCS_DOCTREE_DIR}
147 -w ${DOCS_BUILD_DIR}/html.log
148 -t ${DOC_TAG}
149 ${SPHINXOPTS}
Gerard Marull-Paretas2c89bf52023-06-29 10:49:09 +0200150 ${SPHINXOPTS_EXTRA}
Gerard Marull-Paretas2f1932c2021-06-16 22:30:23 +0200151 ${DOCS_SRC_DIR}
152 ${DOCS_HTML_DIR}
Gerard Marull-Paretasbf5065d2021-05-10 18:29:04 +0200153 USES_TERMINAL
Gerard Marull-Paretas53b90182021-06-17 16:13:29 +0200154 COMMENT "Running Sphinx HTML build..."
Carles Cufiae699342018-07-09 14:12:17 +0200155)
Carles Cufi78964512018-07-15 18:49:37 +0200156
Gerard Marull-Paretas0db41262021-06-16 23:35:37 +0200157set_target_properties(
158 html html-nodeps
159 PROPERTIES
160 ADDITIONAL_CLEAN_FILES "${DOCS_SRC_DIR};${DOCS_HTML_DIR};${DOCS_DOCTREE_DIR}"
161)
162
Gerard Marull-Paretasfc942ef2022-01-12 13:41:15 +0100163add_dependencies(html devicetree)
Gerard Marull-Paretas2f1932c2021-06-16 22:30:23 +0200164
Gerard Marull-Paretasdc3a2902021-06-16 23:10:30 +0200165#-------------------------------------------------------------------------------
166# pdf
Marti Bolivard9f512c2018-10-09 14:24:34 -0600167
Gerard Marull-Paretasdc3a2902021-06-16 23:10:30 +0200168add_doc_target(
Daniel Leungc164c8e2018-09-10 17:29:20 -0700169 latex
Gerard Marull-Paretasdc3a2902021-06-16 23:10:30 +0200170 COMMAND ${CMAKE_COMMAND} -E env ${SPHINX_ENV}
171 ${SPHINXBUILD}
172 -b latex
173 -c ${DOCS_CFG_DIR}
174 -d ${DOCS_DOCTREE_DIR}
175 -w ${DOCS_BUILD_DIR}/latex.log
176 -t ${DOC_TAG}
177 -t svgconvert
178 ${SPHINXOPTS}
Gerard Marull-Paretas2c89bf52023-06-29 10:49:09 +0200179 ${SPHINXOPTS_EXTRA}
Gerard Marull-Paretasdc3a2902021-06-16 23:10:30 +0200180 ${DOCS_SRC_DIR}
181 ${DOCS_LATEX_DIR}
Gerard Marull-Paretasdc3a2902021-06-16 23:10:30 +0200182 USES_TERMINAL
Gerard Marull-Paretas53b90182021-06-17 16:13:29 +0200183 COMMENT "Running Sphinx LaTeX build..."
Daniel Leung9945e7f2018-08-23 11:11:11 -0700184)
185
Gerard Marull-Paretas0db41262021-06-16 23:35:37 +0200186set_target_properties(
187 latex latex-nodeps
188 PROPERTIES
189 ADDITIONAL_CLEAN_FILES "${DOCS_SRC_DIR};${DOCS_LATEX_DIR};${DOCS_DOCTREE_DIR}"
190)
191
Gerard Marull-Paretasfc942ef2022-01-12 13:41:15 +0100192add_dependencies(latex devicetree)
Daniel Leung9945e7f2018-08-23 11:11:11 -0700193
Gerard Marull-Paretasdc3a2902021-06-16 23:10:30 +0200194if(LATEX_PDFLATEX_FOUND AND LATEXMK)
Gerard Marull-Paretas9cb84132021-07-14 16:44:37 +0200195 if(WIN32)
196 set(PDF_BUILD_COMMAND "make.bat")
197 else()
198 find_program(MAKE make)
199 if(NOT MAKE)
200 message(FATAL_ERROR "The 'make' command was not found")
201 endif()
202 set(PDF_BUILD_COMMAND ${MAKE})
203 endif()
204
Gerard Marull-Paretasdc3a2902021-06-16 23:10:30 +0200205 add_custom_target(
206 pdf
Gerard Marull-Paretas3db8d2b2021-07-15 10:22:42 +0200207 COMMAND ${CMAKE_COMMAND} -E env LATEXMKOPTS="${LATEXMKOPTS}"
Gerard Marull-Paretas9cb84132021-07-14 16:44:37 +0200208 ${PDF_BUILD_COMMAND}
Gerard Marull-Paretasdc3a2902021-06-16 23:10:30 +0200209 WORKING_DIRECTORY ${DOCS_LATEX_DIR}
Gerard Marull-Paretas53b90182021-06-17 16:13:29 +0200210 COMMENT "Building PDF file..."
Gerard Marull-Paretas9cb84132021-07-14 16:44:37 +0200211 USES_TERMINAL
Gerard Marull-Paretasdc3a2902021-06-16 23:10:30 +0200212 )
Daniel Leung9945e7f2018-08-23 11:11:11 -0700213
Gerard Marull-Paretasdc3a2902021-06-16 23:10:30 +0200214 add_dependencies(pdf latex)
Daniel Leung9945e7f2018-08-23 11:11:11 -0700215endif()
Gerard Marull-Paretas5fe16942021-06-17 12:16:55 +0200216
217#-------------------------------------------------------------------------------
Gerard Marull-Paretas41566e22022-09-23 15:51:29 +0200218# linkcheck
219
220add_doc_target(
221 linkcheck
222 COMMAND ${CMAKE_COMMAND} -E env ${SPHINX_ENV}
223 ${SPHINXBUILD}
224 -b linkcheck
225 -c ${DOCS_CFG_DIR}
226 -d ${DOCS_DOCTREE_DIR}
227 -w ${DOCS_BUILD_DIR}/linkcheck.log
228 -t ${DOC_TAG}
229 ${SPHINXOPTS}
Gerard Marull-Paretas2c89bf52023-06-29 10:49:09 +0200230 ${SPHINXOPTS_EXTRA}
Gerard Marull-Paretas41566e22022-09-23 15:51:29 +0200231 ${DOCS_SRC_DIR}
232 ${DOCS_LINKCHECK_DIR}
233 USES_TERMINAL
234 COMMENT "Running Sphinx link check..."
235)
236
237set_target_properties(
238 linkcheck linkcheck-nodeps
239 PROPERTIES
240 ADDITIONAL_CLEAN_FILES "${DOCS_SRC_DIR};${DOCS_LINKCHECK_DIR};${DOCS_DOCTREE_DIR}"
241)
242
243add_dependencies(linkcheck devicetree)
244
245#-------------------------------------------------------------------------------
Gerard Marull-Paretas5fe16942021-06-17 12:16:55 +0200246# others
247
248add_custom_target(
249 pristine
250 COMMAND ${CMAKE_COMMAND} -P ${ZEPHYR_BASE}/cmake/pristine.cmake
251)