doc: add cross compiling guide
[dpdk.git] / doc / guides / conf.py
index 01ce16d..c883306 100644 (file)
@@ -1,32 +1,5 @@
-#   BSD LICENSE
-#   Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
-#   All rights reserved.
-#
-#   Redistribution and use in source and binary forms, with or without
-#   modification, are permitted provided that the following conditions
-#   are met:
-#
-#   * Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-#   * Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in
-#   the documentation and/or other materials provided with the
-#   distribution.
-#   * Neither the name of Intel Corporation nor the names of its
-#   contributors may be used to endorse or promote products derived
-#   from this software without specific prior written permission.
-#
-#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-#   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-#   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-#   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-#   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-#   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-#   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-#   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-#   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2010-2015 Intel Corporation
 
 from __future__ import print_function
 import subprocess
 
 from __future__ import print_function
 import subprocess
@@ -47,11 +20,17 @@ except:
     # Python 3.
     import configparser
 
     # Python 3.
     import configparser
 
+try:
+    import sphinx_rtd_theme
 
 
-project = 'Data Plane Development Kit'
-
-if LooseVersion(sphinx_version) >= LooseVersion('1.3.1'):
     html_theme = "sphinx_rtd_theme"
     html_theme = "sphinx_rtd_theme"
+    html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
+except:
+    print('Install the sphinx ReadTheDocs theme for improved html documentation '
+          'layout: pip install sphinx_rtd_theme')
+    pass
+
+project = 'Data Plane Development Kit'
 html_logo = '../logo/DPDK_logo_vertical_rev_small.png'
 latex_logo = '../logo/DPDK_logo_horizontal_tag.png'
 html_add_permalinks = ""
 html_logo = '../logo/DPDK_logo_vertical_rev_small.png'
 latex_logo = '../logo/DPDK_logo_horizontal_tag.png'
 html_add_permalinks = ""
@@ -79,7 +58,7 @@ latex_documents = [
 ]
 
 # Latex directives to be included directly in the latex/pdf docs.
 ]
 
 # Latex directives to be included directly in the latex/pdf docs.
-latex_preamble = r"""
+custom_latex_preamble = r"""
 \usepackage[utf8]{inputenc}
 \usepackage[T1]{fontenc}
 \usepackage{helvet}
 \usepackage[utf8]{inputenc}
 \usepackage[T1]{fontenc}
 \usepackage{helvet}
@@ -95,7 +74,7 @@ latex_elements = {
     'classoptions': ',openany,oneside',
     'babel': '\\usepackage[english]{babel}',
     # customize Latex formatting
     'classoptions': ',openany,oneside',
     'babel': '\\usepackage[english]{babel}',
     # customize Latex formatting
-    'preamble': latex_preamble
+    'preamble': custom_latex_preamble
 }
 
 
 }
 
 
@@ -178,7 +157,7 @@ def process_numref(app, doctree, from_docname):
             node.replace_self(newnode)
 
 
             node.replace_self(newnode)
 
 
-def generate_overview_table(output_filename, section, table_name, title):
+def generate_overview_table(output_filename, table_id, section, table_name, title):
     """
     Function to generate the Overview Table from the ini files that define
     the features for each driver.
     """
     Function to generate the Overview Table from the ini files that define
     the features for each driver.
@@ -211,18 +190,23 @@ def generate_overview_table(output_filename, section, table_name, title):
     ini_files.sort()
 
     # Build up a list of the table header names from the ini filenames.
     ini_files.sort()
 
     # Build up a list of the table header names from the ini filenames.
-    header_names = []
+    pmd_names = []
     for ini_filename in ini_files:
         name = ini_filename[:-4]
         name = name.replace('_vf', 'vf')
     for ini_filename in ini_files:
         name = ini_filename[:-4]
         name = name.replace('_vf', 'vf')
+        pmd_names.append(name)
 
 
-        # Pad the table header names to match the existing format.
+    # Pad the table header names.
+    max_header_len = len(max(pmd_names, key=len))
+    header_names = []
+    for name in pmd_names:
         if '_vec' in name:
             pmd, vec = name.split('_')
         if '_vec' in name:
             pmd, vec = name.split('_')
-            name = '{0:{fill}{align}7}vec'.format(pmd, fill='.', align='<')
+            name = '{0:{fill}{align}{width}}vec'.format(pmd,
+                    fill='.', align='<', width=max_header_len-3)
         else:
         else:
-            name = '{0:{fill}{align}10}'.format(name, fill=' ', align='<')
-
+            name = '{0:{fill}{align}{width}}'.format(name,
+                    fill=' ', align='<', width=max_header_len)
         header_names.append(name)
 
     # Create a dict of the defined features for each driver from the ini files.
         header_names.append(name)
 
     # Create a dict of the defined features for each driver from the ini files.
@@ -258,9 +242,8 @@ def generate_overview_table(output_filename, section, table_name, title):
     outfile = open(output_filename, 'w')
     num_cols = len(header_names)
 
     outfile = open(output_filename, 'w')
     num_cols = len(header_names)
 
-    print('.. table:: ' + table_name + '\n',
-          file=outfile)
-
+    print_table_css(outfile, table_id)
+    print('.. table:: ' + table_name + '\n', file=outfile)
     print_table_header(outfile, num_cols, header_names, title)
     print_table_body(outfile, num_cols, ini_files, ini_data, default_features)
 
     print_table_header(outfile, num_cols, header_names, title)
     print_table_body(outfile, num_cols, ini_files, ini_data, default_features)
 
