blob: 85f63f00f90c287b9256a1ed38dcff4e49166f8a [file] [log] [blame]
Minos Galanakisdff2eae2020-07-21 15:13:52 +01001#-------------------------------------------------------------------------------
2# Copyright (c) 2020, Arm Limited. All rights reserved.
3#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
7
Raef Coles69817322020-10-19 14:14:14 +01008cmake_minimum_required(VERSION 3.15)
Minos Galanakisdff2eae2020-07-21 15:13:52 +01009
10add_custom_target(docs)
11
12find_package(Python3)
13find_package(Sphinx)
14find_package(PythonModules COMPONENTS m2r sphinx-rtd-theme sphinxcontrib.plantuml)
15find_package(PlantUML)
16find_package(Doxygen 1.8.0)
17find_package(LATEX COMPONENTS PDFLATEX)
18
19################################## ENV #########################################
20
21set(SPHINXCFG_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/user_guide)
22set(SPHINX_TMP_DOC_DIR ${CMAKE_CURRENT_BINARY_DIR}/temp)
23set(SPHINXCFG_TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in")
24set(DOXYCFG_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/reference_manual)
25set(DOXYCFG_DOXYGEN_CFG_DIR ${CMAKE_SOURCE_DIR}/doxygen)
26
27# Enable to request the interface to build the doxygen documentation as well
28set(DOXYCFG_DOXYGEN_BUILD False)
29
30################################## SPHINX ######################################
31set(SPHINXCFG_COPY_FILES True)
32set(SPHINXCFG_RENDER_CONF True)
33
34add_custom_target(tfm_docs_sphinx_cfg
35 DEPENDS ${SPHINX_TMP_DOC_DIR}/conf.py
36)
37add_custom_command(OUTPUT ${SPHINX_TMP_DOC_DIR}/conf.py
38 COMMAND ${CMAKE_COMMAND} -E make_directory ${SPHINX_TMP_DOC_DIR}
39 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/build_docs/conf.py ${SPHINX_TMP_DOC_DIR}/conf.py
40 MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/build_docs/conf.py
41 BYPRODUCTS ${SPHINX_TMP_DOC_DIR}
42)
43
44configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tfm_env.py.in ${SPHINX_TMP_DOC_DIR}/tfm_env.py @ONLY)
45
46if (SPHINX_FOUND AND PLANTUML_FOUND AND PY_M2R_FOUND AND PY_SPHINX-RTD-THEME_FOUND AND PY_SPHINXCONTRIB.PLANTUML)
47
48 file(GLOB_RECURSE SPHINXCFG_DOC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.rst)
49
50 add_custom_command(OUTPUT "${SPHINXCFG_OUTPUT_PATH}/html/index.html"
51 OUTPUT "${SPHINXCFG_OUTPUT_PATH}/html/"
52 COMMAND "${SPHINX_EXECUTABLE}" -b html "${SPHINX_TMP_DOC_DIR}" "${SPHINXCFG_OUTPUT_PATH}/html"
53 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
54 DEPENDS tfm_docs_sphinx_cfg
55 DEPENDS ${SPHINXCFG_DOC_FILES}
56 )
57 add_custom_target(tfm_docs_userguide_html
58 DEPENDS "${SPHINXCFG_OUTPUT_PATH}/html/index.html"
59 DEPENDS "${SPHINXCFG_OUTPUT_PATH}/html/"
60 )
61 add_dependencies(docs tfm_docs_userguide_html)
62
63 if (LATEX_PDFLATEX_FOUND)
64 add_custom_command(OUTPUT "${SPHINXCFG_OUTPUT_PATH}/latex/TF-M.tex"
65 OUTPUT "${SPHINXCFG_OUTPUT_PATH}/latex/"
66 COMMAND "${SPHINX_EXECUTABLE}" -b latex "${SPHINX_TMP_DOC_DIR}" "${SPHINXCFG_OUTPUT_PATH}/latex"
67 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
68 DEPENDS tfm_docs_sphinx_cfg
69 DEPENDS ${SPHINXCFG_DOC_FILES}
70 )
71 add_custom_command(OUTPUT "${SPHINXCFG_OUTPUT_PATH}/latex/TF-M.pdf"
72 COMMAND ${PDFLATEX_COMPILER} TF-M.tex
73 COMMAND ${CMAKE_COMMAND} -E copy TF-M.tex ${SPHINXCFG_OUTPUT_PATH}/tf-m_user_guide.pdf
74 WORKING_DIRECTORY ${SPHINXCFG_OUTPUT_PATH}/latex/
75 DEPENDS "${SPHINXCFG_OUTPUT_PATH}/latex/TF-M.tex"
76 )
77 add_custom_target(tfm_docs_userguide_pdf
78 DEPENDS "${SPHINXCFG_OUTPUT_PATH}/latex/TF-M.pdf"
79 )
80 add_dependencies(docs tfm_docs_userguide_pdf)
81 endif()
82endif()
83
84################################## DOXYGEN #####################################
85
86configure_file(${CMAKE_SOURCE_DIR}/doxygen/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
87
88if (DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND AND PLANTUML_FOUND)
89
90 file(GLOB_RECURSE DOXYCFG_DOC_FILES ${CMAKE_SOURCE_DIR}/*.c ${CMAKE_SOURCE_DIR}/*.h)
91
92 add_custom_command(OUTPUT ${DOXYCFG_OUTPUT_PATH}/html
93 OUTPUT ${DOXYCFG_OUTPUT_PATH}/latex
94 OUTPUT ${DOXYCFG_OUTPUT_PATH}/latex/refman.pdf
95 COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
96 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
97 DEPENDS ${DOXYCFG_DOC_FILES}
98 )
99 add_custom_target(tfm_docs_refman_html
100 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
101 DEPENDS ${DOXYCFG_OUTPUT_PATH}/html
102 )
103 add_dependencies(docs tfm_docs_refman_html)
104
105 if (LATEX_PDFLATEX_FOUND)
106 add_custom_command(OUTPUT "${DOXYCFG_OUTPUT_PATH}/latex/refman.pdf"
107 COMMAND "${PDFLATEX_COMPILER} refman.tex"
108 COMMAND ${CMAKE_COMMAND} -E copy refman.tex ${DOXYCFG_OUTPUT_PATH}/tf-m_reference_manual.pdf
109 WORKING_DIRECTORY ${DOXYCFG_OUTPUT_PATH}/latex/
110 DEPENDS "${DOXYCFG_OUTPUT_PATH}/latex/refman.tex"
111 )
112 add_custom_target(tfm_docs_refman_pdf
113 DEPENDS ${DOXYCFG_OUTPUT_PATH}/latex/refman.pdf
114 DEPENDS tfm_docs_refman_html
115 )
116 add_dependencies(docs tfm_docs_refman_pdf)
117 endif()
118endif()