blob: 3cc99283812f0afc8d9bfeba8487ba3e420b7dcc [file] [log] [blame]
Anas Nashif3ae52622019-04-06 09:08:09 -04001# SPDX-License-Identifier: Apache-2.0
2
Anas Nashif5060ca62018-12-11 10:33:23 -05003cmake_minimum_required(VERSION 3.13.1)
Sebastian Bøe5748fe12019-01-04 09:13:07 +01004project(Zephyr-Kernel-Doc LANGUAGES)
Carles Cufiae699342018-07-09 14:12:17 +02005
Torsten Rasmussend7862cf2020-02-12 15:42:09 +01006set(NO_BOILERPLATE TRUE)
Marc Herbert3a045362020-05-28 21:54:50 -07007find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE} ..)
Torsten Rasmussend7862cf2020-02-12 15:42:09 +01008
Carles Cufi1aa4d8d2019-03-28 17:49:25 +01009# Find west to (optionally) process modules for Kconfig
10find_program(
11 WEST
12 west
13 )
14if(${WEST} STREQUAL WEST-NOTFOUND)
15 unset(WEST)
16endif()
17
Torsten Rasmussend7862cf2020-02-12 15:42:09 +010018file(TO_CMAKE_PATH "${ZEPHYR_BASE}" ZEPHYR_BASE)
Carles Cufiae699342018-07-09 14:12:17 +020019
20message(STATUS "Zephyr base: ${ZEPHYR_BASE}")
Marti Bolivar2b3d9df2019-07-22 11:00:59 -060021if(DEFINED WEST)
Martí Bolívar17144482020-02-11 08:27:14 -080022 execute_process(COMMAND west --version
23 OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE WEST_VERSION)
24 message(STATUS "West: ${WEST} (west --version: \"${WEST_VERSION}\")")
Marti Bolivar2b3d9df2019-07-22 11:00:59 -060025else()
26 message(STATUS "West: not found")
27endif()
Carles Cufiae699342018-07-09 14:12:17 +020028
Torsten Rasmussen92507402020-05-04 08:33:59 +020029include(${ZEPHYR_BASE}/cmake/python.cmake)
Carles Cufiae699342018-07-09 14:12:17 +020030set(DOXYGEN_SKIP_DOT True)
31find_package(Doxygen REQUIRED)
Carles Cufi0698dba2018-10-02 10:30:39 +020032find_package(LATEX)
Carles Cufiae699342018-07-09 14:12:17 +020033
34find_program(
35 SPHINXBUILD
Marc Herberta49f9eb2019-02-04 15:24:01 -080036 NAMES sphinx-build-3 sphinx-build
Carles Cufiae699342018-07-09 14:12:17 +020037 )
38if(${SPHINXBUILD} STREQUAL SPHINXBUILD-NOTFOUND)
39 message(FATAL_ERROR "The 'sphinx-build' command was not found. Make sure you have Sphinx installed.")
40endif()
41
Carles Cufif5f1b222019-05-23 16:37:58 +020042# Include version info
43include(${ZEPHYR_BASE}/cmake/version.cmake)
44# Process modules
Torsten Rasmussen5f7cc8d2020-07-06 12:53:39 +020045set(KCONFIG_BINARY_DIR ${CMAKE_BINARY_DIR}/Kconfig)
Torsten Rasmussen11016412021-01-22 14:08:41 +010046list(INSERT MODULE_EXT_ROOT 0 ${ZEPHYR_BASE})
Torsten Rasmussen5f7cc8d2020-07-06 12:53:39 +020047file(MAKE_DIRECTORY ${KCONFIG_BINARY_DIR})
Torsten Rasmussen11016412021-01-22 14:08:41 +010048include(${ZEPHYR_BASE}/cmake/extensions.cmake)
Carles Cufif5f1b222019-05-23 16:37:58 +020049include(${ZEPHYR_BASE}/cmake/zephyr_module.cmake)
50
Daniel Leung9945e7f2018-08-23 11:11:11 -070051# Note that this won't force fatal error if latexmk is not found.
52# Not having LaTeX tools should not prevent people from generating HTML docs.
53find_program(
54 LATEXMK
55 latexmk
56 )
57if(${LATEXMK} STREQUAL LATEXMK-NOTFOUND)
58 message(WARNING "The 'latexmk' command was not found. Targets to build PDF will not be available.")
59endif()
60
Carles Cufiae699342018-07-09 14:12:17 +020061if(NOT DEFINED SPHINXOPTS)
Gerard Marull-Paretasb44fc8a2021-03-16 16:14:16 +010062 set(SPHINXOPTS -q -j auto)
Carles Cufid505ca72018-07-13 12:37:13 +020063else()
64 separate_arguments(SPHINXOPTS)
Carles Cufiae699342018-07-09 14:12:17 +020065endif()
66
Carles Cufi896a6962018-08-16 13:45:59 +020067if(NOT DEFINED SPHINX_OUTPUT_DIR)
Daniel Leung9945e7f2018-08-23 11:11:11 -070068 set(SPHINX_OUTPUT_DIR_HTML ${CMAKE_CURRENT_BINARY_DIR}/html)
69 set(SPHINX_OUTPUT_DIR_LATEX ${CMAKE_CURRENT_BINARY_DIR}/latex)
70 set(SPHINX_OUTPUT_DIR_PDF ${CMAKE_CURRENT_BINARY_DIR}/pdf)
71else()
Marti Bolivar2952bf82018-10-09 13:28:41 -060072 # SPHINX_OUTPUT_DIR is used to specify exactly where HTML (or other
73 # outputs) are placed, so no /html, /latex, /pdf suffixes are needed.
Daniel Leung9945e7f2018-08-23 11:11:11 -070074 set(SPHINX_OUTPUT_DIR_HTML ${SPHINX_OUTPUT_DIR})
75 set(SPHINX_OUTPUT_DIR_LATEX ${SPHINX_OUTPUT_DIR})
76 set(SPHINX_OUTPUT_DIR_PDF ${SPHINX_OUTPUT_DIR})
Carles Cufi896a6962018-08-16 13:45:59 +020077endif()
78
Carles Cufiae699342018-07-09 14:12:17 +020079if(NOT DEFINED DOC_TAG)
80 set(DOC_TAG development)
81endif()
82
83# Internal variables.
Carles Cufi2af9a9e2018-07-13 15:32:36 +020084set(ALLSPHINXOPTS -d ${CMAKE_CURRENT_BINARY_DIR}/doctrees ${SPHINXOPTS})
Carles Cufi60c55402018-07-15 18:57:01 +020085if("-q" IN_LIST ALLSPHINXOPTS)
86 set(SPHINX_USES_TERMINAL )
87else()
88 set(SPHINX_USES_TERMINAL USES_TERMINAL)
89endif()
90
Carles Cufiae699342018-07-09 14:12:17 +020091# the i18n builder cannot share the environment and doctrees with the others
Carles Cufid505ca72018-07-13 12:37:13 +020092set(I18NSPHINXOPTS ${SPHINXOPTS})
Carles Cufiae699342018-07-09 14:12:17 +020093
Carles Cufie182dbc2018-07-16 19:05:05 +020094set(DOXYFILE_IN ${CMAKE_CURRENT_LIST_DIR}/zephyr.doxyfile.in)
95set(DOXYFILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/zephyr.doxyfile)
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +020096set(DOXY_OUT ${CMAKE_CURRENT_BINARY_DIR}/doxygen)
Carles Cufie182dbc2018-07-16 19:05:05 +020097set(RST_OUT ${CMAKE_CURRENT_BINARY_DIR}/rst)
Carles Cufie182dbc2018-07-16 19:05:05 +020098set(DOC_WARN ${CMAKE_CURRENT_BINARY_DIR}/doc.warnings)
Marti Bolivar0913c292018-10-09 12:42:03 -060099set(CONTENT_OUTPUTS ${CMAKE_CURRENT_BINARY_DIR}/extracted-content.txt)
Carles Cufiae699342018-07-09 14:12:17 +0200100
Carles Cufie182dbc2018-07-16 19:05:05 +0200101configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY)
Carles Cufiae699342018-07-09 14:12:17 +0200102
Marc Herbertfc644812019-02-15 10:41:25 -0800103# This command is used to copy all documentation source files from the
104# ZEPHYR_BASE/ environment variable into the build directory,
Marti Bolivard7dc1132018-10-16 08:39:35 -0600105#
106# We need to make copies because Sphinx requires a single
107# documentation root directory, but Zephyr's documentation is
108# scattered around the tree in samples/, boards/, and doc/. Putting
109# them into a single rooted tree in the build directory is a
110# workaround for this limitation.
Marti Bolivar0913c292018-10-09 12:42:03 -0600111set(EXTRACT_CONTENT_COMMAND
112 ${CMAKE_COMMAND} -E env
Marti Bolivarf3d13862019-05-10 04:23:23 -0600113 ZEPHYR_BASE=${ZEPHYR_BASE}
Gerard Marull-Paretas3282cf82021-03-29 20:50:01 +0200114 ${PYTHON_EXECUTABLE} _scripts/extract_content.py
Marti Bolivar0913c292018-10-09 12:42:03 -0600115 # Ignore any files in the output directory.
116 --ignore ${CMAKE_CURRENT_BINARY_DIR}
117 # Copy all files in doc to the rst folder.
118 "*:doc:${RST_OUT}"
Marti Bolivard7dc1132018-10-16 08:39:35 -0600119 # We want to copy the .rst files in samples/ and boards/ to the rst
120 # folder, and also the doc folder inside rst.
Marti Bolivar0913c292018-10-09 12:42:03 -0600121 #
122 # Some files refer to items in samples/ and boards/ relative to
123 # their actual position in the Zephyr tree. For example, in
124 # subsystems/sensor.rst:
125 #
126 # .. literalinclude:: ../../samples/sensor/mcp9808/src/main.c
127 #
Marti Bolivard7dc1132018-10-16 08:39:35 -0600128 # The additional copy is a hackaround so these references work.
Marti Bolivar0913c292018-10-09 12:42:03 -0600129 "*.rst:samples:${RST_OUT}" "*.rst:boards:${RST_OUT}"
130 "*.rst:samples:${RST_OUT}/doc" "*.rst:boards:${RST_OUT}/doc")
131
Carles Cufi15fbf702018-12-06 12:21:48 +0100132add_custom_target(
133 content
134 # Copy all files in doc/ to the rst folder
Marti Bolivar0913c292018-10-09 12:42:03 -0600135 COMMAND ${EXTRACT_CONTENT_COMMAND}
136 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
Marc Herbertfc644812019-02-15 10:41:25 -0800137 COMMENT "Copying files to ${RST_OUT}"
Carles Cufi15fbf702018-12-06 12:21:48 +0100138)
Marti Bolivar0913c292018-10-09 12:42:03 -0600139
Marc Herbert52842312019-02-07 13:39:59 -0800140add_custom_target(
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +0200141 doxygen
142 COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT}
Marc Herbert52842312019-02-07 13:39:59 -0800143 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +0200144 COMMENT "Running ${DOXYGEN_EXECUTABLE}"
Marc Herbert52842312019-02-07 13:39:59 -0800145)
146
Carles Cufiae699342018-07-09 14:12:17 +0200147add_custom_target(
148 pristine
149 COMMAND ${CMAKE_COMMAND} -P ${ZEPHYR_BASE}/cmake/pristine.cmake
Carles Cufiae699342018-07-09 14:12:17 +0200150)
151
Carles Cufiae699342018-07-09 14:12:17 +0200152if(WIN32)
Carles Cufi8645cc22019-09-06 15:56:21 +0200153 set(SEP $<SEMICOLON>)
Carles Cufiae699342018-07-09 14:12:17 +0200154else()
155 set(SEP :)
156endif()
157
Gerard Marull-Paretas3282cf82021-03-29 20:50:01 +0200158set(FIX_TEX_SCRIPT ${ZEPHYR_BASE}/doc/_scripts/fix_tex.py)
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700159
160#
161# Generated Kconfig .rst documents
162#
163
Torsten Rasmussen5f7cc8d2020-07-06 12:53:39 +0200164file(WRITE ${KCONFIG_BINARY_DIR}/Kconfig.soc.defconfig
165 "osource \"${ZEPHYR_BASE}/soc/$(ARCH)/*/Kconfig.defconfig\"\n"
166)
167file(WRITE ${KCONFIG_BINARY_DIR}/Kconfig.soc
168 "osource \"${ZEPHYR_BASE}/soc/$(ARCH)/*/Kconfig.soc\"\n"
169)
Fabio Utzig4b93fdb2020-11-13 10:49:04 -0300170file(WRITE ${KCONFIG_BINARY_DIR}/Kconfig.shield.defconfig
171 "osource \"${ZEPHYR_BASE}/boards/shields/*/Kconfig.defconfig\"\n"
172)
173file(WRITE ${KCONFIG_BINARY_DIR}/Kconfig.shield
174 "osource \"${ZEPHYR_BASE}/boards/shields/*/Kconfig.shield\"\n"
175)
Torsten Rasmussen5f7cc8d2020-07-06 12:53:39 +0200176file(WRITE ${KCONFIG_BINARY_DIR}/Kconfig.soc.arch
177 "osource \"${ZEPHYR_BASE}/soc/$(ARCH)/Kconfig\"\n"
178 "osource \"${ZEPHYR_BASE}/soc/$(ARCH)/*/Kconfig\"\n"
179)
180
Torsten Rasmussen11016412021-01-22 14:08:41 +0100181foreach(module_name ${ZEPHYR_MODULE_NAMES})
182 zephyr_string(SANITIZE TOUPPER MODULE_NAME_UPPER ${module_name})
183 list(APPEND
184 ZEPHYR_KCONFIG_MODULES
185 "ZEPHYR_${MODULE_NAME_UPPER}_MODULE_DIR=${ZEPHYR_${MODULE_NAME_UPPER}_MODULE_DIR}"
186 )
187
188 if(ZEPHYR_${MODULE_NAME_UPPER}_KCONFIG)
189 list(APPEND
190 ZEPHYR_KCONFIG_MODULES
191 "ZEPHYR_${MODULE_NAME_UPPER}_KCONFIG=${ZEPHYR_${MODULE_NAME_UPPER}_KCONFIG}"
192 )
193 endif()
194endforeach()
195
Carles Cufiae699342018-07-09 14:12:17 +0200196add_custom_target(
197 kconfig
Carles Cufie182dbc2018-07-16 19:05:05 +0200198 COMMAND ${CMAKE_COMMAND} -E make_directory ${RST_OUT}/doc/reference/kconfig
199 COMMAND ${CMAKE_COMMAND} -E env
Ulf Magnussonf570f192019-12-03 17:07:53 +0100200 PYTHONPATH=${ZEPHYR_BASE}/scripts/kconfig${SEP}$ENV{PYTHONPATH}
Marti Bolivarf3d13862019-05-10 04:23:23 -0600201 ZEPHYR_BASE=${ZEPHYR_BASE}
Carles Cufiae699342018-07-09 14:12:17 +0200202 srctree=${ZEPHYR_BASE}
Ulf Magnusson82330172019-10-21 20:20:18 +0200203 BOARD_DIR=boards/*/*
Ulf Magnussond0e87522018-09-05 12:58:05 +0200204 ARCH=*
Ulf Magnusson82330172019-10-21 20:20:18 +0200205 ARCH_DIR=arch
206 SOC_DIR=soc
Torsten Rasmussen5f7cc8d2020-07-06 12:53:39 +0200207 KCONFIG_BINARY_DIR=${KCONFIG_BINARY_DIR}
Carles Cufic6249ac2019-03-28 17:51:39 +0100208 KCONFIG_WARN_UNDEF=y
Anas Nashif940a9312019-01-21 13:58:05 -0500209 KCONFIG_TURBO_MODE=${KCONFIG_TURBO_MODE}
Carles Cufifa26ef02019-01-30 17:54:21 +0100210 KCONFIG_DOC_MODE=1
Torsten Rasmussen11016412021-01-22 14:08:41 +0100211 ${ZEPHYR_KCONFIG_MODULES}
Gerard Marull-Paretas3282cf82021-03-29 20:50:01 +0200212 ${PYTHON_EXECUTABLE} _scripts/gen_kconfig_rest.py ${RST_OUT}/doc/reference/kconfig/
Ulf Magnusson5c28f392019-12-10 15:11:01 +0100213 --separate-all-index
Ulf Magnusson91c8ffa2019-11-21 19:37:58 +0100214 --keep-module-paths
Ulf Magnussonf570f192019-12-03 17:07:53 +0100215 --modules Architecture,arch,${ZEPHYR_BASE}/arch
216 Driver,drivers,${ZEPHYR_BASE}/drivers
217 Kernel,kernel,${ZEPHYR_BASE}/kernel
218 Library,lib,${ZEPHYR_BASE}/lib
219 Subsystem,subsys,${ZEPHYR_BASE}/subsys
220 "External Module,modules,${ZEPHYR_BASE}/modules"
Ulf Magnusson91c8ffa2019-11-21 19:37:58 +0100221
Ulf Magnussonf570f192019-12-03 17:07:53 +0100222 VERBATIM
Carles Cufi2af9a9e2018-07-13 15:32:36 +0200223 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700224 COMMENT "Running gen_kconfig_rest.py ${RST_OUT}/doc/reference/kconfig/"
Carles Cufiae699342018-07-09 14:12:17 +0200225)
226
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700227#
228# Generated devicetree .rst documents
229#
230# The devicetree bindings discovered in ${DTS_ROOTS} are parsed and
231# documentation for them is generated in the directory
232# ${DTS_BINDINGS_RST_OUT}.
233#
234# The CMake variable GEN_DEVICETREE_REST_ZEPHYR_DOCSET will
235# be passed to the script in the environment. This allows separating
236# the bindings documentation into a standalone Sphinx docset that
237# nonetheless can link to Zephyr documentation using intersphinx.
238# If empty, the variable has no effect on the script.
239#
240# If not set, these are the default values for these variables:
241#
242# - DTS_ROOTS: ZEPHYR_BASE
243# - DTS_BINDINGS_RST_OUT: ${RST_OUT}/doc/reference/devicetree
244#
245
Gerard Marull-Paretas3282cf82021-03-29 20:50:01 +0200246set(GEN_DEVICETREE_REST_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/_scripts/gen_devicetree_rest.py)
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700247
248if(NOT DTS_ROOTS)
249 set(DTS_ROOTS ${ZEPHYR_BASE})
250endif()
251
252set(DTS_ROOT_ARGS)
253foreach(root ${DTS_ROOTS})
254 list(APPEND DTS_ROOT_ARGS --dts-root ${root})
255endforeach()
256
257if(NOT DTS_BINDINGS_RST_OUT)
258 set(DTS_BINDINGS_RST_OUT ${RST_OUT}/doc/reference/devicetree)
259endif()
260
261add_custom_target(
262 devicetree
263 COMMAND ${CMAKE_COMMAND} -E env
Martí Bolívar53328472021-03-26 16:18:58 -0700264 PYTHONPATH=${ZEPHYR_BASE}/scripts/dts/python-devicetree/src${SEP}$ENV{PYTHONPATH}
Martí Bolívar808dd9e2020-10-12 11:02:46 -0700265 ZEPHYR_BASE=${ZEPHYR_BASE}
266 GEN_DEVICETREE_REST_ZEPHYR_DOCSET=${GEN_DEVICETREE_REST_ZEPHYR_DOCSET}
267 ${PYTHON_EXECUTABLE} ${GEN_DEVICETREE_REST_SCRIPT}
268 --vendor-prefixes ${ZEPHYR_BASE}/dts/bindings/vendor-prefixes.txt
269 ${DTS_ROOT_ARGS} ${DTS_BINDINGS_RST_OUT}
270 VERBATIM
271 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
272 COMMENT "Running gen_devicetree_rest.py ${DTS_BINDINGS_RST_OUT}"
273 USES_TERMINAL
274)
275
276set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${GEN_DEVICETREE_REST_SCRIPT})
Carles Cufiae699342018-07-09 14:12:17 +0200277
Daniel Leung9945e7f2018-08-23 11:11:11 -0700278#
279# HTML section
280#
Marti Bolivard9f512c2018-10-09 14:24:34 -0600281set(SPHINX_BUILD_HTML_COMMAND
282 ${CMAKE_COMMAND} -E env
Marti Bolivarf3d13862019-05-10 04:23:23 -0600283 ZEPHYR_BASE=${ZEPHYR_BASE}
Marti Bolivard9f512c2018-10-09 14:24:34 -0600284 ZEPHYR_BUILD=${CMAKE_CURRENT_BINARY_DIR}
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +0200285 DOXYGEN_EXECUTABLE=${DOXYGEN_EXECUTABLE}
Gerard Marull-Paretas96c7d102021-04-06 00:02:03 +0200286 ${SPHINXBUILD} -W -N -t ${DOC_TAG} -b html ${ALLSPHINXOPTS} ${RST_OUT}/doc ${SPHINX_OUTPUT_DIR_HTML})
Marti Bolivard9f512c2018-10-09 14:24:34 -0600287
288# The sphinx-html target is provided as a convenience for incremental
289# re-builds of content files without regenerating the entire docs
290# pipeline. It can be significantly faster than re-running the full
291# HTML build, but it has no idea if Doxygen, Kconfig, etc. need to be
292# regenerated. Use with caution.
293add_custom_target(
294 sphinx-html
295 COMMAND ${SPHINX_BUILD_HTML_COMMAND}
Marti Bolivard9f512c2018-10-09 14:24:34 -0600296 COMMENT "Just re-generating HTML (USE WITH CAUTION)"
Marc Herberte3c50af2020-10-07 06:59:33 +0000297 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
Marti Bolivard9f512c2018-10-09 14:24:34 -0600298 USES_TERMINAL
299)
Marc Herberte3c50af2020-10-07 06:59:33 +0000300add_dependencies(sphinx-html content)
Marti Bolivard9f512c2018-10-09 14:24:34 -0600301
Carles Cufiae699342018-07-09 14:12:17 +0200302add_custom_target(
303 html
Marti Bolivard9f512c2018-10-09 14:24:34 -0600304 COMMAND ${SPHINX_BUILD_HTML_COMMAND}
Carles Cufi2af9a9e2018-07-13 15:32:36 +0200305 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
Marc Herbertfc644812019-02-15 10:41:25 -0800306 COMMENT "Generating HTML documentation with ${SPHINXBUILD} ${SPHINXOPTS}"
Carles Cufi60c55402018-07-15 18:57:01 +0200307 ${SPHINX_USES_TERMINAL}
Carles Cufiae699342018-07-09 14:12:17 +0200308)
Carles Cufi78964512018-07-15 18:49:37 +0200309
Daniel Leung9945e7f2018-08-23 11:11:11 -0700310#
311# LaTEX section
312#
Marti Bolivard9f512c2018-10-09 14:24:34 -0600313set(SPHINX_BUILD_LATEX_COMMAND
314 ${CMAKE_COMMAND} -E env
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +0200315 ZEPHYR_BASE=${ZEPHYR_BASE}
Marti Bolivard9f512c2018-10-09 14:24:34 -0600316 ZEPHYR_BUILD=${CMAKE_CURRENT_BINARY_DIR}
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +0200317 DOXYGEN_EXECUTABLE=${DOXYGEN_EXECUTABLE}
Gerard Marull-Paretas96c7d102021-04-06 00:02:03 +0200318 ${SPHINXBUILD} -W -N -t ${DOC_TAG} -b latex -t svgconvert ${ALLSPHINXOPTS} ${RST_OUT}/doc ${SPHINX_OUTPUT_DIR_LATEX})
Marti Bolivard9f512c2018-10-09 14:24:34 -0600319
320# The sphinx-latex target works similarly to sphinx-html, and carries
321# the same warnings.
322add_custom_target(
323 sphinx-latex
324 COMMAND ${SPHINX_BUILD_LATEX_COMMAND}
Marti Bolivard9f512c2018-10-09 14:24:34 -0600325 COMMENT "Just re-generating LaTeX (USE WITH CAUTION)"
Marc Herberte3c50af2020-10-07 06:59:33 +0000326 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
Marti Bolivard9f512c2018-10-09 14:24:34 -0600327 USES_TERMINAL
328)
Marc Herberte3c50af2020-10-07 06:59:33 +0000329add_dependencies(sphinx-latex content)
330
Marti Bolivard9f512c2018-10-09 14:24:34 -0600331
Daniel Leungc164c8e2018-09-10 17:29:20 -0700332add_custom_command(
333 OUTPUT ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.tex
Marti Bolivard9f512c2018-10-09 14:24:34 -0600334 COMMAND ${SPHINX_BUILD_LATEX_COMMAND}
Daniel Leung9945e7f2018-08-23 11:11:11 -0700335 COMMAND ${PYTHON_EXECUTABLE} ${FIX_TEX_SCRIPT} ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.tex
336 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
Marti Bolivard9f512c2018-10-09 14:24:34 -0600337 COMMENT "Generating LaTeX documentation"
Carles Cufi7599fad2018-09-26 11:22:32 +0200338 ${SPHINX_USES_TERMINAL}
Daniel Leungc164c8e2018-09-10 17:29:20 -0700339)
340
341add_custom_target(
342 latex
343 DEPENDS ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.tex
Daniel Leung9945e7f2018-08-23 11:11:11 -0700344)
345
346#
347# PDF section
348#
349if(NOT ${LATEXMK} STREQUAL LATEXMK-NOTFOUND)
350
351add_custom_command(
352 OUTPUT ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.pdf
353 DEPENDS latexdocs ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.tex
354 COMMAND ${CMAKE_COMMAND} -E env
Carles Cufi0698dba2018-10-02 10:30:39 +0200355 LATEXOPTS="-halt-on-error -no-shell-escape"
Daniel Leung9945e7f2018-08-23 11:11:11 -0700356 ${LATEXMK} -quiet -pdf -dvi- -ps-
357 WORKING_DIRECTORY ${SPHINX_OUTPUT_DIR_LATEX}
Marti Bolivard9f512c2018-10-09 14:24:34 -0600358 COMMENT "Generating PDF documentation"
Daniel Leung9945e7f2018-08-23 11:11:11 -0700359)
360
361if(NOT DEFINED SPHINX_OUTPUT_DIR)
362# Although latexmk allows specifying output directory,
363# makeindex fails if one is specified.
364# Hence the need of this to copy the PDF file over.
365add_custom_command(
366 OUTPUT ${SPHINX_OUTPUT_DIR_PDF}/zephyr.pdf
367 COMMAND ${CMAKE_COMMAND} -E make_directory ${SPHINX_OUTPUT_DIR_PDF}
368 COMMAND ${CMAKE_COMMAND} -E copy ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.pdf ${SPHINX_OUTPUT_DIR_PDF}/zephyr.pdf
369 DEPENDS ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.pdf
370)
371endif()
372
373add_custom_target(
374 pdf
375 DEPENDS ${SPHINX_OUTPUT_DIR_PDF}/zephyr.pdf
Daniel Leung9945e7f2018-08-23 11:11:11 -0700376)
377
378endif()
379
380#
381# Dependencies and final targets
382#
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +0200383add_dependencies(html content kconfig devicetree)
Carles Cufi78964512018-07-15 18:49:37 +0200384
385add_custom_target(
386 htmldocs
387)
388add_dependencies(htmldocs html)
389
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +0200390add_dependencies(latex content kconfig devicetree)
Daniel Leung9945e7f2018-08-23 11:11:11 -0700391
392add_custom_target(
393 latexdocs
394)
395add_dependencies(latexdocs latex)
396
397if(NOT ${LATEXMK} STREQUAL LATEXMK-NOTFOUND)
398
399add_custom_target(
400 pdfdocs
Daniel Leungc164c8e2018-09-10 17:29:20 -0700401 DEPENDS latexdocs pdf
Daniel Leung9945e7f2018-08-23 11:11:11 -0700402)
403add_dependencies(pdfdocs pdf)
404
405endif()