@@ -275,7 +258,7 @@ def print_table_header(outfile, num_cols, header_names, title):
 
     print_table_row(outfile, title, line)
 
 
     print_table_row(outfile, title, line)
 
-    for i in range(1, 10):
+    for i in range(1, len(header_names[0])):
         line = ''
         for name in header_names:
             line += ' ' + name[i]
         line = ''
         for name in header_names:
             line += ' ' + name[i]
@@ -316,32 +299,100 @@ def print_table_divider(outfile, num_cols):
     print_table_row(outfile, feature, line)
 
 
     print_table_row(outfile, feature, line)
 
 
+def print_table_css(outfile, table_id):
+    template = """
+.. raw:: html
+
+   <style>
+      .wy-nav-content {
+         opacity: .99;
+      }
+      table#idx {
+         cursor: default;
+         overflow: hidden;
+      }
+      table#idx th, table#idx td {
+         text-align: center;
+      }
+      table#idx th {
+         font-size: 72%;
+         white-space: pre-wrap;
+         vertical-align: top;
+         padding: 0.5em 0;
+         min-width: 0.9em;
+         width: 2em;
+      }
+      table#idx col:first-child {
+         width: 0;
+      }
+      table#idx th:first-child {
+         vertical-align: bottom;
+      }
+      table#idx td {
+         font-size: 70%;
+         padding: 1px;
+      }
+      table#idx td:first-child {
+         padding-left: 1em;
+         text-align: left;
+      }
+      table#idx tr:nth-child(2n-1) td {
+         background-color: rgba(210, 210, 210, 0.2);
+      }
+      table#idx th:not(:first-child):hover,
+      table#idx td:not(:first-child):hover {
+         position: relative;
+      }
+      table#idx th:not(:first-child):hover::after,
+      table#idx td:not(:first-child):hover::after {
+         content: '';
+         height: 6000px;
+         top: -3000px;
+         width: 100%;
+         left: 0;
+         position: absolute;
+         z-index: -1;
+         background-color: #ffb;
+      }
+      table#idx tr:hover td {
+         background-color: #ffb;
+      }
+   </style>
+"""
+    print(template.replace("idx", "id%d" % (table_id)), file=outfile)
+
+
 def setup(app):
     table_file = dirname(__file__) + '/nics/overview_table.txt'
 def setup(app):
     table_file = dirname(__file__) + '/nics/overview_table.txt'
-    generate_overview_table(table_file,
+    generate_overview_table(table_file, 1,
                             'Features',
                             'Features availability in networking drivers',
                             'Feature')
     table_file = dirname(__file__) + '/cryptodevs/overview_feature_table.txt'
                             'Features',
                             'Features availability in networking drivers',
                             'Feature')
     table_file = dirname(__file__) + '/cryptodevs/overview_feature_table.txt'
-    generate_overview_table(table_file,
+    generate_overview_table(table_file, 1,
                             'Features',
                             'Features availability in crypto drivers',
                             'Feature')
     table_file = dirname(__file__) + '/cryptodevs/overview_cipher_table.txt'
                             'Features',
                             'Features availability in crypto drivers',
                             'Feature')
     table_file = dirname(__file__) + '/cryptodevs/overview_cipher_table.txt'
-    generate_overview_table(table_file,
+    generate_overview_table(table_file, 2,
                             'Cipher',
                             'Cipher algorithms in crypto drivers',
                             'Cipher algorithm')
     table_file = dirname(__file__) + '/cryptodevs/overview_auth_table.txt'
                             'Cipher',
                             'Cipher algorithms in crypto drivers',
                             'Cipher algorithm')
     table_file = dirname(__file__) + '/cryptodevs/overview_auth_table.txt'
-    generate_overview_table(table_file,
+    generate_overview_table(table_file, 3,
                             'Auth',
                             'Authentication algorithms in crypto drivers',
                             'Authentication algorithm')
     table_file = dirname(__file__) + '/cryptodevs/overview_aead_table.txt'
                             'Auth',
                             'Authentication algorithms in crypto drivers',
                             'Authentication algorithm')
     table_file = dirname(__file__) + '/cryptodevs/overview_aead_table.txt'
-    generate_overview_table(table_file,
+    generate_overview_table(table_file, 4,
                             'AEAD',
                             'AEAD algorithms in crypto drivers',
                             'AEAD algorithm')
                             'AEAD',
                             'AEAD algorithms in crypto drivers',
                             'AEAD algorithm')
+    table_file = dirname(__file__) + '/compressdevs/overview_feature_table.txt'
+    generate_overview_table(table_file, 1,
+                            'Features',
+                            'Features availability in compression drivers',
+                            'Feature')
 
     if LooseVersion(sphinx_version) < LooseVersion('1.3.1'):
         print('Upgrade sphinx to version >= 1.3.1 for '
 
     if LooseVersion(sphinx_version) < LooseVersion('1.3.1'):
         print('Upgrade sphinx to version >= 1.3.1 for '
@@ -350,3 +401,5 @@ def setup(app):
         app.add_role('numref', numref_role)
         # Process the numref references once the doctree has been created.
         app.connect('doctree-resolved', process_numref)
         app.add_role('numref', numref_role)
         # Process the numref references once the doctree has been created.
         app.connect('doctree-resolved', process_numref)
+
+    app.add_stylesheet('css/custom.css')