blob: 2c2d839341cdb47fdf86a9912b54778cb1ac87fb [file] [log] [blame]
Carles Cufiae699342018-07-09 14:12:17 +02001cmake_minimum_required(VERSION 3.8.2)
2project(Zephyr-Kernel-Doc VERSION ${PROJECT_VERSION} LANGUAGES)
3
4set(ZEPHYR_BASE $ENV{ZEPHYR_BASE})
5
6message(STATUS "Zephyr base: ${ZEPHYR_BASE}")
7
Sebastian Bøe93230a52018-09-28 13:10:57 +02008include(${ZEPHYR_BASE}/cmake/version.cmake)
9
Carles Cufiae699342018-07-09 14:12:17 +020010find_package(PythonInterp 3.4)
11set(DOXYGEN_SKIP_DOT True)
12find_package(Doxygen REQUIRED)
13
14find_program(
15 SPHINXBUILD
16 sphinx-build
17 )
18if(${SPHINXBUILD} STREQUAL SPHINXBUILD-NOTFOUND)
19 message(FATAL_ERROR "The 'sphinx-build' command was not found. Make sure you have Sphinx installed.")
20endif()
21
Daniel Leung9945e7f2018-08-23 11:11:11 -070022# Note that this won't force fatal error if latexmk is not found.
23# Not having LaTeX tools should not prevent people from generating HTML docs.
24find_program(
25 LATEXMK
26 latexmk
27 )
28if(${LATEXMK} STREQUAL LATEXMK-NOTFOUND)
29 message(WARNING "The 'latexmk' command was not found. Targets to build PDF will not be available.")
30endif()
31
Carles Cufiae699342018-07-09 14:12:17 +020032if(NOT DEFINED SPHINXOPTS)
33 set(SPHINXOPTS -q)
Carles Cufid505ca72018-07-13 12:37:13 +020034else()
35 separate_arguments(SPHINXOPTS)
Carles Cufiae699342018-07-09 14:12:17 +020036endif()
37
Carles Cufi896a6962018-08-16 13:45:59 +020038if(NOT DEFINED SPHINX_OUTPUT_DIR)
Daniel Leung9945e7f2018-08-23 11:11:11 -070039 set(SPHINX_OUTPUT_DIR_HTML ${CMAKE_CURRENT_BINARY_DIR}/html)
40 set(SPHINX_OUTPUT_DIR_LATEX ${CMAKE_CURRENT_BINARY_DIR}/latex)
41 set(SPHINX_OUTPUT_DIR_PDF ${CMAKE_CURRENT_BINARY_DIR}/pdf)
42else()
43 set(SPHINX_OUTPUT_DIR_HTML ${SPHINX_OUTPUT_DIR})
44 set(SPHINX_OUTPUT_DIR_LATEX ${SPHINX_OUTPUT_DIR})
45 set(SPHINX_OUTPUT_DIR_PDF ${SPHINX_OUTPUT_DIR})
Carles Cufi896a6962018-08-16 13:45:59 +020046endif()
47
Carles Cufiae699342018-07-09 14:12:17 +020048if(NOT DEFINED DOC_TAG)
49 set(DOC_TAG development)
50endif()
51
52# Internal variables.
Carles Cufi2af9a9e2018-07-13 15:32:36 +020053set(ALLSPHINXOPTS -d ${CMAKE_CURRENT_BINARY_DIR}/doctrees ${SPHINXOPTS})
Carles Cufi60c55402018-07-15 18:57:01 +020054if("-q" IN_LIST ALLSPHINXOPTS)
55 set(SPHINX_USES_TERMINAL )
56else()
57 set(SPHINX_USES_TERMINAL USES_TERMINAL)
58endif()
59
Carles Cufiae699342018-07-09 14:12:17 +020060# the i18n builder cannot share the environment and doctrees with the others
Carles Cufid505ca72018-07-13 12:37:13 +020061set(I18NSPHINXOPTS ${SPHINXOPTS})
Carles Cufiae699342018-07-09 14:12:17 +020062
Carles Cufie182dbc2018-07-16 19:05:05 +020063set(DOXYFILE_IN ${CMAKE_CURRENT_LIST_DIR}/zephyr.doxyfile.in)
64set(DOXYFILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/zephyr.doxyfile)
65set(RST_OUT ${CMAKE_CURRENT_BINARY_DIR}/rst)
66set(DOC_LOG ${CMAKE_CURRENT_BINARY_DIR}/doc.log)
67set(DOXY_LOG ${CMAKE_CURRENT_BINARY_DIR}/doxy.log)
68set(SPHINX_LOG ${CMAKE_CURRENT_BINARY_DIR}/sphinx.log)
69set(DOC_WARN ${CMAKE_CURRENT_BINARY_DIR}/doc.warnings)
Carles Cufiae699342018-07-09 14:12:17 +020070
Carles Cufie182dbc2018-07-16 19:05:05 +020071configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY)
Carles Cufiae699342018-07-09 14:12:17 +020072
Carles Cufie182dbc2018-07-16 19:05:05 +020073set(ARGS ${DOXYFILE_OUT})
Carles Cufiae699342018-07-09 14:12:17 +020074
75add_custom_target(
76 doxy
77 COMMAND ${CMAKE_COMMAND}
78 -DCOMMAND=${DOXYGEN_EXECUTABLE}
79 -DARGS="${ARGS}"
80 -DOUTPUT_FILE=${DOXY_LOG}
81 -DERROR_FILE=${DOXY_LOG}
Carles Cufi2af9a9e2018-07-13 15:32:36 +020082 -DWORKING_DIRECTORY=${CMAKE_CURRENT_LIST_DIR}
Carles Cufi45d58a72018-07-12 17:34:29 +020083 -P ${ZEPHYR_BASE}/cmake/util/execute_process.cmake
Carles Cufiae699342018-07-09 14:12:17 +020084)
85
86add_custom_target(
87 pristine
88 COMMAND ${CMAKE_COMMAND} -P ${ZEPHYR_BASE}/cmake/pristine.cmake
Carles Cufiae699342018-07-09 14:12:17 +020089)
90
91add_custom_target(
Carles Cufiae699342018-07-09 14:12:17 +020092 content
Carles Cufia0dbc7a2018-08-06 11:51:53 +020093 # Copy all files in doc/ to the rst folder
Carles Cufie182dbc2018-07-16 19:05:05 +020094 COMMAND ${CMAKE_COMMAND} -E env
95 ZEPHYR_BUILD=${CMAKE_CURRENT_BINARY_DIR}
Carles Cufia0dbc7a2018-08-06 11:51:53 +020096 ${PYTHON_EXECUTABLE} scripts/extract_content.py -a ${RST_OUT} doc
Carles Cufie182dbc2018-07-16 19:05:05 +020097 # Copy the .rst files in samples/ and boards/ to the rst folder
98 COMMAND ${CMAKE_COMMAND} -E env
99 ZEPHYR_BUILD=${CMAKE_CURRENT_BINARY_DIR}
100 ${PYTHON_EXECUTABLE} scripts/extract_content.py ${RST_OUT} samples boards
101 # Copy the .rst files in samples/ and boards/ to the doc folder inside rst
102 COMMAND ${CMAKE_COMMAND} -E env
103 ZEPHYR_BUILD=${CMAKE_CURRENT_BINARY_DIR}
104 ${PYTHON_EXECUTABLE} scripts/extract_content.py ${RST_OUT}/doc samples boards
Carles Cufi2af9a9e2018-07-13 15:32:36 +0200105 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
Carles Cufiae699342018-07-09 14:12:17 +0200106)
107
108if(WIN32)
109 set(SEP ;)
110else()
111 set(SEP :)
112endif()
113
114add_custom_target(
115 kconfig
Carles Cufie182dbc2018-07-16 19:05:05 +0200116 COMMAND ${CMAKE_COMMAND} -E make_directory ${RST_OUT}/doc/reference/kconfig
117 COMMAND ${CMAKE_COMMAND} -E env
Carles Cufiae699342018-07-09 14:12:17 +0200118 PYTHONPATH="${ZEPHYR_BASE}/scripts/kconfig${SEP}$ENV{PYTHONPATH}"
119 srctree=${ZEPHYR_BASE}
Sebastian Bøe93230a52018-09-28 13:10:57 +0200120 KERNELVERSION=${KERNELVERSION}
Ulf Magnussond0e87522018-09-05 12:58:05 +0200121 BOARD_DIR=boards/*/*/
122 ARCH=*
Anas Nashif96455d52018-09-04 14:34:06 -0500123 SOC_DIR=soc/
Carles Cufiae699342018-07-09 14:12:17 +0200124 SRCARCH=x86
Ulf Magnussona56be6f2018-08-17 22:27:01 +0200125 ${PYTHON_EXECUTABLE} scripts/genrest.py Kconfig ${RST_OUT}/doc/reference/kconfig/
Carles Cufi2af9a9e2018-07-13 15:32:36 +0200126 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
Carles Cufiae699342018-07-09 14:12:17 +0200127)
128
129set(KI_SCRIPT ${ZEPHYR_BASE}/scripts/filter-known-issues.py)
Daniel Leung9945e7f2018-08-23 11:11:11 -0700130set(FIX_TEX_SCRIPT ${ZEPHYR_BASE}/doc/scripts/fix_tex.py)
Carles Cufiae699342018-07-09 14:12:17 +0200131set(CONFIG_DIR ${ZEPHYR_BASE}/.known-issues/doc)
132
Daniel Leung9945e7f2018-08-23 11:11:11 -0700133#
134# HTML section
135#
Carles Cufiae699342018-07-09 14:12:17 +0200136add_custom_target(
137 html
Carles Cufie182dbc2018-07-16 19:05:05 +0200138 COMMAND ${CMAKE_COMMAND} -E env
139 ZEPHYR_BUILD=${CMAKE_CURRENT_BINARY_DIR}
Daniel Leung9945e7f2018-08-23 11:11:11 -0700140 ${SPHINXBUILD} -w ${SPHINX_LOG} -N -t ${DOC_TAG} -b html ${ALLSPHINXOPTS} ${RST_OUT}/doc ${SPHINX_OUTPUT_DIR_HTML}
Carles Cufiae699342018-07-09 14:12:17 +0200141 # Merge the Doxygen and Sphinx logs into a single file
142 COMMAND ${CMAKE_COMMAND} -P ${ZEPHYR_BASE}/cmake/util/fmerge.cmake ${DOC_LOG} ${DOXY_LOG} ${SPHINX_LOG}
143 COMMAND ${PYTHON_EXECUTABLE} ${KI_SCRIPT} --config-dir ${CONFIG_DIR} --errors ${DOC_WARN} --warnings ${DOC_WARN} ${DOC_LOG}
Carles Cufi2af9a9e2018-07-13 15:32:36 +0200144 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
Carles Cufi60c55402018-07-15 18:57:01 +0200145 ${SPHINX_USES_TERMINAL}
Carles Cufiae699342018-07-09 14:12:17 +0200146)
Carles Cufi78964512018-07-15 18:49:37 +0200147
Daniel Leung9945e7f2018-08-23 11:11:11 -0700148#
149# LaTEX section
150#
Daniel Leungc164c8e2018-09-10 17:29:20 -0700151add_custom_command(
152 OUTPUT ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.tex
Daniel Leung9945e7f2018-08-23 11:11:11 -0700153 COMMAND ${CMAKE_COMMAND} -E env
154 ZEPHYR_BUILD=${CMAKE_CURRENT_BINARY_DIR}
155 ${SPHINXBUILD} -w ${SPHINX_LOG} -N -t ${DOC_TAG} -b latex -t svgconvert ${ALLSPHINXOPTS} ${RST_OUT}/doc ${SPHINX_OUTPUT_DIR_LATEX}
156 # Merge the Doxygen and Sphinx logs into a single file
157 COMMAND ${CMAKE_COMMAND} -P ${ZEPHYR_BASE}/cmake/util/fmerge.cmake ${DOC_LOG} ${DOXY_LOG} ${SPHINX_LOG}
158 COMMAND ${PYTHON_EXECUTABLE} ${KI_SCRIPT} --config-dir ${CONFIG_DIR} --errors ${DOC_WARN} --warnings ${DOC_WARN} ${DOC_LOG}
159 COMMAND ${PYTHON_EXECUTABLE} ${FIX_TEX_SCRIPT} ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.tex
160 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
Carles Cufi7599fad2018-09-26 11:22:32 +0200161 ${SPHINX_USES_TERMINAL}
Daniel Leungc164c8e2018-09-10 17:29:20 -0700162)
163
164add_custom_target(
165 latex
166 DEPENDS ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.tex
Daniel Leung9945e7f2018-08-23 11:11:11 -0700167)
168
169#
170# PDF section
171#
172if(NOT ${LATEXMK} STREQUAL LATEXMK-NOTFOUND)
173
174add_custom_command(
175 OUTPUT ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.pdf
176 DEPENDS latexdocs ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.tex
177 COMMAND ${CMAKE_COMMAND} -E env
178 LATEXOPTS='-halt-on-error -no-shell-escape'
179 ${LATEXMK} -quiet -pdf -dvi- -ps-
180 WORKING_DIRECTORY ${SPHINX_OUTPUT_DIR_LATEX}
181)
182
183if(NOT DEFINED SPHINX_OUTPUT_DIR)
184# Although latexmk allows specifying output directory,
185# makeindex fails if one is specified.
186# Hence the need of this to copy the PDF file over.
187add_custom_command(
188 OUTPUT ${SPHINX_OUTPUT_DIR_PDF}/zephyr.pdf
189 COMMAND ${CMAKE_COMMAND} -E make_directory ${SPHINX_OUTPUT_DIR_PDF}
190 COMMAND ${CMAKE_COMMAND} -E copy ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.pdf ${SPHINX_OUTPUT_DIR_PDF}/zephyr.pdf
191 DEPENDS ${SPHINX_OUTPUT_DIR_LATEX}/zephyr.pdf
192)
193endif()
194
195add_custom_target(
196 pdf
197 DEPENDS ${SPHINX_OUTPUT_DIR_PDF}/zephyr.pdf
Daniel Leung9945e7f2018-08-23 11:11:11 -0700198)
199
200endif()
201
202#
203# Dependencies and final targets
204#
Carles Cufi78964512018-07-15 18:49:37 +0200205add_dependencies(html content doxy kconfig)
206
207add_custom_target(
208 htmldocs
209)
210add_dependencies(htmldocs html)
211
Daniel Leung9945e7f2018-08-23 11:11:11 -0700212add_dependencies(latex content doxy kconfig)
213
214add_custom_target(
215 latexdocs
216)
217add_dependencies(latexdocs latex)
218
219if(NOT ${LATEXMK} STREQUAL LATEXMK-NOTFOUND)
220
221add_custom_target(
222 pdfdocs
Daniel Leungc164c8e2018-09-10 17:29:20 -0700223 DEPENDS latexdocs pdf
Daniel Leung9945e7f2018-08-23 11:11:11 -0700224)
225add_dependencies(pdfdocs pdf)
226
227endif()