blob: e9d77875763e33889547d7148d458e5780058904 [file] [log] [blame]
Gerard Marull-Paretas2b9b1632021-03-30 12:10:31 +02001# Zephyr documentation build configuration file.
2# Reference: https://www.sphinx-doc.org/en/master/usage/configuration.html
Anas Nashif06d380c2015-05-13 14:05:30 -04003
4import sys
5import os
Gerard Marull-Paretas4b09faf2021-03-30 14:38:59 +02006from pathlib import Path
Gerard Marull-Paretas7abf8382021-03-30 14:31:52 +02007import re
Anas Nashif06d380c2015-05-13 14:05:30 -04008
Gerard Marull-Paretas1829dc82021-07-20 14:25:27 +02009from sphinx.cmd.build import get_parser
Gerard Marull-Paretas0312b0b2021-03-30 12:22:20 +020010import sphinx_rtd_theme
11
12
Gerard Marull-Paretas1829dc82021-07-20 14:25:27 +020013args = get_parser().parse_args()
14ZEPHYR_BASE = Path(__file__).resolve().parents[1]
15ZEPHYR_BUILD = Path(args.outputdir).resolve()
Marti Bolivar1c852dd2018-06-07 21:45:55 -040016
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020017# Add the '_extensions' directory to sys.path, to enable finding Sphinx
Marti Bolivar6092fb02017-11-03 16:46:33 -040018# extensions within.
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020019sys.path.insert(0, str(ZEPHYR_BASE / "doc" / "_extensions"))
Carles Cufi8d5259a2018-11-12 16:14:51 +010020
Gerard Marull-Paretasb2469e12021-03-30 10:55:43 +020021# Add the '_scripts' directory to sys.path, to enable finding utility
22# modules.
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020023sys.path.insert(0, str(ZEPHYR_BASE / "doc" / "_scripts"))
Gerard Marull-Paretasb2469e12021-03-30 10:55:43 +020024
Marti Bolivarab822642019-01-23 08:31:06 -070025# Add the directory which contains the runners package as well,
26# for autodoc directives on runners.xyz.
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020027sys.path.insert(0, str(ZEPHYR_BASE / "scripts" / "west_commands"))
Marti Bolivarab822642019-01-23 08:31:06 -070028
Gerard Marull-Paretasb2469e12021-03-30 10:55:43 +020029import redirects
30
Carles Cufi8d5259a2018-11-12 16:14:51 +010031try:
Marti Bolivar2b3d9df2019-07-22 11:00:59 -060032 import west as west_found
33except ImportError:
34 west_found = False
Anas Nashif06d380c2015-05-13 14:05:30 -040035
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +020036# -- Project --------------------------------------------------------------
Anas Nashif06d380c2015-05-13 14:05:30 -040037
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020038project = "Zephyr Project"
Dan Kalowsky2a8fa6f2022-02-18 15:08:42 -080039copyright = "2015-2022 Zephyr Project members and individual contributors"
Gerard Marull-Paretas2f5a9d02021-07-22 16:14:51 +020040author = "The Zephyr Project Contributors"
Anas Nashif06d380c2015-05-13 14:05:30 -040041
Gerard Marull-Paretas7abf8382021-03-30 14:31:52 +020042# parse version from 'VERSION' file
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020043with open(ZEPHYR_BASE / "VERSION") as f:
Gerard Marull-Paretas7abf8382021-03-30 14:31:52 +020044 m = re.match(
45 (
46 r"^VERSION_MAJOR\s*=\s*(\d+)$\n"
47 + r"^VERSION_MINOR\s*=\s*(\d+)$\n"
48 + r"^PATCHLEVEL\s*=\s*(\d+)$\n"
49 + r"^VERSION_TWEAK\s*=\s*\d+$\n"
50 + r"^EXTRAVERSION\s*=\s*(.*)$"
51 ),
52 f.read(),
53 re.MULTILINE,
54 )
55
56 if not m:
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020057 sys.stderr.write("Warning: Could not extract kernel version\n")
Gerard Marull-Paretas7abf8382021-03-30 14:31:52 +020058 version = "Unknown"
59 else:
60 major, minor, patch, extra = m.groups(1)
61 version = ".".join((major, minor, patch))
62 if extra:
63 version += "-" + extra
Anas Nashif06d380c2015-05-13 14:05:30 -040064
Gerard Marull-Paretas2f5a9d02021-07-22 16:14:51 +020065release = version
66
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +020067# -- General configuration ------------------------------------------------
68
69extensions = [
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020070 "breathe",
71 "sphinx.ext.todo",
72 "sphinx.ext.extlinks",
73 "sphinx.ext.autodoc",
Gerard Marull-Paretas41271382021-07-20 16:12:23 +020074 "sphinx.ext.graphviz",
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020075 "zephyr.application",
76 "zephyr.html_redirects",
Gerard Marull-Paretasfc942ef2022-01-12 13:41:15 +010077 "zephyr.kconfig",
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020078 "zephyr.dtcompatible-role",
79 "zephyr.link-roles",
80 "sphinx_tabs.tabs",
Gerard Marull-Paretas96c7d102021-04-06 00:02:03 +020081 "zephyr.warnings_filter",
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +020082 "zephyr.doxyrunner",
Gerard Marull-Paretasfe7529f2021-06-28 20:08:13 +020083 "zephyr.vcs_link",
Gerard Marull-Paretas95d8d2c2021-05-19 16:04:20 +020084 "notfound.extension",
Gerard Marull-Paretas4dd15532021-05-10 19:11:14 +020085 "zephyr.external_content",
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +020086]
87
88# Only use SVG converter when it is really needed, e.g. LaTeX.
89if tags.has("svgconvert"): # pylint: disable=undefined-variable
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020090 extensions.append("sphinxcontrib.rsvgconverter")
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +020091
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020092templates_path = ["_templates"]
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +020093
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020094exclude_patterns = ["_build"]
Anas Nashif06d380c2015-05-13 14:05:30 -040095
Carles Cufi8d5259a2018-11-12 16:14:51 +010096if not west_found:
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020097 exclude_patterns.append("**/*west-apis*")
Carles Cufi8d5259a2018-11-12 16:14:51 +010098else:
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +020099 exclude_patterns.append("**/*west-not-found*")
Anas Nashif06d380c2015-05-13 14:05:30 -0400100
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200101pygments_style = "sphinx"
Anas Nashif06d380c2015-05-13 14:05:30 -0400102
Carol Lee1aa77332015-08-07 13:22:27 -0400103todo_include_todos = False
Anas Nashif089a10b2015-06-12 10:51:09 -0700104
Gerard Marull-Paretas45161172021-09-22 22:44:00 +0200105numfig = True
106
Anas Nashif089a10b2015-06-12 10:51:09 -0700107rst_epilog = """
David B. Kinder486c5a52018-05-04 16:31:05 -0700108.. include:: /substitutions.txt
Anas Nashif089a10b2015-06-12 10:51:09 -0700109"""
Anas Nashif06d380c2015-05-13 14:05:30 -0400110
Anas Nashif06d380c2015-05-13 14:05:30 -0400111# -- Options for HTML output ----------------------------------------------
112
David B. Kinder5c8398d2018-08-03 16:12:03 -0700113html_theme = "sphinx_rtd_theme"
114html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
Gerard Marull-Paretasf0d3db22021-05-17 19:22:17 +0200115html_theme_options = {
116 "logo_only": True,
117 "prev_next_buttons_location": None
118}
Anas Nashif12867502015-06-29 15:33:28 -0400119html_title = "Zephyr Project Documentation"
Gerard Marull-Paretas2d06ad72021-05-19 12:25:16 +0200120html_logo = str(ZEPHYR_BASE / "doc" / "_static" / "images" / "logo.svg")
Gerard Marull-Paretas1cecfe72021-06-30 15:03:11 +0200121html_favicon = str(ZEPHYR_BASE / "doc" / "_static" / "images" / "favicon.png")
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200122html_static_path = [str(ZEPHYR_BASE / "doc" / "_static")]
123html_last_updated_fmt = "%b %d, %Y"
Carol Lee1aa77332015-08-07 13:22:27 -0400124html_domain_indices = False
Carol Lee1aa77332015-08-07 13:22:27 -0400125html_split_index = True
David B. Kinderf3f266e2018-07-31 13:47:10 -0700126html_show_sourcelink = False
Rodrigo Caballero8d7b52f2015-10-16 09:30:15 -0500127html_show_sphinx = False
Gerard Marull-Paretas2d06ad72021-05-19 12:25:16 +0200128html_search_scorer = str(ZEPHYR_BASE / "doc" / "_static" / "js" / "scorer.js")
Anas Nashif06d380c2015-05-13 14:05:30 -0400129
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200130is_release = tags.has("release") # pylint: disable=undefined-variable
Gerard Marull-Paretasb4f968c2021-10-28 18:57:20 +0200131reference_prefix = ""
132if tags.has("publish"): # pylint: disable=undefined-variable
133 reference_prefix = f"/{version}" if is_release else "/latest"
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200134docs_title = "Docs / {}".format(version if is_release else "Latest")
Rodrigo Caballero8d7b52f2015-10-16 09:30:15 -0500135html_context = {
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200136 "show_license": True,
137 "docs_title": docs_title,
138 "is_release": is_release,
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200139 "current_version": version,
140 "versions": (
141 ("latest", "/"),
Dan Kalowsky3e084ac2022-02-18 15:17:00 -0800142 ("3.0.0", "/3.0.0/"),
Gerard Marull-Paretas91304552021-10-19 17:21:38 +0200143 ("2.7.0", "/2.7.0/"),
Kumar Gala79a6c072021-06-01 21:10:08 -0500144 ("2.6.0", "/2.6.0/"),
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200145 ("2.5.0", "/2.5.0/"),
146 ("2.4.0", "/2.4.0/"),
147 ("2.3.0", "/2.3.0/"),
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200148 ("1.14.1", "/1.14.1/"),
149 ),
Gerard Marull-Paretasfe7529f2021-06-28 20:08:13 +0200150 "display_vcs_link": True,
Gerard Marull-Paretasb4f968c2021-10-28 18:57:20 +0200151 "reference_links": {
152 "API": f"{reference_prefix}/doxygen/html/index.html",
Gerard Marull-Paretasfc942ef2022-01-12 13:41:15 +0100153 "Kconfig Options": f"{reference_prefix}/kconfig.html",
Gerard Marull-Paretasb4f968c2021-10-28 18:57:20 +0200154 "Devicetree Bindings": f"{reference_prefix}/reference/devicetree/bindings.html",
155 }
Rodrigo Caballero8d7b52f2015-10-16 09:30:15 -0500156}
Anas Nashifb7b23182017-01-03 14:43:02 -0500157
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200158# -- Options for LaTeX output ---------------------------------------------
159
160latex_elements = {
Gerard Marull-Paretas2f5a9d02021-07-22 16:14:51 +0200161 "papersize": "a4paper",
162 "maketitle": open(ZEPHYR_BASE / "doc" / "_static" / "latex" / "title.tex").read(),
163 "preamble": open(ZEPHYR_BASE / "doc" / "_static" / "latex" / "preamble.tex").read(),
164 "fontpkg": r"\usepackage{charter}",
165 "sphinxsetup": ",".join(
166 (
167 # NOTE: colors match those found in light.css stylesheet
168 "verbatimwithframe=false",
169 "VerbatimColor={HTML}{f0f2f4}",
170 "InnerLinkColor={HTML}{2980b9}",
171 "warningBgColor={HTML}{e9a499}",
172 "warningborder=0pt",
173 r"HeaderFamily=\rmfamily\bfseries",
174 )
175 ),
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200176}
Gerard Marull-Paretas2f5a9d02021-07-22 16:14:51 +0200177latex_logo = str(ZEPHYR_BASE / "doc" / "_static" / "images" / "logo-latex.pdf")
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200178latex_documents = [
Gerard Marull-Paretas2f5a9d02021-07-22 16:14:51 +0200179 ("index-tex", "zephyr.tex", "Zephyr Project Documentation", author, "manual"),
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200180]
181
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +0200182# -- Options for zephyr.doxyrunner plugin ---------------------------------
183
184doxyrunner_doxygen = os.environ.get("DOXYGEN_EXECUTABLE", "doxygen")
185doxyrunner_doxyfile = ZEPHYR_BASE / "doc" / "zephyr.doxyfile.in"
186doxyrunner_outdir = ZEPHYR_BUILD / "doxygen"
187doxyrunner_fmt = True
Gerard Marull-Paretasa42ee8b2021-10-03 19:32:42 +0200188doxyrunner_fmt_vars = {"ZEPHYR_BASE": str(ZEPHYR_BASE), "ZEPHYR_VERSION": version}
Gerard Marull-Paretasab64a672022-01-10 12:35:31 +0100189doxyrunner_outdir_var = "DOXY_OUT"
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +0200190
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200191# -- Options for Breathe plugin -------------------------------------------
192
Gerard Marull-Paretas830de4c2021-05-19 13:11:51 +0200193breathe_projects = {"Zephyr": str(doxyrunner_outdir / "xml")}
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200194breathe_default_project = "Zephyr"
195breathe_domain_by_extension = {
196 "h": "c",
197 "c": "c",
198}
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200199breathe_show_enumvalue_initializer = True
Gerard Marull-Paretas0e503412021-05-17 12:57:15 +0200200breathe_default_members = ("members", )
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200201
202cpp_id_attributes = [
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200203 "__syscall",
204 "__deprecated",
205 "__may_alias",
206 "__used",
207 "__unused",
208 "__weak",
Nicolas Pitre0dc7b9e2021-04-09 00:40:41 -0400209 "__attribute_const__",
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200210 "__DEPRECATED_MACRO",
211 "FUNC_NORETURN",
212 "__subsystem",
Christopher Friedtf2d675b2022-02-01 15:30:19 -0500213 "ALWAYS_INLINE",
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200214]
215c_id_attributes = cpp_id_attributes
216
217# -- Options for html_redirect plugin -------------------------------------
218
219html_redirect_pages = redirects.REDIRECTS
220
Gerard Marull-Paretas96c7d102021-04-06 00:02:03 +0200221# -- Options for zephyr.warnings_filter -----------------------------------
222
223warnings_filter_config = str(ZEPHYR_BASE / "doc" / "known-warnings.txt")
Gerard Marull-Paretas96c7d102021-04-06 00:02:03 +0200224
Gerard Marull-Paretas95d8d2c2021-05-19 16:04:20 +0200225# -- Options for notfound.extension ---------------------------------------
226
Gerard Marull-Paretas45cce732021-06-22 11:16:25 +0200227notfound_urls_prefix = f"/{version}/" if is_release else "/latest/"
Gerard Marull-Paretas95d8d2c2021-05-19 16:04:20 +0200228
Gerard Marull-Paretasfe7529f2021-06-28 20:08:13 +0200229# -- Options for zephyr.vcs_link ------------------------------------------
230
231vcs_link_version = f"v{version}" if is_release else "main"
232vcs_link_base_url = f"https://github.com/zephyrproject-rtos/zephyr/blob/{vcs_link_version}"
233vcs_link_prefixes = {
234 "samples/.*": "",
235 "boards/.*": "",
236 ".*": "doc",
237}
238vcs_link_exclude = [
239 "reference/kconfig.*",
240 "reference/devicetree/bindings.*",
241 "reference/devicetree/compatibles.*",
242]
243
Gerard Marull-Paretasfc942ef2022-01-12 13:41:15 +0100244# -- Options for zephyr.kconfig -------------------------------------------
245
246kconfig_generate_db = True
247kconfig_ext_paths = [ZEPHYR_BASE]
248
Gerard Marull-Paretas4dd15532021-05-10 19:11:14 +0200249# -- Options for zephyr.external_content ----------------------------------
250
251external_content_contents = [
252 (ZEPHYR_BASE / "doc", "[!_]*"),
253 (ZEPHYR_BASE, "boards/**/*.rst"),
254 (ZEPHYR_BASE, "boards/**/doc"),
255 (ZEPHYR_BASE, "samples/**/*.rst"),
256 (ZEPHYR_BASE, "samples/**/doc"),
257]
258external_content_keep = [
259 "reference/kconfig/*",
260 "reference/devicetree/bindings.rst",
261 "reference/devicetree/bindings/**/*",
262 "reference/devicetree/compatibles/**/*",
263]
264
Gerard Marull-Paretas41271382021-07-20 16:12:23 +0200265# -- Options for sphinx.ext.graphviz --------------------------------------
266
267graphviz_dot = os.environ.get("DOT_EXECUTABLE", "dot")
268graphviz_output_format = "svg"
269graphviz_dot_args = [
270 "-Gbgcolor=transparent",
271 "-Nstyle=filled",
272 "-Nfillcolor=white",
273 "-Ncolor=gray60",
274 "-Nfontcolor=gray25",
275 "-Ecolor=gray60",
276]
277
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200278# -- Linkcheck options ----------------------------------------------------
Anas Nashif38a77792019-01-20 08:56:48 -0500279
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200280extlinks = {
281 "jira": ("https://jira.zephyrproject.org/browse/%s", ""),
282 "github": ("https://github.com/zephyrproject-rtos/zephyr/issues/%s", ""),
283}
David B. Kinder2a1adfc2017-04-27 14:59:04 -0700284
285linkcheck_timeout = 30
286linkcheck_workers = 10
David B. Kinder2a1adfc2017-04-27 14:59:04 -0700287linkcheck_anchors = False
288
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200289
David B. Kinder6bd5dff2017-01-27 16:20:21 -0800290def setup(app):
Gerard Marull-Paretasa6d8c232021-03-12 14:33:16 +0100291 # theme customizations
292 app.add_css_file("css/custom.css")
Gerard Marull-Paretasa6d8c232021-03-12 14:33:16 +0100293 app.add_js_file("js/dark-mode-toggle.min.mjs", type="module")
David B. Kinderaa9b6022019-06-06 14:13:56 -0700294
Fabio Utzig6111da42020-05-18 17:42:20 -0300295 app.add_js_file("https://www.googletagmanager.com/gtag/js?id=UA-831873-47")
Gerard Marull-Paretasbbab8152021-03-29 23:47:39 +0200296 app.add_js_file("js/ga-tracker.js")