blob: 69f129cf84080afc813194241b592975e52d9cd3 [file] [log] [blame]
Minos Galanakisdff2eae2020-07-21 15:13:52 +01001#-------------------------------------------------------------------------------
Summer Qine6cd5e12021-06-23 14:26:17 +08002# Copyright (c) 2020-2021, Arm Limited. All rights reserved.
Minos Galanakisdff2eae2020-07-21 15:13:52 +01003#
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
Anton Komlev6be16032021-10-13 21:51:23 +010012list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
Anton Komlevceafd012021-10-11 23:21:11 +010013
Minos Galanakisdff2eae2020-07-21 15:13:52 +010014find_package(Python3)
15find_package(Sphinx)
Anton Komlevceafd012021-10-11 23:21:11 +010016
17# suppress warnings on mismatched names in PythonModules
18set(FPHSA_NAME_MISMATCHED True)
Anton Komlev27a52c22021-10-16 02:04:09 +010019find_package(PythonModules COMPONENTS m2r2 sphinx-rtd-theme sphinxcontrib.plantuml)
Minos Galanakisdff2eae2020-07-21 15:13:52 +010020find_package(PlantUML)
21find_package(Doxygen 1.8.0)
22find_package(LATEX COMPONENTS PDFLATEX)
23
24################################## ENV #########################################
25
Anton Komlev2d2a6fc2022-02-20 15:47:53 +000026include(../cmake/version.cmake)
Anton Komlevceafd012021-10-11 23:21:11 +010027
28project("Trusted Firmware M. Documentation" VERSION ${TFM_VERSION} LANGUAGES)
29
Minos Galanakisdff2eae2020-07-21 15:13:52 +010030set(SPHINXCFG_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/user_guide)
31set(SPHINX_TMP_DOC_DIR ${CMAKE_CURRENT_BINARY_DIR}/temp)
32set(SPHINXCFG_TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in")
33set(DOXYCFG_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/reference_manual)
34set(DOXYCFG_DOXYGEN_CFG_DIR ${CMAKE_SOURCE_DIR}/doxygen)
35
36# Enable to request the interface to build the doxygen documentation as well
37set(DOXYCFG_DOXYGEN_BUILD False)
38
39################################## SPHINX ######################################
40set(SPHINXCFG_COPY_FILES True)
41set(SPHINXCFG_RENDER_CONF True)
42
43add_custom_target(tfm_docs_sphinx_cfg
44 DEPENDS ${SPHINX_TMP_DOC_DIR}/conf.py
45)
46add_custom_command(OUTPUT ${SPHINX_TMP_DOC_DIR}/conf.py
47 COMMAND ${CMAKE_COMMAND} -E make_directory ${SPHINX_TMP_DOC_DIR}
Anton Komlevceafd012021-10-11 23:21:11 +010048 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/conf.py ${SPHINX_TMP_DOC_DIR}/conf.py
49 MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/conf.py
Minos Galanakisdff2eae2020-07-21 15:13:52 +010050 BYPRODUCTS ${SPHINX_TMP_DOC_DIR}
51)
52
53configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tfm_env.py.in ${SPHINX_TMP_DOC_DIR}/tfm_env.py @ONLY)
54
Anton Komlev27a52c22021-10-16 02:04:09 +010055if (SPHINX_FOUND AND PLANTUML_FOUND AND PY_M2R2_FOUND AND PY_SPHINX-RTD-THEME_FOUND AND PY_SPHINXCONTRIB.PLANTUML)
Minos Galanakisdff2eae2020-07-21 15:13:52 +010056
57 file(GLOB_RECURSE SPHINXCFG_DOC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.rst)
58
59 add_custom_command(OUTPUT "${SPHINXCFG_OUTPUT_PATH}/html/index.html"
60 OUTPUT "${SPHINXCFG_OUTPUT_PATH}/html/"
Summer Qine6cd5e12021-06-23 14:26:17 +080061 COMMAND "${SPHINX_EXECUTABLE}" -W -b html "${SPHINX_TMP_DOC_DIR}" "${SPHINXCFG_OUTPUT_PATH}/html"
Minos Galanakisdff2eae2020-07-21 15:13:52 +010062 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
63 DEPENDS tfm_docs_sphinx_cfg
64 DEPENDS ${SPHINXCFG_DOC_FILES}
65 )
Anton Komlevceafd012021-10-11 23:21:11 +010066 add_custom_target(tfm_docs_userguide_html ALL
Minos Galanakisdff2eae2020-07-21 15:13:52 +010067 DEPENDS "${SPHINXCFG_OUTPUT_PATH}/html/index.html"
68 DEPENDS "${SPHINXCFG_OUTPUT_PATH}/html/"
69 )
70 add_dependencies(docs tfm_docs_userguide_html)
71
72 if (LATEX_PDFLATEX_FOUND)
73 add_custom_command(OUTPUT "${SPHINXCFG_OUTPUT_PATH}/latex/TF-M.tex"
74 OUTPUT "${SPHINXCFG_OUTPUT_PATH}/latex/"
75 COMMAND "${SPHINX_EXECUTABLE}" -b latex "${SPHINX_TMP_DOC_DIR}" "${SPHINXCFG_OUTPUT_PATH}/latex"
76 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
77 DEPENDS tfm_docs_sphinx_cfg
78 DEPENDS ${SPHINXCFG_DOC_FILES}
79 )
80 add_custom_command(OUTPUT "${SPHINXCFG_OUTPUT_PATH}/latex/TF-M.pdf"
81 COMMAND ${PDFLATEX_COMPILER} TF-M.tex
82 COMMAND ${CMAKE_COMMAND} -E copy TF-M.tex ${SPHINXCFG_OUTPUT_PATH}/tf-m_user_guide.pdf
83 WORKING_DIRECTORY ${SPHINXCFG_OUTPUT_PATH}/latex/
84 DEPENDS "${SPHINXCFG_OUTPUT_PATH}/latex/TF-M.tex"
85 )
86 add_custom_target(tfm_docs_userguide_pdf
87 DEPENDS "${SPHINXCFG_OUTPUT_PATH}/latex/TF-M.pdf"
88 )
89 add_dependencies(docs tfm_docs_userguide_pdf)
90 endif()
91endif()
92
93################################## DOXYGEN #####################################
94
95configure_file(${CMAKE_SOURCE_DIR}/doxygen/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
96
97if (DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND AND PLANTUML_FOUND)
98
99 file(GLOB_RECURSE DOXYCFG_DOC_FILES ${CMAKE_SOURCE_DIR}/*.c ${CMAKE_SOURCE_DIR}/*.h)
100
101 add_custom_command(OUTPUT ${DOXYCFG_OUTPUT_PATH}/html
102 OUTPUT ${DOXYCFG_OUTPUT_PATH}/latex
103 OUTPUT ${DOXYCFG_OUTPUT_PATH}/latex/refman.pdf
104 COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
105 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
106 DEPENDS ${DOXYCFG_DOC_FILES}
107 )
Anton Komlevceafd012021-10-11 23:21:11 +0100108 add_custom_target(tfm_docs_refman_html ALL
Minos Galanakisdff2eae2020-07-21 15:13:52 +0100109 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
110 DEPENDS ${DOXYCFG_OUTPUT_PATH}/html
111 )
112 add_dependencies(docs tfm_docs_refman_html)
113
114 if (LATEX_PDFLATEX_FOUND)
115 add_custom_command(OUTPUT "${DOXYCFG_OUTPUT_PATH}/latex/refman.pdf"
116 COMMAND "${PDFLATEX_COMPILER} refman.tex"
117 COMMAND ${CMAKE_COMMAND} -E copy refman.tex ${DOXYCFG_OUTPUT_PATH}/tf-m_reference_manual.pdf
118 WORKING_DIRECTORY ${DOXYCFG_OUTPUT_PATH}/latex/
119 DEPENDS "${DOXYCFG_OUTPUT_PATH}/latex/refman.tex"
120 )
121 add_custom_target(tfm_docs_refman_pdf
122 DEPENDS ${DOXYCFG_OUTPUT_PATH}/latex/refman.pdf
123 DEPENDS tfm_docs_refman_html
124 )
125 add_dependencies(docs tfm_docs_refman_pdf)
126 endif()
127endif()