blob: 5b674b2ea783204aac12cd8a032ce8d1de08f990 [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"
39copyright = "2015-2021 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-Paretas9dfbdf12021-06-28 16:24:59 +020077 "zephyr.kconfig-role",
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
David B. Kinder6000a622019-03-12 15:39:09 -0700101# This change will allow us to use bare back-tick notation to let
102# Sphinx hunt for a reference, starting with normal "document"
103# references such as :ref:, but also including :c: and :cpp: domains
104# (potentially) helping with API (doxygen) references simply by using
105# `name`
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200106default_role = "any"
Anas Nashif06d380c2015-05-13 14:05:30 -0400107
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200108pygments_style = "sphinx"
Anas Nashif06d380c2015-05-13 14:05:30 -0400109
Carol Lee1aa77332015-08-07 13:22:27 -0400110todo_include_todos = False
Anas Nashif089a10b2015-06-12 10:51:09 -0700111
Gerard Marull-Paretas45161172021-09-22 22:44:00 +0200112numfig = True
113
Anas Nashif089a10b2015-06-12 10:51:09 -0700114rst_epilog = """
David B. Kinder486c5a52018-05-04 16:31:05 -0700115.. include:: /substitutions.txt
Anas Nashif089a10b2015-06-12 10:51:09 -0700116"""
Anas Nashif06d380c2015-05-13 14:05:30 -0400117
Anas Nashif06d380c2015-05-13 14:05:30 -0400118# -- Options for HTML output ----------------------------------------------
119
David B. Kinder5c8398d2018-08-03 16:12:03 -0700120html_theme = "sphinx_rtd_theme"
121html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
Gerard Marull-Paretasf0d3db22021-05-17 19:22:17 +0200122html_theme_options = {
123 "logo_only": True,
124 "prev_next_buttons_location": None
125}
Anas Nashif12867502015-06-29 15:33:28 -0400126html_title = "Zephyr Project Documentation"
Gerard Marull-Paretas2d06ad72021-05-19 12:25:16 +0200127html_logo = str(ZEPHYR_BASE / "doc" / "_static" / "images" / "logo.svg")
Gerard Marull-Paretas1cecfe72021-06-30 15:03:11 +0200128html_favicon = str(ZEPHYR_BASE / "doc" / "_static" / "images" / "favicon.png")
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200129html_static_path = [str(ZEPHYR_BASE / "doc" / "_static")]
130html_last_updated_fmt = "%b %d, %Y"
Carol Lee1aa77332015-08-07 13:22:27 -0400131html_domain_indices = False
Carol Lee1aa77332015-08-07 13:22:27 -0400132html_split_index = True
David B. Kinderf3f266e2018-07-31 13:47:10 -0700133html_show_sourcelink = False
Rodrigo Caballero8d7b52f2015-10-16 09:30:15 -0500134html_show_sphinx = False
Gerard Marull-Paretas2d06ad72021-05-19 12:25:16 +0200135html_search_scorer = str(ZEPHYR_BASE / "doc" / "_static" / "js" / "scorer.js")
Anas Nashif06d380c2015-05-13 14:05:30 -0400136
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200137is_release = tags.has("release") # pylint: disable=undefined-variable
Gerard Marull-Paretasb4f968c2021-10-28 18:57:20 +0200138reference_prefix = ""
139if tags.has("publish"): # pylint: disable=undefined-variable
140 reference_prefix = f"/{version}" if is_release else "/latest"
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200141docs_title = "Docs / {}".format(version if is_release else "Latest")
Rodrigo Caballero8d7b52f2015-10-16 09:30:15 -0500142html_context = {
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200143 "show_license": True,
144 "docs_title": docs_title,
145 "is_release": is_release,
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200146 "current_version": version,
147 "versions": (
148 ("latest", "/"),
Gerard Marull-Paretas91304552021-10-19 17:21:38 +0200149 ("2.7.0", "/2.7.0/"),
Kumar Gala79a6c072021-06-01 21:10:08 -0500150 ("2.6.0", "/2.6.0/"),
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200151 ("2.5.0", "/2.5.0/"),
152 ("2.4.0", "/2.4.0/"),
153 ("2.3.0", "/2.3.0/"),
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200154 ("1.14.1", "/1.14.1/"),
155 ),
Gerard Marull-Paretasfe7529f2021-06-28 20:08:13 +0200156 "display_vcs_link": True,
Gerard Marull-Paretasb4f968c2021-10-28 18:57:20 +0200157 "reference_links": {
158 "API": f"{reference_prefix}/doxygen/html/index.html",
159 "Kconfig Options": f"{reference_prefix}/reference/kconfig/index.html",
160 "Devicetree Bindings": f"{reference_prefix}/reference/devicetree/bindings.html",
161 }
Rodrigo Caballero8d7b52f2015-10-16 09:30:15 -0500162}
Anas Nashifb7b23182017-01-03 14:43:02 -0500163
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200164# -- Options for LaTeX output ---------------------------------------------
165
166latex_elements = {
Gerard Marull-Paretas2f5a9d02021-07-22 16:14:51 +0200167 "papersize": "a4paper",
168 "maketitle": open(ZEPHYR_BASE / "doc" / "_static" / "latex" / "title.tex").read(),
169 "preamble": open(ZEPHYR_BASE / "doc" / "_static" / "latex" / "preamble.tex").read(),
170 "fontpkg": r"\usepackage{charter}",
171 "sphinxsetup": ",".join(
172 (
173 # NOTE: colors match those found in light.css stylesheet
174 "verbatimwithframe=false",
175 "VerbatimColor={HTML}{f0f2f4}",
176 "InnerLinkColor={HTML}{2980b9}",
177 "warningBgColor={HTML}{e9a499}",
178 "warningborder=0pt",
179 r"HeaderFamily=\rmfamily\bfseries",
180 )
181 ),
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200182}
Gerard Marull-Paretas2f5a9d02021-07-22 16:14:51 +0200183latex_logo = str(ZEPHYR_BASE / "doc" / "_static" / "images" / "logo-latex.pdf")
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200184latex_documents = [
Gerard Marull-Paretas2f5a9d02021-07-22 16:14:51 +0200185 ("index-tex", "zephyr.tex", "Zephyr Project Documentation", author, "manual"),
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200186]
187
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +0200188# -- Options for zephyr.doxyrunner plugin ---------------------------------
189
190doxyrunner_doxygen = os.environ.get("DOXYGEN_EXECUTABLE", "doxygen")
191doxyrunner_doxyfile = ZEPHYR_BASE / "doc" / "zephyr.doxyfile.in"
192doxyrunner_outdir = ZEPHYR_BUILD / "doxygen"
193doxyrunner_fmt = True
Gerard Marull-Paretasa42ee8b2021-10-03 19:32:42 +0200194doxyrunner_fmt_vars = {"ZEPHYR_BASE": str(ZEPHYR_BASE), "ZEPHYR_VERSION": version}
Gerard Marull-Paretas457f3a42021-04-16 10:47:43 +0200195
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200196# -- Options for Breathe plugin -------------------------------------------
197
Gerard Marull-Paretas830de4c2021-05-19 13:11:51 +0200198breathe_projects = {"Zephyr": str(doxyrunner_outdir / "xml")}
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200199breathe_default_project = "Zephyr"
200breathe_domain_by_extension = {
201 "h": "c",
202 "c": "c",
203}
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200204breathe_show_enumvalue_initializer = True
Gerard Marull-Paretas0e503412021-05-17 12:57:15 +0200205breathe_default_members = ("members", )
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200206
207cpp_id_attributes = [
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200208 "__syscall",
209 "__deprecated",
210 "__may_alias",
211 "__used",
212 "__unused",
213 "__weak",
Nicolas Pitre0dc7b9e2021-04-09 00:40:41 -0400214 "__attribute_const__",
Gerard Marull-Paretasf4edff02021-03-30 14:50:25 +0200215 "__DEPRECATED_MACRO",
216 "FUNC_NORETURN",
217 "__subsystem",
Gerard Marull-Paretas603e8752021-03-30 13:09:11 +0200218]
219c_id_attributes = cpp_id_attributes
220
221# -- Options for html_redirect plugin -------------------------------------
222
223html_redirect_pages = redirects.REDIRECTS
224
Gerard Marull-Paretas96c7d102021-04-06 00:02:03 +0200225# -- Options for zephyr.warnings_filter -----------------------------------
226
227warnings_filter_config = str(ZEPHYR_BASE / "doc" / "known-warnings.txt")
228warnings_filter_silent = False
229
Gerard Marull-Paretas95d8d2c2021-05-19 16:04:20 +0200230# -- Options for notfound.extension ---------------------------------------
231
Gerard Marull-Paretas45cce732021-06-22 11:16:25 +0200232notfound_urls_prefix = f"/{version}/" if is_release else "/latest/"
Gerard Marull-Paretas95d8d2c2021-05-19 16:04:20 +0200233
Gerard Marull-Paretasfe7529f2021-06-28 20:08:13 +0200234# -- Options for zephyr.vcs_link ------------------------------------------
235
236vcs_link_version = f"v{version}" if is_release else "main"
237vcs_link_base_url = f"https://github.com/zephyrproject-rtos/zephyr/blob/{vcs_link_version}"
238vcs_link_prefixes = {
239 "samples/.*": "",
240 "boards/.*": "",
241 ".*": "doc",
242}
243vcs_link_exclude = [
244 "reference/kconfig.*",
245 "reference/devicetree/bindings.*",
246 "reference/devicetree/compatibles.*",
247]
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")