From e32a449aa0a7d55428c1a60a6de669751c0ff1cf Mon Sep 17 00:00:00 2001 From: Vladimir Marchenko Date: Thu, 11 Jan 2024 09:24:14 +0100 Subject: [PATCH] Updated pack and doc build flows (#93) Pack generation is updated to gen-pack lib v0.9.1 and is aligned with CMSIS 6. Documentation is updated to Doxygen 1.9.6 and newer layout. --- .github/dependabot.yaml | 8 + .github/workflows/build.yaml | 54 - .github/workflows/gh-pages.yml | 8 +- .github/workflows/pack.yml | 35 + .gitignore | 9 +- ARM.CMSIS-NN.pdsc | 3 +- Documentation/Doxygen/gen_doc.sh | 120 ++ Documentation/Doxygen/linkchecker.rc | 12 + {DoxyGen => Documentation/Doxygen}/nn.dxy.in | 325 +-- Documentation/Doxygen/src/history.md | 3 + .../Doxygen/src}/images/CIFAR10_CNN.gif | Bin .../Doxygen/src}/images/CMSIS-NN-OVERVIEW.PNG | Bin .../Doxygen/src}/images/GRU.gif | Bin Documentation/Doxygen/src/mainpage.md | 73 + .../cmsis_logo_white_small.png | Bin .../Doxygen/style_template/darkmode_toggle.js | 281 +++ .../Doxygen/style_template}/dropdown.png | Bin .../Doxygen/style_template/extra_navtree.css | 19 +- .../Doxygen/style_template/extra_search.css | 49 + .../style_template/extra_stylesheet.css | 1742 +++++++++++++++++ .../Doxygen/style_template/extra_tabs.css | 55 +- .../Doxygen/style_template}/footer.html | 0 .../Doxygen/style_template}/footer.js.in | 0 .../Doxygen/style_template}/header.html | 31 +- .../Doxygen/style_template/layout.xml | 24 +- .../Doxygen/style_template}/navtree.js | 4 + .../Doxygen/style_template/resize.js | 155 ++ .../Doxygen/style_template/search.css | 297 +++ .../Doxygen/style_template}/tab_b.png | Bin .../Doxygen/style_template/tab_topnav.png | Bin 0 -> 232 bytes Documentation/Doxygen/style_template/tabs.js | 29 + .../Doxygen/style_template}/version.css | 5 - Documentation/README.md | 15 + Documentation/index.html | 14 + Documentation/version.js | 4 +- DoxyGen/check_links.sh | 68 - DoxyGen/gen_doc.sh | 123 -- DoxyGen/templates/check.png | Bin 922 -> 0 bytes DoxyGen/templates/extra_stylesheet.css | 1425 -------------- DoxyGen/templates/search.css | 240 --- Examples/README.md | 4 + Include/arm_nn_types.h | 17 +- Include/arm_nnfunctions.h | 81 +- Include/arm_nnsupportfunctions.h | 25 +- LICENSE.txt => LICENSE | 0 README.md | 2 +- Scripts/gen_pack.sh | 110 -- Scripts/git-configure.sh | 25 - Scripts/git-version.clean | 20 - Scripts/git-version.smudge | 24 - gen_pack.sh | 112 ++ 51 files changed, 3282 insertions(+), 2368 deletions(-) create mode 100644 .github/dependabot.yaml delete mode 100644 .github/workflows/build.yaml create mode 100644 .github/workflows/pack.yml create mode 100755 Documentation/Doxygen/gen_doc.sh create mode 100644 Documentation/Doxygen/linkchecker.rc rename {DoxyGen => Documentation/Doxygen}/nn.dxy.in (91%) create mode 100644 Documentation/Doxygen/src/history.md rename {DoxyGen => Documentation/Doxygen/src}/images/CIFAR10_CNN.gif (100%) rename {DoxyGen => Documentation/Doxygen/src}/images/CMSIS-NN-OVERVIEW.PNG (100%) rename {DoxyGen => Documentation/Doxygen/src}/images/GRU.gif (100%) create mode 100644 Documentation/Doxygen/src/mainpage.md rename {DoxyGen/templates => Documentation/Doxygen/style_template}/cmsis_logo_white_small.png (100%) create mode 100644 Documentation/Doxygen/style_template/darkmode_toggle.js rename {DoxyGen/templates => Documentation/Doxygen/style_template}/dropdown.png (100%) rename DoxyGen/templates/navtree.css => Documentation/Doxygen/style_template/extra_navtree.css (91%) create mode 100644 Documentation/Doxygen/style_template/extra_search.css create mode 100644 Documentation/Doxygen/style_template/extra_stylesheet.css rename DoxyGen/templates/tabs.css => Documentation/Doxygen/style_template/extra_tabs.css (68%) rename {DoxyGen/templates => Documentation/Doxygen/style_template}/footer.html (100%) rename {DoxyGen/templates => Documentation/Doxygen/style_template}/footer.js.in (100%) rename {DoxyGen/templates => Documentation/Doxygen/style_template}/header.html (73%) rename DoxyGen/templates/Layout_forUser.xml => Documentation/Doxygen/style_template/layout.xml (92%) rename {DoxyGen/templates => Documentation/Doxygen/style_template}/navtree.js (98%) create mode 100644 Documentation/Doxygen/style_template/resize.js create mode 100644 Documentation/Doxygen/style_template/search.css rename {DoxyGen/templates => Documentation/Doxygen/style_template}/tab_b.png (100%) create mode 100644 Documentation/Doxygen/style_template/tab_topnav.png create mode 100644 Documentation/Doxygen/style_template/tabs.js rename {DoxyGen/templates => Documentation/Doxygen/style_template}/version.css (93%) create mode 100644 Documentation/README.md create mode 100644 Documentation/index.html delete mode 100755 DoxyGen/check_links.sh delete mode 100755 DoxyGen/gen_doc.sh delete mode 100644 DoxyGen/templates/check.png delete mode 100644 DoxyGen/templates/extra_stylesheet.css delete mode 100644 DoxyGen/templates/search.css rename LICENSE.txt => LICENSE (100%) delete mode 100755 Scripts/gen_pack.sh delete mode 100755 Scripts/git-configure.sh delete mode 100755 Scripts/git-version.clean delete mode 100755 Scripts/git-version.smudge create mode 100755 gen_pack.sh diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 00000000..0cb7b348 --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,8 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 10 + rebase-strategy: disabled diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml deleted file mode 100644 index 5cfbf2e8..00000000 --- a/.github/workflows/build.yaml +++ /dev/null @@ -1,54 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates -# -# SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the License); you may -# not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an AS IS BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Build documentation and pack -on: - workflow_dispatch: - push: - branches: - - main - pull_request: - branches: - - main - release: - types: [published] -jobs: - pack: - name: Generate pack - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Fetch tags - if: ${{ github.event_name == 'release' }} - run: | - git fetch --tags --force - - - uses: Open-CMSIS-Pack/gen-pack-action@main - with: - doxygen-version: 1.9.2 - packchk-version: 1.3.95 - gen-doc-script: ./DoxyGen/gen_doc.sh - check-links-script: | - ./DoxyGen/check_links.sh \ - ./Documentation/html/index.html \ - ./DoxyGen - doc-path: ./Documentation/html - gen-pack-script: ./Scripts/gen_pack.sh - gen-pack-output: ./output - gh-pages-branch: gh-pages diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 86c9f134..62d30fdd 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -30,17 +30,17 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Pages - uses: actions/configure-pages@v3 + uses: actions/configure-pages@v4 - name: Upload artifact - uses: actions/upload-pages-artifact@v1 + uses: actions/upload-pages-artifact@v3 with: # Upload entire repository path: '.' - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v1 + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/pack.yml b/.github/workflows/pack.yml new file mode 100644 index 00000000..7af36689 --- /dev/null +++ b/.github/workflows/pack.yml @@ -0,0 +1,35 @@ +name: Build documentation and pack +on: + workflow_dispatch: + pull_request: + push: + branches: [main] + release: + types: [published] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + pack: + name: Generate pack + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Fetch tags + run: | + git fetch --tags --force + + - uses: Open-CMSIS-Pack/gen-pack-action@main + with: + doxygen-version: 1.9.6 + packchk-version: 1.4.1 + gen-doc-script: ./Documentation/Doxygen/gen_doc.sh + doc-path: ./Documentation/html + gen-pack-script: ./gen_pack.sh --no-preprocess + gen-pack-output: ./output + gh-pages-branch: gh-pages diff --git a/.gitignore b/.gitignore index db78a5f4..dbe787b3 100644 --- a/.gitignore +++ b/.gitignore @@ -8,8 +8,11 @@ Tests/UnitTest/PregeneratedData/* Tests/UnitTest/Output/* Tests/UnitTest/Unity/* Documentation/html/* -DoxyGen/history.txt -DoxyGen/nn.dxy +Documentation/DoxyGen/src/history.txt +Documentation/DoxyGen/nn.dxy build output -__pycache__ \ No newline at end of file +__pycache__ +*.bak +# Output of the linkchecker tool +linkchecker-out.csv \ No newline at end of file diff --git a/ARM.CMSIS-NN.pdsc b/ARM.CMSIS-NN.pdsc index c469766e..f216d8cc 100644 --- a/ARM.CMSIS-NN.pdsc +++ b/ARM.CMSIS-NN.pdsc @@ -4,8 +4,9 @@ CMSIS-NN CMSIS NN software library of efficient neural network kernels ARM - + LICENSE https://www.keil.com/pack/ + https:/github.com/arm-software/CMSIS-NN.git diff --git a/Documentation/Doxygen/gen_doc.sh b/Documentation/Doxygen/gen_doc.sh new file mode 100755 index 00000000..98a2906c --- /dev/null +++ b/Documentation/Doxygen/gen_doc.sh @@ -0,0 +1,120 @@ +#!/usr/bin/env bash +# +# SPDX-FileCopyrightText: Copyright 2022-2024 Arm Limited and/or its affiliates +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the License); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Version: 3.0 +# Date: 2024-01-09 +# This bash script generates CMSIS-NN Documentation: +# +# Pre-requisites: +# - bash shell (for Windows: install git for Windows) +# - doxygen 1.9.6 +# - linkchecker (can be skipped with -s) + +set -o pipefail + +# Set version of gen pack library +# For available versions see https://github.com/Open-CMSIS-Pack/gen-pack/tags. +# Use the tag name without the prefix "v", e.g., 0.7.0 +REQUIRED_GEN_PACK_LIB="0.9.1" + +DIRNAME=$(dirname "$(readlink -f "$0")") +GENDIR=../html +REQ_DXY_VERSION="1.9.6" + +RUN_LINKCHECKER=1 + +function usage() { + echo "Usage: $(basename "$0") [-h] [-s] [-c ]" + echo " -h,--help Show usage" + echo " -s,--no-linkcheck Skip linkcheck" + echo " Can be given multiple times. Defaults to all components." +} + +while [[ $# -gt 0 ]]; do + case $1 in + '-h'|'help') + usage + exit 1 + ;; + '-s'|'--no-linkcheck') + RUN_LINKCHECKER=0 + ;; + *) + echo "Invalid command line argument: $1" >&2 + usage + exit 1 + ;; + esac + shift # past argument +done + +############ DO NOT EDIT BELOW ########### + +# Set GEN_PACK_LIB_PATH to use a specific gen-pack library root +# ... instead of bootstrap based on REQUIRED_GEN_PACK_LIB +if [[ -f "${GEN_PACK_LIB_PATH}/gen-pack" ]]; then + . "${GEN_PACK_LIB_PATH}/gen-pack" +else + . <(curl -sL "https://raw.githubusercontent.com/Open-CMSIS-Pack/gen-pack/main/bootstrap") +fi + +find_git +find_doxygen "${REQ_DXY_VERSION}" +[[ ${RUN_LINKCHECKER} != 0 ]] && find_linkchecker + +if [ -z "${VERSION_FULL}" ]; then + VERSION_FULL=$(git_describe "v") +fi + +pushd "${DIRNAME}" > /dev/null || exit 1 + +echo "Generating documentation ..." + +projectName=$(grep -E "PROJECT_NAME\s+=" nn.dxy.in | sed -r -e 's/[^"]*"([^"]+)".*/\1/') +projectNumberFull="${VERSION_FULL}" +projectNumber="${projectNumberFull%+*}" +datetime=$(date -u +'%a %b %e %Y %H:%M:%S') +year=$(date -u +'%Y') + +sed -e "s/{projectNumber}/${projectNumber}/" nn.dxy.in \ + | sed -e "s/{cmsisProjectNumber}/${cmsisProjectNumber}/" \ + > nn.dxy + +git_changelog -f html -p "v" > src/history.txt + +echo_log "\"${UTILITY_DOXYGEN}\" nn.dxy" +"${UTILITY_DOXYGEN}" nn.dxy + +mkdir -p "${DIRNAME}/${GENDIR}/search/" +cp -f "${DIRNAME}/style_template/search.css" "${DIRNAME}/${GENDIR}/search/" +cp -f "${DIRNAME}/style_template/navtree.js" "${DIRNAME}/${GENDIR}/" +cp -f "${DIRNAME}/style_template/resize.js" "${DIRNAME}/${GENDIR}/" + +sed -e "s/{datetime}/${datetime}/" "${DIRNAME}/style_template/footer.js.in" \ + | sed -e "s/{year}/${year}/" \ + | sed -e "s/{projectName}/${projectName}/" \ + | sed -e "s/{projectNumber}/${projectNumber}/" \ + | sed -e "s/{projectNumberFull}/${projectNumberFull}/" \ + > "${DIRNAME}/${GENDIR}/footer.js" + +popd > /dev/null || exit 1 + +[[ ${RUN_LINKCHECKER} != 0 ]] && check_links "${DIRNAME}/../html/index.html" "${DIRNAME}" + + +exit 0 diff --git a/Documentation/Doxygen/linkchecker.rc b/Documentation/Doxygen/linkchecker.rc new file mode 100644 index 00000000..3129c0b8 --- /dev/null +++ b/Documentation/Doxygen/linkchecker.rc @@ -0,0 +1,12 @@ +[output] +ignoreerrors= + mag.svg + mag_sel.svg + mag_d.svg + mag_seld.svg + ../tab_a.png + ../tab_ad.png + +[filtering] +ignorewarnings= + http-redirected diff --git a/DoxyGen/nn.dxy.in b/Documentation/Doxygen/nn.dxy.in similarity index 91% rename from DoxyGen/nn.dxy.in rename to Documentation/Doxygen/nn.dxy.in index a83c5813..391f80c6 100644 --- a/DoxyGen/nn.dxy.in +++ b/Documentation/Doxygen/nn.dxy.in @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2022-2023 Arm Limited and/or its affiliates +# SPDX-FileCopyrightText: Copyright 2022-2024 Arm Limited and/or its affiliates # # SPDX-License-Identifier: Apache-2.0 # @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Doxyfile 1.9.2 +# Doxyfile 1.9.6 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -28,6 +28,15 @@ # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). +# Note: +# +# Use doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options @@ -67,24 +76,37 @@ PROJECT_BRIEF = "CMSIS NN Software Library" # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = templates/cmsis_logo_white_small.png +PROJECT_LOGO = ./style_template/cmsis_logo_white_small.png + # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = ../Documentation +OUTPUT_DIRECTORY = ../ -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes -# performance problems for the file system. +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# number of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode @@ -96,14 +118,14 @@ ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English @@ -122,7 +144,7 @@ BRIEF_MEMBER_DESC = YES # brief descriptions will be completely suppressed. # The default value is: YES. -REPEAT_BRIEF = NO +REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found @@ -246,7 +268,7 @@ PYTHON_DOCSTRING = NO # documentation from any documented member that it re-implements. # The default value is: YES. -INHERIT_DOCS = NO +INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part @@ -433,7 +455,7 @@ SUBGROUPING = YES # SEPARATE_MEMBER_PAGES. # The default value is: NO. -INLINE_GROUPED_CLASSES = NO +INLINE_GROUPED_CLASSES = YES # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in @@ -443,7 +465,7 @@ INLINE_GROUPED_CLASSES = NO # Man pages) or section (for LaTeX and RTF). # The default value is: NO. -INLINE_SIMPLE_STRUCTS = NO +INLINE_SIMPLE_STRUCTS = YES # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So @@ -469,7 +491,7 @@ TYPEDEF_HIDES_STRUCT = YES LOOKUP_CACHE_SIZE = 0 -# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use +# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use # during processing. When set to 0 doxygen will based this on the number of # cores available in the system. You can set it explicitly to a value larger # than 0 to get more control over the balance between CPU load and processing @@ -563,7 +585,8 @@ HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO @@ -594,14 +617,15 @@ INTERNAL_DOCS = NO # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly # deal with such files in case they appear in the input. For filesystems that -# are not case sensitive the option should be be set to NO to properly deal with +# are not case sensitive the option should be set to NO to properly deal with # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On # Windows (including Cygwin) and MacOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. -# The default value is: system dependent. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. CASE_SENSE_NAMES = YES @@ -702,7 +726,7 @@ SORT_BY_SCOPE_NAME = NO # accept a match between prototype and implementation in such cases. # The default value is: NO. -STRICT_PROTO_MATCHING = NO +STRICT_PROTO_MATCHING = YES # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. @@ -789,7 +813,7 @@ FILE_VERSION_FILTER = # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = templates/Layout_forUser.xml +LAYOUT_FILE = ./style_template/layout.xml # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib @@ -851,7 +875,15 @@ WARN_IF_INCOMPLETE_DOC = YES # WARN_IF_INCOMPLETE_DOC # The default value is: NO. -WARN_NO_PARAMDOC = NO +WARN_NO_PARAMDOC = YES + +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about +# undocumented enumeration values. If set to NO, doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS @@ -868,13 +900,27 @@ WARN_AS_ERROR = NO # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard -# error (stderr). +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). WARN_LOGFILE = @@ -888,20 +934,32 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = history.txt \ - ../Include/ \ - ../Source/ \ - +INPUT = ./src/mainpage.md \ + ./src/history.md \ + ./src/history.txt \ + ../../Include/ \ + ../../Source/ \ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 +# This tag can be used to specify the character encoding of the source files +# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING) if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding +# "INPUT_ENCODING" for further information on supported encodings. + +INPUT_FILE_ENCODING = + # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. @@ -981,15 +1039,15 @@ RECURSIVE = YES # run. EXCLUDE = \ - ../Source/DistanceFunctions/arm_boolean_distance_template.h \ - ../Source/DistanceFunctions/arm_boolean_distance.c + ../../Source/DistanceFunctions/arm_boolean_distance_template.h \ + ../../Source/DistanceFunctions/arm_boolean_distance.c # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. -EXCLUDE_SYMLINKS = NO +EXCLUDE_SYMLINKS = YES # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude @@ -1006,7 +1064,7 @@ EXCLUDE_PATTERNS = */RTE/* \ # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test +# ANamespace::AClass, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* @@ -1044,7 +1102,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = images +IMAGE_PATH = ./src/images # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -1061,6 +1119,11 @@ IMAGE_PATH = images # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # +# Note that doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. @@ -1102,6 +1165,15 @@ FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- @@ -1239,10 +1311,11 @@ CLANG_DATABASE_PATH = ALPHABETICAL_INDEX = NO -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = arm_ @@ -1289,7 +1362,7 @@ HTML_FILE_EXTENSION = .html # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_HEADER = templates/header.html +HTML_HEADER = ./style_template/header.html # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard @@ -1299,7 +1372,7 @@ HTML_HEADER = templates/header.html # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FOOTER = templates/footer.html +HTML_FOOTER = ./style_template/footer.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of @@ -1321,11 +1394,19 @@ HTML_STYLESHEET = # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. # This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = templates/extra_stylesheet.css +HTML_EXTRA_STYLESHEET = ./style_template/extra_stylesheet.css \ + ./style_template/extra_navtree.css \ + ./style_template/extra_search.css \ + ./style_template/extra_tabs.css \ + ./style_template/version.css # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1335,14 +1416,24 @@ HTML_EXTRA_STYLESHEET = templates/extra_stylesheet.css # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_FILES = templates/tabs.css \ - templates/search.css \ - templates/navtree.css \ - templates/tab_b.png \ - templates/navtree.js \ - templates/version.css \ - templates/dropdown.png \ - ../LICENSE.txt +HTML_EXTRA_FILES = ./style_template/tab_b.png \ + ./style_template/tabs.js \ + ./style_template/darkmode_toggle.js \ + ./style_template/navtree.js \ + ./style_template/dropdown.png + +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generate light mode output, DARK always +# generate dark mode output, AUTO_LIGHT automatically set the mode according to +# the user preference, use light mode if no preference is set (the default), +# AUTO_DARK automatically set the mode according to the user preference, use +# dark mode if no preference is set and TOGGLE allow to user to switch between +# light and dark mode via a button. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = TOGGLE # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to @@ -1438,6 +1529,13 @@ GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. @@ -1618,7 +1716,7 @@ ECLIPSE_DOC_ID = org.doxygen.Project # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -DISABLE_INDEX = NO +DISABLE_INDEX = YES # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag @@ -1642,7 +1740,7 @@ GENERATE_TREEVIEW = YES # area (value NO) or if it should extend to the full height of the window (value # YES). Setting this to YES gives a layout similar to # https://docs.readthedocs.io with more room for contents, but less room for the -# project logo, title, and description. If either GENERATOR_TREEVIEW or +# project logo, title, and description. If either GENERATE_TREEVIEW or # DISABLE_INDEX is set to NO, this option has no effect. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1664,7 +1762,7 @@ ENUM_VALUES_PER_LINE = 1 # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. -TREEVIEW_WIDTH = 250 +TREEVIEW_WIDTH = 330 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. @@ -1673,6 +1771,13 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for @@ -1693,17 +1798,6 @@ HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. @@ -2294,7 +2388,8 @@ SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the -# preprocessor. +# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of +# RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = @@ -2386,15 +2481,6 @@ EXTERNAL_PAGES = YES # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. @@ -2427,35 +2513,50 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. +# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of +# subgraphs. When you want a differently looking font in the dot files that +# doxygen generates you can specify fontname, fontcolor and fontsize attributes. +# For details please see Node, +# Edge and Graph Attributes specification You need to make sure dot is able +# to find the font, which can be done by putting it in a standard location or by +# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. Default graphviz fontsize is 14. +# The default value is: fontname=Helvetica,fontsize=10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" + +# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can +# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. Complete documentation about +# arrows shapes. +# The default value is: labelfontname=Helvetica,labelfontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTNAME = Helvetica +DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10" -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. +# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes +# around nodes set 'shape=plain' or 'shape=plaintext' Shapes specification +# The default value is: shape=box,height=0.2,width=0.4. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTSIZE = 10 +DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. +# You can set the path where dot can find font specified with fontname in +# DOT_COMMON_ATTR and others dot attributes. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a +# graph for each documented class showing the direct and indirect inheritance +# relations. In case HAVE_DOT is set as well dot will be used to draw the graph, +# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set +# to TEXT the direct and indirect inheritance relations will be shown as texts / +# links. +# Possible values are: NO, YES, TEXT and GRAPH. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. CLASS_GRAPH = NO @@ -2469,7 +2570,8 @@ CLASS_GRAPH = NO COLLABORATION_GRAPH = NO # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. +# groups, showing the direct groups dependencies. See also the chapter Grouping +# in the manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2584,6 +2686,13 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES +# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels +# of child directories generated in directory dependency graphs by dot. +# Minimum value: 1, maximum value: 25, default value: 1. +# This tag requires that the tag DIRECTORY_GRAPH is set to YES. + +DIR_GRAPH_MAX_DEPTH = 1 + # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: @@ -2637,10 +2746,10 @@ MSCFILE_DIRS = DIAFILE_DIRS = # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file. If left blank, it is assumed -# PlantUML is not used or called during a preprocessing step. Doxygen will -# generate a warning when it encounters a \startuml command in this case and -# will not generate output for the diagram. +# path where java can find the plantuml.jar file or to the filename of jar file +# to be used. If left blank, it is assumed PlantUML is not used or called during +# a preprocessing step. Doxygen will generate a warning when it encounters a +# \startuml command in this case and will not generate output for the diagram. PLANTUML_JAR_PATH = @@ -2678,18 +2787,6 @@ DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = NO - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support @@ -2702,6 +2799,8 @@ DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated # graphs. +# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal +# graphical representation for inheritance and collaboration diagrams is used. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. diff --git a/Documentation/Doxygen/src/history.md b/Documentation/Doxygen/src/history.md new file mode 100644 index 00000000..4023d3d4 --- /dev/null +++ b/Documentation/Doxygen/src/history.md @@ -0,0 +1,3 @@ +# Revision History {#rev_hist} + +The table below provides information about the changes delivered with specific versions of CMSIS-NN. diff --git a/DoxyGen/images/CIFAR10_CNN.gif b/Documentation/Doxygen/src/images/CIFAR10_CNN.gif similarity index 100% rename from DoxyGen/images/CIFAR10_CNN.gif rename to Documentation/Doxygen/src/images/CIFAR10_CNN.gif diff --git a/DoxyGen/images/CMSIS-NN-OVERVIEW.PNG b/Documentation/Doxygen/src/images/CMSIS-NN-OVERVIEW.PNG similarity index 100% rename from DoxyGen/images/CMSIS-NN-OVERVIEW.PNG rename to Documentation/Doxygen/src/images/CMSIS-NN-OVERVIEW.PNG diff --git a/DoxyGen/images/GRU.gif b/Documentation/Doxygen/src/images/GRU.gif similarity index 100% rename from DoxyGen/images/GRU.gif rename to Documentation/Doxygen/src/images/GRU.gif diff --git a/Documentation/Doxygen/src/mainpage.md b/Documentation/Doxygen/src/mainpage.md new file mode 100644 index 00000000..1637a9f8 --- /dev/null +++ b/Documentation/Doxygen/src/mainpage.md @@ -0,0 +1,73 @@ +# CMSIS NN Software Library {#mainpage} + +![TOC] + +## Introduction {#intro} + +This user manual describes the CMSIS NN software library, a collection of efficient neural network kernels developed to maximize the performance and minimize the memory footprint of neural networks on Arm Cortex-M processors. + +The library is divided into a number of functions each covering a specific category: + + - \ref NNConv + - \ref Acti + - \ref FC + - \ref SVDF + - \ref Pooling + - \ref Softmax + - \ref groupElementwise + - \ref LSTM + +The figure below illustrates the CMSIS-NN block diagram. + +![CMSIS-NN Block Diagram](./images/CMSIS-NN-OVERVIEW.PNG) + +## Supported Processors {#Processors} + +CMSIS-NN targets Cortex-M processors with typically three different implementations for each function. Each implementation targets a different group of processors: + + - Processors without Single Instruction Multiple Data(SIMD) capability (e.g, Cortex-M0) + - Processors with DSP extension (e.g Cortex-M4) + - Processors with Arm M-Profile Vector Extension(MVE) instructions (e.g Cortex-M55) + +The correct implementation is picked through feature flags and the user does not have to explicit set it. + +## Access to CMSIS-NN {#pack} + +CMSIS-NN is actively maintained in the [**CMSIS-NN GitHub repository**](https://github.com/ARM-software/CMSIS-NN) and is released as a standalone [**CMSIS-NN pack**](https://www.keil.arm.com/packs/cmsis-nn-arm/versions/) in the [CMSIS-Pack format](https://open-cmsis-pack.github.io/Open-CMSIS-Pack-Spec/main/html/index.html). + +Also see [**CMSIS Documentation**](https://arm-software.github.io/CMSIS_6/) for an overview of other CMSIS software components, tools and specifications. + +## Quantization Specification {#Framework} + +The library follows the [int8](https://www.tensorflow.org/lite/performance/quantization_spec) and int16 quantization specification of TensorFlow Lite for Microcontrollers. + +## Examples {#Examples} + +An example image recognition application using TensorFlow Flow Lite for Microcontrollers as an inference engine and CMSIS-NN as the optimized library can be found in the Examples directory. + +## Pre-processor Macros {#Macros} + +**Feature flag based macros** + +The macros below are defined in a build system based on feature flags for a chosen processor or architecture input to a compiler. These tie in to the classification in \ref Macros. + +For a CMSIS-NN file compiled as `armclang -mcpu=cortex-m4 --target=arm-arm-none-eabi -I -Ofast -O file.c` , the macro `ARM_MATH_DSP` is enabled as Cortex-M4 has the DSP extension as a feature. + + - `ARM_MATH_DSP` + - Selects code for processors with DSP extension. + + - `ARM_MATH_MVEI` + - Selects code for processors which supports MVE instructions. + +**User set macros** + + - `ARM_MATH_AUTOVECTORIZE` + - Applicable when ARM_MATH_MVEI is active to let the compiler auto vectorize functions, if available, that uses inline assembly. This has to be explicitly set at compile time. + +## Inclusive Language {#Inclusive} + +This product confirms to Arm’s inclusive language policy and, to the best of our knowledge, does not contain any non-inclusive language. If you find something that concerns you, email terms@arm.com. + +# Copyright Notice {#Copyright} + +SPDX-FileCopyrightText: Copyright 2010-2023 Arm Limited and/or its affiliates diff --git a/DoxyGen/templates/cmsis_logo_white_small.png b/Documentation/Doxygen/style_template/cmsis_logo_white_small.png similarity index 100% rename from DoxyGen/templates/cmsis_logo_white_small.png rename to Documentation/Doxygen/style_template/cmsis_logo_white_small.png diff --git a/Documentation/Doxygen/style_template/darkmode_toggle.js b/Documentation/Doxygen/style_template/darkmode_toggle.js new file mode 100644 index 00000000..b2bd94f1 --- /dev/null +++ b/Documentation/Doxygen/style_template/darkmode_toggle.js @@ -0,0 +1,281 @@ +/** + +The code below is based on the Doxygen Awesome project with some minor modifications +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DarkModeToggle extends HTMLElement { + static icon = '' + static icond = '' + static title = "Toggle Light/Dark Mode" + + static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode" + static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode" + + static _staticConstructor = function() { + DarkModeToggle.enableDarkMode(DarkModeToggle.userPreference) + // Update the color scheme when the browsers preference changes + // without user interaction on the website. + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + DarkModeToggle.onSystemPreferenceChanged() + }) + // Update the color scheme when the tab is made visible again. + // It is possible that the appearance was changed in another tab + // while this tab was in the background. + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + DarkModeToggle.onSystemPreferenceChanged() + } + }); + }() + + static addButton() { + + var tbuttons = document.getElementsByTagName("dark-mode-toggle"); + var toggleButton; + var titleArea = document.getElementById("titlearea"); + var searchBox = document.getElementById("MSearchBox"); + var mainMenu = document.getElementById("main-menu"); + var navRow1 = document.getElementById("navrow1"); + var mainMenuVisible = false; + if (!tbuttons.length){ + toggleButton = document.createElement('dark-mode-toggle') + toggleButton.title = DarkModeToggle.title + } else {toggleButton=tbuttons[0]} + + + if (DarkModeToggle.darkModeEnabled){ + toggleButton.innerHTML=DarkModeToggle.icond + } else { + toggleButton.innerHTML=DarkModeToggle.icon + } + + if (mainMenu) { + var menuStyle = window.getComputedStyle(mainMenu); + mainMenuVisible = menuStyle.display!=='none' + } + var searchBoxPos1 = document.getElementById("searchBoxPos1"); + if (searchBox) { // (1) search box visible + searchBox.parentNode.appendChild(toggleButton) + } else if (navRow1) { // (2) no search box, static menu bar + var li = document.createElement('li'); + li.style = 'float: right;' + li.appendChild(toggleButton); + toggleButton.style = 'width: 24px; height: 25px; padding-top: 11px; float: right;'; + var row = document.querySelector('#navrow1 > ul:first-of-type'); + row.appendChild(li) + } else if (mainMenu && mainMenuVisible) { // (3) no search box + dynamic menu bar expanded + var li = document.createElement('li'); + li.style = 'float: right;' + li.appendChild(toggleButton); + toggleButton.style = 'width: 14px; height: 36px; padding-top: 10px; float: right;'; + mainMenu.appendChild(li) + } else if (searchBoxPos1) { // (4) no search box + dynamic menu bar collapsed + toggleButton.style = 'width: 24px; height: 36px; padding-top: 10px; float: right;'; + searchBoxPos1.style = 'top: 0px;' + searchBoxPos1.appendChild(toggleButton); + } else if (titleArea) { // (5) no search box and no navigation tabs + toggleButton.style = 'width: 24px; height: 24px; position: absolute; right: 0px; top: 34px;'; + titleArea.append(toggleButton); + } + } + + static init() { + $(function() { + $(document).ready(function() { + + $(document).ready(function(){ + DarkModeToggle.addButton(); + }) + $(window).resize(function(){ + DarkModeToggle.addButton(); + }) + DarkModeToggle.setDarkModeVisibility(DarkModeToggle.darkModeEnabled) + }) + }) + } + + constructor() { + super(); + this.onclick=this.toggleDarkMode + } + + + static createCookie(name, value, days) { + if (days) { + var date = new Date(); + date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); + var expires = "; expires=" + date.toGMTString(); + } + else var expires = ""; + + document.cookie = name + "=" + value + expires + "; path=/"; + } + + static readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(';'); + for (var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') c = c.substring(1, c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); + } + return null; + } + + static eraseCookie(name) { + DarkModeToggle.createCookie(name, "", -1); + } + + /** + * @returns `true` for dark-mode, `false` for light-mode system preference + */ + static get systemPreference() { + return window.matchMedia('(prefers-color-scheme: dark)').matches + } + + static get prefersDarkModeInLightMode() { + if (window.chrome) { // Chrome supports localStorage in combination with file:// but not cookies + return localStorage.getItem(DarkModeToggle.prefersDarkModeInLightModeKey) + } else { // Other browsers support cookies in combination with file:// but not localStorage + return DarkModeToggle.readCookie('doxygen_prefers_dark')=='1' + } + } + + static set prefersDarkModeInLightMode(preference) { + if (window.chrome) { + if (preference) { + localStorage.setItem(DarkModeToggle.prefersDarkModeInLightModeKey, true) + } else { + localStorage.removeItem(DarkModeToggle.prefersDarkModeInLightModeKey) + } + } else { + if (preference) { + DarkModeToggle.createCookie('doxygen_prefers_dark','1',365) + } else { + DarkModeToggle.eraseCookie('doxygen_prefers_dark') + } + } + } + + static get prefersLightModeInDarkMode() { + if (window.chrome) { // Chrome supports localStorage in combination with file:// but not cookies + return localStorage.getItem(DarkModeToggle.prefersLightModeInDarkModeKey) + } else { // Other browsers support cookies in combination with file:// but not localStorage + return DarkModeToggle.readCookie('doxygen_prefers_light')=='1' + } + } + + static set prefersLightModeInDarkMode(preference) { + if (window.chrome) { + if (preference) { + localStorage.setItem(DarkModeToggle.prefersLightModeInDarkModeKey, true) + } else { + localStorage.removeItem(DarkModeToggle.prefersLightModeInDarkModeKey) + } + } else { + if (preference) { + DarkModeToggle.createCookie('doxygen_prefers_light','1',365) + } else { + DarkModeToggle.eraseCookie('doxygen_prefers_light') + } + } + } + + + /** + * @returns `true` for dark-mode, `false` for light-mode user preference + */ + static get userPreference() { + return (!DarkModeToggle.systemPreference && DarkModeToggle.prefersDarkModeInLightMode) || + (DarkModeToggle.systemPreference && !DarkModeToggle.prefersLightModeInDarkMode) + } + + static set userPreference(userPreference) { + DarkModeToggle.darkModeEnabled = userPreference + if (!userPreference) { + if (DarkModeToggle.systemPreference) { + DarkModeToggle.prefersLightModeInDarkMode = true + } else { + DarkModeToggle.prefersDarkModeInLightMode = false + } + } else { + if (!DarkModeToggle.systemPreference) { + DarkModeToggle.prefersDarkModeInLightMode = true + } else { + DarkModeToggle.prefersLightModeInDarkMode = false + } + } + DarkModeToggle.onUserPreferenceChanged() + } + + static setDarkModeVisibility(enable) { + var darkModeStyle, lightModeStyle; + if(enable) { + darkModeStyle = 'inline-block'; + lightModeStyle = 'none' + } else { + darkModeStyle = 'none'; + lightModeStyle = 'inline-block' + } + document.querySelectorAll('.dark-mode-visible').forEach(function(el) { + el.style.display = darkModeStyle; + }); + document.querySelectorAll('.light-mode-visible').forEach(function(el) { + el.style.display = lightModeStyle; + }); + } + static enableDarkMode(enable) { + if(enable) { + DarkModeToggle.darkModeEnabled = true + document.documentElement.classList.add("dark-mode") + document.documentElement.classList.remove("light-mode") + } else { + DarkModeToggle.darkModeEnabled = false + document.documentElement.classList.remove("dark-mode") + document.documentElement.classList.add("light-mode") + } + DarkModeToggle.setDarkModeVisibility(enable) + } + + static onSystemPreferenceChanged() { + DarkModeToggle.darkModeEnabled = DarkModeToggle.userPreference + DarkModeToggle.enableDarkMode(DarkModeToggle.darkModeEnabled) + } + + static onUserPreferenceChanged() { + DarkModeToggle.enableDarkMode(DarkModeToggle.darkModeEnabled) + } + + toggleDarkMode() { + DarkModeToggle.userPreference = !DarkModeToggle.userPreference + DarkModeToggle.addButton(); + } +} + +customElements.define("dark-mode-toggle", DarkModeToggle); + +DarkModeToggle.init(); diff --git a/DoxyGen/templates/dropdown.png b/Documentation/Doxygen/style_template/dropdown.png similarity index 100% rename from DoxyGen/templates/dropdown.png rename to Documentation/Doxygen/style_template/dropdown.png diff --git a/DoxyGen/templates/navtree.css b/Documentation/Doxygen/style_template/extra_navtree.css similarity index 91% rename from DoxyGen/templates/navtree.css rename to Documentation/Doxygen/style_template/extra_navtree.css index 3a8b901c..87272cc4 100644 --- a/DoxyGen/templates/navtree.css +++ b/Documentation/Doxygen/style_template/extra_navtree.css @@ -29,6 +29,9 @@ } #nav-tree .selected { + background-image: none; + background-repeat:no-repeat; + text-shadow: none; border: 1.5px solid var(--arm_blue); border-left-width: 5px; margin-left:-10px; /*correction to place selection border on the edge screen edge */ @@ -42,6 +45,7 @@ } #nav-tree a { + color: var(--nav-text-normal-color); text-decoration:none; padding:0px; padding-left:0px; @@ -62,7 +66,6 @@ #nav-tree .label a { padding-left:6px; line-height: 30px; - color: var(--arm_black); } #nav-tree .selected a { @@ -82,7 +85,6 @@ #nav-tree { padding: 0px 0px; padding-left: 10px; /*correction to add space before the first arrow in nav-tree */ - background-color: #FAFAFF; overflow:auto; } @@ -100,7 +102,7 @@ display:block; position: absolute; left: 0px; - width: 340px; + width: 330px; } .ui-resizable .ui-resizable-handle { @@ -108,14 +110,14 @@ } .ui-resizable-e { - background-color: var(--arm_light_gray); + background-color: var(--nav-splitbar-color); background-repeat:repeat-y; background-attachment: scroll; cursor:ew-resize; height:100%; right:0; top:0; - width:2px; + width:1px; } .ui-resizable-handle { @@ -130,7 +132,7 @@ } #nav-tree { - background-color: white; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ } @@ -139,14 +141,15 @@ top:5px; right:24px; z-index:0; + opacity:0; } #nav-sync img { - opacity:0.0; + opacity:0; } #nav-sync img:hover { - opacity:0.0; + opacity:0; } #nav-tree a:hover { diff --git a/Documentation/Doxygen/style_template/extra_search.css b/Documentation/Doxygen/style_template/extra_search.css new file mode 100644 index 00000000..58f12de9 --- /dev/null +++ b/Documentation/Doxygen/style_template/extra_search.css @@ -0,0 +1,49 @@ + +dark-mode-toggle { + position: absolute; + right: 205px; + padding-top: 3px; + color: var(--arm_light_gray); +} + +.tablist .MSearchBox { + pointer-events: none; + display: inline-block; + white-space : nowrap; + background: none; + border-radius: 0.0em; + height: 0em; + width: 0em; + line-height: 0px; +} + +.tablist .MSearchField { + pointer-events: none; + display: inline-block; + vertical-align: middle; + width: 0em; + height: 0px; + margin: 0 0; + padding: 0; + line-height: 0em; + border:none; + outline: none; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +.tablist .MSearchBoxInactive { + pointer-events: none; + opacity:0.0; +} + +.tablist .MSearchBoxActive { + pointer-events: none; + opacity:0.0; +} + +.tablist .MSearchBoxInactive:hover { + pointer-events: none; + opacity:0.0; +} \ No newline at end of file diff --git a/Documentation/Doxygen/style_template/extra_stylesheet.css b/Documentation/Doxygen/style_template/extra_stylesheet.css new file mode 100644 index 00000000..b84f7d10 --- /dev/null +++ b/Documentation/Doxygen/style_template/extra_stylesheet.css @@ -0,0 +1,1742 @@ +/* The standard CSS for doxygen 1.9.6*/ +:root { + --arm_light_blue: #00C1DE; + --arm_blue: #11809F; + --arm_blue1: #0091BD; + --arm_dark_blue: #002B49; + --arm_light_gray: #E5ECEB; + --arm_light_gray1: #EFF5F4; + --arm_light_gray2: #EBEBEB; + --arm_light_gray3: #F7F7F7; + --arm_dark_gray: #7D868C; + --arm_dark_gray1: #6F777C; + --arm_dark_gray2:#383b40; + --arm_black: #333E48; + --arm_black1: #1f2023; + --arm_black2: #2d2f34; + --arm_orange: #FF6B00; + --max_content_width: 1200px; + --max_textblock_width: 950px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + --toc-sticky-top: var(--spacing-medium); + --toc-width: 250px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + --toc-font-size: 14px; + --toc-header-font-size: 15px; + +} + +html { + /* page base colors */ + --page-background-color: white; + --page-foreground-color: black; + --page-link-color: var(--arm_blue); + --page-visited-link-color: var(--arm_blue); + + /* index */ + --index-odd-item-bg-color: #F7F8FB; + --index-even-item-bg-color: var(--page-background-color); + --index-header-color: black; + --index-separator-color: #A0A0A0; + + /* header */ + --header-background-color: var(--page-background-color); + --header-separator-color: var(--page-background-color); + --header-gradient-image: none; + --group-header-separator-color: var(--arm_light_gray3); + --group-header-color: var(--page-foreground-color); + --inherit-header-color: gray; + + --footer-foreground-color: #2A3D61; + --footer-logo-width: 104px; + --citation-label-color: #334975; + --glow-color: cyan; + + --title-background-color: white; + --title-separator-color: #5373B4; + --directory-separator-color: #9CAFD4; + --separator-color:var(--nav-splitbar-color); + + --blockquote-background-color: #F7F8FB; + --blockquote-border-color: var(--separator-color); + + --scrollbar-thumb-color: #9CAFD4; + --scrollbar-background-color: #F9FAFC; + + --icon-background-color: #728DC1; + --icon-foreground-color: white; + --icon-doc-image: url('doc.png'); + + /* brief member declaration list */ + --memdecl-background-color:#F9FAFC; + --memdecl-separator-color: #DEE4F0; + --memdecl-foreground-color: var(--page-foreground-color); + --memdecl-template-color: #4665A2; + + /* detailed member list */ + --memdef-border-color: var(--arm_dark_gray); + --memdef-title-background-color: var(--arm_light_gray2); + --memdef-title-gradient-image: none; + --memdef-table-header-background-color: var(--arm_light_gray1); + --memdef-proto-background-color: var(--arm_light_gray2); + --memdef-proto-text-color: var(--arm_black); + --memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + --memdef-doc-background-color: var(--page-background-color); + --memdef-param-name-color: #602020; + --memdef-template-color: #4665A2; + + /* tables */ + --table-cell-border-color: var(--arm_light_gray); + --table-header-background-color: var(--arm_blue); + --table-header-foreground-color: white; + --table-even-cell-color: var(--arm_light_gray3);; + --table-odd-cell-color: #white; + + + /* labels */ + --label-background-color: #728DC1; + --label-left-top-border-color: #5373B4; + --label-right-bottom-border-color: #C4CFE5; + --label-foreground-color: white; + + /** navigation bar/tree/menu */ + --nav-background-color: var(--page-background-color); + --nav-foreground-color: var(--page-foreground-color); + --nav-gradient-image: none; + --nav-gradient-hover-image: none; + --nav-gradient-active-image: none; + --nav-gradient-active-image-parent: none; + --nav-separator-image: none; + --nav-breadcrumb-image: none; + --nav-breadcrumb-border-color: #C2CDE4; + --nav-splitbar-image: none; + --nav-splitbar-color: var(--arm_light_gray); + --nav-font-size-level1: 13px; + --nav-font-size-level2: 10px; + --nav-font-size-level3: 9px; + --nav-text-normal-color:var(--arm_black); + --nav-text-hover-color: var(--arm_orange); + --nav-text-active-color: var(--arm_black); + --nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + --nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + --nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + --nav-menu-button-color: #364D7C; + --nav-menu-background-color: white; + --nav-menu-foreground-color: #555555; + --nav-menu-toggle-color: rgba(255, 255, 255, 0.5); + --nav-arrow-color: var(--arm_blue); + --nav-arrow-selected-color: var(--arm_blue); + --nav_tabs-text-color:var(--arm_dark_gray); + --nav_tabs-text-active-color:white; + --nav_tabs-background-color:var(--arm_black2); + --nav_tabs-background-active-color:var(--arm_dark_gray); + --nav_tabs-border-color:var(--arm_dark_gray); + + /* table of contents */ + --toc-background-color: var(--nav-background-color); + --toc-foreground-color: var(--nav-foreground-color); + --toc-active-color: var(--arm_dark_blue); + --toc-border-color: #D8DFEE; + --toc-header-color: #4665A2; + + /** search field */ + --search-background-color: white; + --search-foreground-color: #909090; + --search-magnification-image: url('mag.svg'); + --search-magnification-select-image: url('mag_sel.svg'); + --search-active-color: black; + --search-filter-background-color: #F9FAFC; + --search-filter-foreground-color: black; + --search-filter-border-color: #90A5CE; + --search-filter-highlight-text-color: white; + --search-filter-highlight-bg-color: #3D578C; + --search-results-foreground-color: #425E97; + --search-results-background-color: #EEF1F7; + --search-results-border-color: black; + --search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + + /** code fragments */ + --code-keyword-color: #008000; + --code-type-keyword-color: #604020; + --code-flow-keyword-color: #E08000; + --code-comment-color: #800000; + --code-preprocessor-color: #806020; + --code-string-literal-color: #002080; + --code-char-literal-color: #008080; + --code-vhdl-digit-color: #FF00FF; + --code-vhdl-char-color: #000000; + --code-vhdl-keyword-color: #700070; + --code-vhdl-logic-color: #FF0000; + --code-link-color: var(--arm_blue); + --code-external-link-color: #4665A2; + --fragment-foreground-color: black; + --fragment-background-color: var(--arm_light_gray2); + --fragment-border-color: #C4CFE5; + --fragment-lineno-border-color: #00FF00; + --fragment-lineno-background-color: #E8E8E8; + --fragment-lineno-foreground-color: black; + --fragment-lineno-link-fg-color: #4665A2; + --fragment-lineno-link-bg-color: #D8D8D8; + --fragment-lineno-link-hover-fg-color: #4665A2; + --fragment-lineno-link-hover-bg-color: #C8C8C8; + --tooltip-foreground-color: black; + --tooltip-background-color: white; + --tooltip-border-color: gray; + --tooltip-doc-color: grey; + --tooltip-declaration-color: #006318; + --tooltip-link-color: #4665A2; + --tooltip-shadow: 1px 1px 7px gray; + --tile-background-color: #F9FAFC; + --tile-shadow-color:rgba(0, 0, 0, 0.2); + --tile-hover-border-color: #C8C8C8; + + + /** font-family */ + --font-family-normal: Lato, Calibri, sans-serif; + --font-family-monospace: monospace,fixed; + --font-family-nav: Lato, Calibri, sans-serif; + --font-family-title: Lato, Calibri, sans-serif; + --font-family-toc: Lato, Calibri, sans-serif; + --font-family-search: Lato, Calibri, sans-serif; + --font-family-icon: Arial,Helvetica; + --font-family-tooltip: Lato, Calibri, sans-serif; + + } + +html.dark-mode { + + /* page base colors */ + --page-background-color: var(--arm_black2); + --page-foreground-color: var(--arm_light_gray); + --page-link-color: var(--arm_light_blue); + --page-visited-link-color: var(--arm_light_blue); + + /* index */ + --index-odd-item-bg-color: var(--nav-background-color); + --index-even-item-bg-color: var(--page-background-color); + --index-header-color: #C4CFE5; + --index-separator-color: #334975; + + /* header */ + --header-background-color: var(--page-background-color); + --header-separator-color: var(--page-background-color); + --header-gradient-image: none; + --group-header-separator-color: var(--arm_dark_gray2); + --group-header-color: var(--page-foreground-color); + --inherit-header-color: #A0A0A0; + + --footer-foreground-color: #5B7AB7; + --footer-logo-width: 60px; + --citation-label-color: #90A5CE; + --glow-color: cyan; + + --title-background-color: #090D16; + --title-separator-color: #354C79; + --directory-separator-color: #283A5D; + --separator-color: var(--nav-splitbar-color); + --blockquote-background-color: var(--arm_black); + --blockquote-border-color: var(--separator-color); + + --scrollbar-thumb-color: #283A5D; + --scrollbar-background-color: #070B11; + + --icon-background-color: #334975; + --icon-foreground-color: #C4CFE5; + --icon-doc-image: url('docd.png'); + + /* brief member declaration list */ + --memdecl-background-color:var(--page-background-color); + --memdecl-separator-color: #2C3F65; + --memdecl-foreground-color:var(--page-foreground-color); + --memdecl-template-color: #7C95C6; + + /* detailed member list */ + --memdef-border-color: var(--arm_dark_gray); + --memdef-title-background-color: var(--arm_black); + --memdef-title-gradient-image: none; + --memdef-table-header-background-color: var(--arm_dark_gray2); + --memdef-proto-background-color: var(--memdef-title-background-color); + --memdef-proto-text-color: var(--page-foreground-color); + --memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); + --memdef-doc-background-color: var(--page-background-color); + --memdef-param-name-color: #D28757; + --memdef-template-color: #7C95C6; + + /* tables */ + --table-cell-border-color: var(--arm_dark_gray1); + --table-header-background-color: var(--arm_blue); + --table-header-foreground-color: var(--page-forground-color); + --table-odd-cell-color: var(--arm_dark_gray2); + --table-even-cell-color: var(--page-background-color); + + + /* labels */ + --label-background-color: #354C7B; + --label-left-top-border-color: #4665A2; + --label-right-bottom-border-color: #283A5D; + --label-foreground-color: #CCCCCC; + + /** navigation bar/tree/menu */ + --nav-background-color: var(--arm_dark_gray2); + --nav-foreground-color: var(--page-foreground-color); + --nav-gradient-image: none; + --nav-gradient-hover-image: none; + --nav-gradient-active-image: none; + --nav-gradient-active-image-parent: none; + --nav-separator-image: none; + --nav-breadcrumb-image: none; + --nav-breadcrumb-border-color: #2A3D61; + --nav-splitbar-image: none; + --nav-splitbar-color: var(--arm_dark_gray); + --nav-font-size-level1: 13px; + --nav-font-size-level2: 10px; + --nav-font-size-level3: 9px; + --nav-text-normal-color: var(--page-foreground-color); + --nav-text-hover-color: var(--arm_orange); + --nav-text-active-color:var(--page-foreground-color); + --nav-text-normal-shadow: 0px 1px 1px black; + --nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + --nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + --nav-menu-button-color: #B6C4DF; + --nav-menu-background-color: #05070C; + --nav-menu-foreground-color: #BBBBBB; + --nav-menu-toggle-color: rgba(255, 255, 255, 0.2); + --nav-arrow-color: var(--arm_blue); + --nav-arrow-selected-color: var(--arm_blue); + --nav_tabs-text-color:var(--arm_dark_gray); + --nav_tabs-text-active-color:white; + --nav_tabs-background-color:var(--arm_black2); + --nav_tabs-background-active-color:var(--arm_dark_gray); + --nav_tabs-border-color:var(--arm_dark_gray); + + /* table of contents */ + --toc-background-color: var(--nav-background-color); + --toc-active-color: #4665A2; + --toc-foreground-color: var(--nav-foreground-color); + --toc-border-color: #202E4A; + --toc-header-color: #A3B4D7; + + /** search field */ + --search-background-color: black; + --search-foreground-color: #C5C5C5; + --search-magnification-image: url('mag_d.svg'); + --search-magnification-select-image: url('mag_seld.svg'); + --search-active-color: #C5C5C5; + --search-filter-background-color: #101826; + --search-filter-foreground-color: #90A5CE; + --search-filter-border-color: #7C95C6; + --search-filter-highlight-text-color: #BCC9E2; + --search-filter-highlight-bg-color: #283A5D; + --search-results-background-color: #101826; + --search-results-foreground-color: #90A5CE; + --search-results-border-color: #7C95C6; + --search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + + /** code fragments */ + --code-keyword-color: #CC99CD; + --code-type-keyword-color: #AB99CD; + --code-flow-keyword-color: #E08000; + --code-comment-color: #717790; + --code-preprocessor-color: #65CABE; + --code-string-literal-color: #7EC699; + --code-char-literal-color: #00E0F0; + --code-vhdl-digit-color: #FF00FF; + --code-vhdl-char-color: #000000; + --code-vhdl-keyword-color: #700070; + --code-vhdl-logic-color: #FF0000; + --code-link-color: #79C0FF; + --code-external-link-color: #79C0FF; + --fragment-foreground-color: #C9D1D9; + --fragment-background-color: var(--arm_black); + --fragment-border-color: #30363D; + --fragment-lineno-border-color: #30363D; + --fragment-lineno-background-color: black; + --fragment-lineno-foreground-color: #6E7681; + --fragment-lineno-link-fg-color: #6E7681; + --fragment-lineno-link-bg-color: #303030; + --fragment-lineno-link-hover-fg-color: #8E96A1; + --fragment-lineno-link-hover-bg-color: #505050; + --tooltip-foreground-color: #C9D1D9; + --tooltip-background-color: #202020; + --tooltip-border-color: #C9D1D9; + --tooltip-doc-color: #D9E1E9; + --tooltip-declaration-color: #20C348; + --tooltip-link-color: #79C0FF; + --tooltip-shadow: none; + --tile-background-color: var(--arm_dark_gray2); + --tile-shadow-color:rgba(192, 192, 192, 0.2); + --tile-hover-border-color: var(--arm_dark_gray1); + + /** font-family */ + --font-family-normal: Lato, Calibri, sans-serif; + --font-family-monospace: monospace,fixed; + --font-family-nav: Lato, Calibri, sans-serif; + --font-family-title: Lato, Calibri, sans-serif; + --font-family-toc: Lato, Calibri, sans-serif; + --font-family-search: Lato, Calibri, sans-serif; + --font-family-icon: Arial,Helvetica; + --font-family-tooltip: Lato, Calibri, sans-serif; +} + +body, table, div, p, dl { + font-family: var(--font-family-normal); + font-size: 16px; + line-height: 22px; +} + + +.tiles { + width: 1100; + font-size: 0; + margin: 0 auto; +} + +.tile { + width: calc(1000px / 5); + height: 130px; + display: inline-grid; + padding-inline: 5px; + padding-bottom: 10px; + padding-top: 5px; + vertical-align:text-top; + text-align:center; + margin: 2px; + margin-right: 10px; + /* background-color: var(--group-header-separator-color); */ + background-color: var(--tile-background-color); + box-shadow: 0px 4px 6px 0px var(--tile-shadow-color); + transition: 0.0s; + border-radius: 10px; + /* rounded corners */ + flex: 50%; +} + +.tile:hover { + border-color: var(--tile-hover-border-color); + box-shadow: 0 8px 12px 0 var(--tile-shadow-color); + border-style: solid; + border-width: 1px; + height: 130px; + margin:1px; + margin-right: 9px; + cursor: pointer; +} + +.tile h2 { + font-size: 17px; + margin-top:5px; + margin-bottom:0px; + text-align:center; +} + +.tile .tileh { + font-size: 17px; + font-weight:bold; + margin-top:5px; + margin-bottom:0px; + text-align:center; + color:var(--page-link-color); +} + +.tiletxt { + font-size: 15px; + color:var(--page-foreground-color); + margin:0px; + padding:0px; +} + +.tilelinks { + font-size: 14px; + align-self: end; +} + + +/* styles */ + +.style1 { + text-align: center; +} +.style2 { + color: var(--arm_blue); + font-weight: normal; +} +.style3 { + text-align: left; +} +.style4 { + color: #008000; +} +.style5 { + color: #0000FF; +} +.style6 { + color: #000000; + font-style:italic; +} +.mand { + color: #0000FF; +} +.opt { + color: #008000; +} +.cond { + color: var(--arm_orange); +} + +.choice +{ + background-color:#F7F9D0; +} +.seq +{ + background-color:#C9DECB; +} +.group1 +{ + background-color:#F8F1F1; +} +.group2 +{ + background-color:#DCEDEA; +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 100%; + width: 16px; + height: 22px; + display: inline-block; +} + +.main-menu { + margin: 0; + padding: 0; + display: table; + line-height: 24px; +} + +ul { + list-style-type: disc; + padding-left: 2em; + margin-block-start: 0em; +} + +li { + margin-top: 0.25em; + line-height: 24px; +} + +ul ul { + list-style-type: circle; +} + +ul ul ul { + list-style-type: square; +} + +ul.hierarchy { + color: green; +} + +em { + font-style:italic; +} + +code { + font-family: monospace; + font-size: 85%; + line-height: 1.6; + background-color: var(--fragment-background-color); + border-radius: 6px; + padding: 0.2em 0.4em; +} + +/* Tables */ +table.cmtab1 { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--arm_dark_gray); + text-align: justify; + width:70%; +} + +th.cmtab1 { + background: var(--arm_light_gray3); + font-weight: bold; + height: 28px; +} + +td.cmtab1 { + padding:1px; + text-align: left; +} + +table.cmtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.cmtable td, table.cmtable th { + border: 1px solid var(--arm_dark_gray); + padding: 3px 7px 2px; +} + +table.cmtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 100%; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; +} + +table.cmtable th a { + color: var(--table-header-foreground-color); + text-decoration: underline; +} + +table.cmtable th a:visited { + color: var(--table-header-foreground-color); + text-decoration: underline; +} + +table.cmtable th a:hover { + color: var(--arm_yellow); + text-decoration: underline; +} + +td.MonoTxt { + font-family:"Arial monospaced for SAP"; +} + +td.XML-Token +{ + azimuth: 180; + font-style:italic; + z-index:20; +} + +span.XML-Token +{ + azimuth: 180; + font-style:italic; + z-index:20; +} + +span.h2 +{ + font-size: 120%; + font-weight: bold; +} + +div.new +{ + background-color:#ccffcc; /* light green */ +} + +div.mod +{ + background-color:#ffe6cc; /* light amber */ +} + +div.del +{ + background-color:#ffcccc; /* light red */ +} + +div.contents { + margin-top: 10px; +/* margin-left: 12px; + margin-right: 8px; +*/ +} + +@media screen and (min-width: 1510px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: block; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock, div.contents .memberdecls, div.contents .memitem, div.contents .directory{ + min-width: 200px; + max-width: var(--max_textblock_width); + flex-grow: 1; + } + + div.contents p, div.contents ul, div.contents .image, div.contents .markdownTable, div.contents .fragment, div.contents hr, div.contents h1 { + max-width: var(--max_textblock_width); + } + + div.contents hr { + margin-left: 0; + } + + div.content .toc { + overflow-x: overlay; + overflow-wrap: normal; + } + + div.toc { + max-height: var(--toc-max-height); + max-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--nav-splitbar-color); + border-radius: 0; + background-color: transparent; + box-shadow: none; + float: right; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 0 0 var(--spacing-large); + margin: 0 0 0 var(--spacing-large); + } +} + +@media screen and (max-width:1510px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: block; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock, div.contents .memberdecls, div.contents .memitem, div.contents .directory{ + min-width: 200px; + max-width: var(--max_textblock_width); + flex-grow: 1; + } + + div.contents p, div.contents ul, div.contents .image, div.contents .markdownTable, div.contents .fragment{ + max-width: var(--max_textblock_width); + } + + div.toc { + max-height: 0px; + line-height: 0px; + overflow-y: hidden; + min-width: var(--toc-width); + border: 0; + border-radius: 0; + background-color: transparent; + box-shadow: none; + padding: 0;; + margin: 0; + } +} + + +.memberdecls heading { + font-weight: bold; +} + +div.contents, div.header .headertitle, div.header .summary { + max-width: var(--max_content_width); +} + +div.contents, div.header .headertitle { + margin-left: 3%; + margin-right: auto; +} + +/* @group Heading Levels */ + +h1 { + font-size: 150%; + border-top-color: var(--group-header-separator-color); + border-top-width: 2px; + border-top-style: solid; + padding: 1em 0 0; + margin-top: 0.5em; + margin-bottom: 0.75em; +} +/* +h1:before { + margin-bottom: 1em; + content: ""; + background-color: var(--arm_light_gray3); + height: 2px; + display: block; + width: 100%; +} +*/ +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 0px; +} + +h2, h2.groupheader { + border: 0px; + font-size: 120%; + font-weight: bold; + margin-top: 1.25em; + margin-bottom: 0.25em; +} + +h3 { + font-size: 100%; + margin-top: 1.25em; + margin-bottom: 0.25em; +} + +h4 { + font-size: 100%; + color: #505050; +} + + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p { + margin-block-start: 1em; + margin-block-end: 0.5em; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A2B4D8; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9AAED5; + color: #ffffff; + border: 1px double #849CCC; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +pre.fragment { + font-family: monospace; + background-color: var(--fragment-background-color); + border-radius: 6px; + padding: 0.2em 0.4em; + font-size: 85%; + line-height: 1.45; + margin: 0.5em 0px; +} + +div.fragment { + font-family: monospace; + background-color: var(--fragment-background-color); + border-radius: 6px; + padding: 0.2em 0.4em; + font-size: 85%; + line-height: 1.45; +} + +div.line { + font-family: monospace; + font-size: 100%; + line-height: 1.45; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; +} + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} + +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + margin: 0; +} + +body a:hover{ + text-decoration: underline; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C3CFE6; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C3CFE6; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EDF1F7; +} + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +.memSeparator { + line-height: 22px; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid var(--arm_light_gray);/*#C3CFE6;*/ +} + +a:-webkit-any-link { + color: var(--page-link-color); + cursor: pointer; + text-decoration: none; +} + +.a:hover { + text-decoration: underline; +} + + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + display: inline-block; + padding: 8px; + padding-bottom: 12px; + padding-right: 12px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 600; + float: none; +} + +.permalink +{ + color: var(--arm_blue); + font-size: 100%; + display: inline-block; + vertical-align: middle; + padding-bottom:6px; +} + +.memtemplate { + font-size: 80%; + color: #4464A5; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A2B4D8; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; +} + +.memitem.glow { + /*box-shadow: 0 0 15px cyan; */ +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + background-color: var(--memdef-proto-background-color); + border-top-right-radius: 4px; + border-top-left-radius: 0px; + /* firefox specific markup */ + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 0px; + /* webkit specific markup */ + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 0px; +} + +.memdoc, dl.reflist dd { + border: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: var(--memdef-param-name-color); + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #708CC4; + border-top:1px solid #5072B7; + border-left:1px solid #5072B7; + border-right:1px solid #C3CFE6; + border-bottom:1px solid #C3CFE6; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--arm_dark_gray); + border-bottom: 1px solid var(--arm_dark_gray); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + padding: 0px 10px 10px 0px; + vertical-align: middle; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top:10px; +} + +.directory td.entry a { + outline:none; + padding-left: 6px; + padding-top:10px; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top:10px; + border-left: 0px solid rgba(0,0,0,0.05); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3A568E; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #293C63; +} + +blockquote.doxtable { + margin-left:-7px; + margin-bottom: 6px; + padding-left: 8px; + border-left:4px solid; + border-color: #D0C000; + background-color: var(--page-background-color); +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 7px 10px 5px; + text-align:left; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); +} + +table.doxtable tr:nth-child(odd) { + background-color: var(--table-odd-cell-color); +} + +table.doxtable tr:nth-child(even) { + background-color: var(--table-even-cell-color); +} + +table.fieldtable { + width: 100%; + margin-bottom: 10px; + border: 1px solid var(--arm_dark_gray); + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, td.fieldoc{ + white-space: nowrap; + border-right: 1px solid var(--arm_dark_gray); + border-bottom: 1px solid var(--arm_dark_gray); + vertical-align: top; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--arm_dark_gray); + width: 100%; +} + +.fieldtable td.fielddoc p { + margin-top: 0px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-color: var(--memdef-table-header-background-color); + font-size: 100%; + font-weight: bold; +} + + +/* @group Markdown */ + + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 7px 10px 5px; + text-align:left; +} + +table.markdownTable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); +} + +table.markdownTable tr:nth-child(odd) { + background-color: var(--table-odd-cell-color); +} + +table.markdownTable tr:nth-child(even) { + background-color: var(--table-even-cell-color); +} + +/* for hyperlinks in table head rows */ +table.markdownTable th a{ + color: var(--table-header-foreground-color); + text-decoration: underline; +} + +table.markdownTable th a:visited{ + color: var(--table-header-foreground-color); +} + +table.markdownTable th a:hover{ + color: var(--arm_yellow); +} + +table.markdownTable th.markdownTableHeadLeft, table.markdownTable td.markdownTableBodyLeft { + text-align: left +} + +table.markdownTable th.markdownTableHeadRight, table.markdownTable td.markdownTableBodyRight { + text-align: right +} + +table.markdownTable th.markdownTableHeadCenter, table.markdownTable td.markdownTableBodyCenter { + text-align: center +} + + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + font-size: 100%; +} + +/* @end */ + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-color:var(--arm_black); + height:30px; + line-height:30px; + color:white; + border:solid 1px #C1CDE5; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + color:#344D7E; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; +} + +.navpath li.navelem a:hover +{ + color:#6583BF; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + color:var(--arm_white); + font-size: 8pt; +} + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + margin-left: 5px; + font-size: 8pt; + padding-left: 5px; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + margin: 0px; +} + +div.headertitle +{ + padding: 5px 5px 5px 0px; + margin-top: 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 8px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 8px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 8px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 8px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 8px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 8px; + border-left:4px solid; + border-color: #C08050; +} + +dl.safety +{ + margin-left:-7px; + padding-left: 8px; + border-left:4px solid; + border-color: #008000; +} + + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: middle; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 270% 'Lato Lite', Lato, Caibri, sans-serif; + font-weight: 600; + margin: 0px; + color: white; + padding: 2px 0px; +} + +#projectbrief +{ + font: 140% "Lato Lite", Lato, Caibri, sans-serif; + margin: 0px; + color: white; + padding: 4px 0px 4px; +} + +#projectnumber +{ + font: 50% "Lato Lite", Lato, Caibri, sans-serif; + margin: 0px; + color: white; + padding: 0px; +} + +#top +{ + border-bottom: 1px solid var(--arm_dark_gray); +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--arm_dark_gray); + background-color: var(--arm_black); +} + +.image +{ + text-align: left; + display: grid; + justify-content: center; + align-items: center; + justify-items: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; + font-size: 80%; +} + +div.zoom +{ + border: 1px solid #8EA4D0; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#314877; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + + +div.toc li { + background: none; + font-family: var(--font-family-toc); + font-size: var(--toc-font-size); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--toc-header-font-size); + font-weight: normal; + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a.active { + font-weight: bold; + color: var(--toc-active-color) !important; +} + +div.toc li a:hover { + color: var(--nav-text-hover-color) !important; +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--nav-foreground-color) !important; + text-decoration: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} diff --git a/DoxyGen/templates/tabs.css b/Documentation/Doxygen/style_template/extra_tabs.css similarity index 68% rename from DoxyGen/templates/tabs.css rename to Documentation/Doxygen/style_template/extra_tabs.css index 2229e0a1..20084463 100644 --- a/DoxyGen/templates/tabs.css +++ b/Documentation/Doxygen/style_template/extra_tabs.css @@ -1,17 +1,3 @@ -:root { - --arm_light_blue: #00C1DE; - --arm_blue: #11809F; - --arm_blue1: #0091BD; - --arm_dark_blue: #002B49; - --arm_light_gray: #E5ECEB; - --arm_light_gray1: #EFF5F4; - --arm_light_gray2: #EBEBEB; - --arm_light_gray3: #F7F7F7; - --arm_dark_gray: #7D868C; - --arm_black: #333E48; - --arm_orange: #FF6B00; - --arm_yellow: #FFC700; -} /* in Doxygen 1.9.2 'tabs' is assigned to second navigation row (navrow1) with 'Main Page', 'Namespaces', etc */ @@ -31,8 +17,15 @@ font-size: 16px; } +.tabs1 a { + color:while; +} + .tabs { - background-color: var(--arm_light_gray); + background-color: var(--nav_tabs-background-color); + border-top-style:solid; + border-top-width:1px; + border-top-color:var(--nav_tabs-border-color); } .tablist, .main-menu { @@ -45,23 +38,14 @@ .tablist li { float: left; display: table-cell; - background-color: var(--arm_light_gray); + background-color: var(--nav_tabs-background-color); border-right-style:solid; border-right-width:1px; - border-right-color:var(--arm_dark_gray); + border-right-color:var(--nav_tabs-border-color); list-style: none; margin:0px; } -.tablist .MSearchBoxInactive { - opacity:0.75; -} - -.tablist .MSearchBoxInactive:hover { - opacity:1.0; -} - - .tabs1 .tablist li { background-color: var(--arm_black); font-weight: 1000; @@ -90,14 +74,23 @@ background-color: var(--arm_blue); } -.tablist a:hover { - color: var(--arm_orange); +.tabs .tablist a { + background-color: var(--nav_tabs-background-color); + color: var(--nav_tabs-text-color); +} +.tabs .tablist li.current a { + background-color: var(--nav_tabs-background-active-color); + color: var(--nav_tabs-text-active-color); } -.tabs1 a:hover { - color: var(--arm_yellow); +.tabs a:hover { + color: var(--arm_orange); } -.tablist li.current :hover { +.tabs li.current a:hover { color: white; } + +.tabs1 a:hover { + color: var(--arm_yellow); +} diff --git a/DoxyGen/templates/footer.html b/Documentation/Doxygen/style_template/footer.html similarity index 100% rename from DoxyGen/templates/footer.html rename to Documentation/Doxygen/style_template/footer.html diff --git a/DoxyGen/templates/footer.js.in b/Documentation/Doxygen/style_template/footer.js.in similarity index 100% rename from DoxyGen/templates/footer.js.in rename to Documentation/Doxygen/style_template/footer.js.in diff --git a/DoxyGen/templates/header.html b/Documentation/Doxygen/style_template/header.html similarity index 73% rename from DoxyGen/templates/header.html rename to Documentation/Doxygen/style_template/header.html index 9706daa2..967e565d 100644 --- a/DoxyGen/templates/header.html +++ b/Documentation/Doxygen/style_template/header.html @@ -1,28 +1,28 @@ - + - + $projectname: $title $title - - + + + $treeview $search $mathjax - +$darkmode $extrastylesheet - @@ -38,35 +38,35 @@ - Logo + Logo
$projectname - 
$projectbrief
- + $searchbox - $searchbox + - $searchbox + $searchbox @@ -74,3 +74,10 @@ +
+
    + +
+
diff --git a/DoxyGen/templates/Layout_forUser.xml b/Documentation/Doxygen/style_template/layout.xml similarity index 92% rename from DoxyGen/templates/Layout_forUser.xml rename to Documentation/Doxygen/style_template/layout.xml index 222d4718..041f6999 100644 --- a/DoxyGen/templates/Layout_forUser.xml +++ b/Documentation/Doxygen/style_template/layout.xml @@ -1,10 +1,10 @@ - + - + @@ -16,14 +16,14 @@ - + - + - + - - + + @@ -82,7 +82,7 @@ - + @@ -188,10 +188,11 @@ + - - + + @@ -212,7 +213,8 @@ - + + diff --git a/DoxyGen/templates/navtree.js b/Documentation/Doxygen/style_template/navtree.js similarity index 98% rename from DoxyGen/templates/navtree.js rename to Documentation/Doxygen/style_template/navtree.js index c7a300dd..f6b11549 100644 --- a/DoxyGen/templates/navtree.js +++ b/Documentation/Doxygen/style_template/navtree.js @@ -443,6 +443,10 @@ function navTo(o,root,hash,relpath) } else { getScript(relpath+'navtreeindex'+i,function(){ navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + /* ensures first section is expanded when opening index */ + if ((root=="index.html") && (!navTreeSubIndices[i]["index.html"].length)) { + navTreeSubIndices[i]["index.html"]=[0]; + } if (navTreeSubIndices[i]) { gotoNode(o,i,root,hash,relpath); } diff --git a/Documentation/Doxygen/style_template/resize.js b/Documentation/Doxygen/style_template/resize.js new file mode 100644 index 00000000..34a0c1e1 --- /dev/null +++ b/Documentation/Doxygen/style_template/resize.js @@ -0,0 +1,155 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var once=1; +function initResizable() +{ + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,barWidth=6,desktop_vp=768,titleHeight; + + function readSetting(cookie) + { + if (window.chrome) { + var val = localStorage.getItem(cookie_namespace+'_width'); + if (val) return val; + } else { + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + } + return 0; + } + + function writeSetting(cookie, val) + { + if (window.chrome) { + localStorage.setItem(cookie_namespace+"_width",val); + } else { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; SameSite=Lax; expires=" + expiration+"; path=/"; + } + } + + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + writeSetting('width',sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height(); + var contentHeight,navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + content.css({height:contentHeight + "px"}); + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() + { + var newWidth; + if (sidenav.width()>0) { + newWidth=0; + } + else { + var width = readSetting('width'); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + var sidenavWidth = $(sidenav).outerWidth(); + writeSetting('width',sidenavWidth-barWidth); + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readSetting('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + if (once) { + $(".ui-resizable-handle").dblclick(collapseExpand); + once=0 + } + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/Documentation/Doxygen/style_template/search.css b/Documentation/Doxygen/style_template/search.css new file mode 100644 index 00000000..9ca12c5c --- /dev/null +++ b/Documentation/Doxygen/style_template/search.css @@ -0,0 +1,297 @@ +/*---------------- Search Box */ + +.titlearea table { + width: 100%; +} + +dark-mode-toggle { + position: absolute; + right: 5px; + padding-top: 3px; +} + +#MSearchBox { + position: absolute; + right: 34px; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/DoxyGen/templates/tab_b.png b/Documentation/Doxygen/style_template/tab_b.png similarity index 100% rename from DoxyGen/templates/tab_b.png rename to Documentation/Doxygen/style_template/tab_b.png diff --git a/Documentation/Doxygen/style_template/tab_topnav.png b/Documentation/Doxygen/style_template/tab_topnav.png new file mode 100644 index 0000000000000000000000000000000000000000..b257b7780f30c0e030ee0cc9fe812dccddbe6851 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^EI_Qr!2~38zONMlQk(@Ik;M!Qe1}1p@p%4<6p*TP zM_)$m$n4Fmh;vZIjzaOYW($mE;L?bwP&!1v`W*G*{f+Gf}ZW`Y?#K7?7bfqP8fBG+= OA_h-aKbLh*2~7acPeJzp literal 0 HcmV?d00001 diff --git a/Documentation/Doxygen/style_template/tabs.js b/Documentation/Doxygen/style_template/tabs.js new file mode 100644 index 00000000..d9ea4092 --- /dev/null +++ b/Documentation/Doxygen/style_template/tabs.js @@ -0,0 +1,29 @@ +var strgURL = location.pathname; // path of current component + +// constructor for the array of objects +function tabElement(id, folderName, tabTxt ) { + this.id = id; // elementID as needed in html; + this.folderName = folderName; // folder name of the component + this.tabTxt = tabTxt; // Text displayed as menu on the web + this.currentListItem = '
  • ' + this.tabTxt + '
  • '; + this.listItem = '
  • ' + this.tabTxt + '
  • '; +}; + +// array of objects +var arr = []; + +// fill array +// arr.push( new tabElement( "Zone", ".", "Zone")); + +// write tabs +// called from the header file. +function writeComponentTabs() { + for ( var i=0; i < arr.length; i++ ) { + str = "/" + arr[i].folderName + "/" + if (strgURL.search(str) > 0) { // if this is the current folder + document.write(arr[i].currentListItem); // then print and highlight the tab + } else { + document.write(arr[i].listItem); // else, print the tab + } + } +}; diff --git a/DoxyGen/templates/version.css b/Documentation/Doxygen/style_template/version.css similarity index 93% rename from DoxyGen/templates/version.css rename to Documentation/Doxygen/style_template/version.css index 8013bede..31cc37a4 100644 --- a/DoxyGen/templates/version.css +++ b/Documentation/Doxygen/style_template/version.css @@ -24,11 +24,6 @@ cursor: pointer; } -/* Dropdown button on hover & focus */ -#.dropbtn:hover, .dropbtn:focus { -# background-size: 0.7em; -#} - /* The container
    - needed to position the dropdown content */ .dropdown { position: relative; diff --git a/Documentation/README.md b/Documentation/README.md new file mode 100644 index 00000000..e5df313d --- /dev/null +++ b/Documentation/README.md @@ -0,0 +1,15 @@ +# CMSIS-NN Documentation + +CMSIS-NN Documentation in HTML format is published online at [https://arm-software.github.io/CMSIS-NN](https://arm-software.github.io/CMSIS-NN). + +The version drop-down menu there allows to switch between the documentation provided with offical releases and the latest draft documentation for the main branch. + +The documentation source is maintained in `Documentation/Doxygen/` folder as a mixture of markdown and doxygen formats. Component source files, templates and examples may also contribute information that gets integrated into the final documentation. + +Generating the HTML-formatted documentation from the source is done with `gen_doc.sh` script: + +```sh +CMSIS-NN $ ./Documentation/Doxygen/gen_doc.sh +``` + +The script expects specific version of [doxygen](https://www.doxygen.nl/) to be installed locally. After successful execution the resulting documentation package is then available in `./Documentation/html/`. diff --git a/Documentation/index.html b/Documentation/index.html new file mode 100644 index 00000000..dda2e300 --- /dev/null +++ b/Documentation/index.html @@ -0,0 +1,14 @@ + + + +Redirect to the main page after 0 seconds + + + + + + +If the automatic redirection is failing, click open Documentation. + + + diff --git a/Documentation/version.js b/Documentation/version.js index 92f3a7f8..884724c7 100644 --- a/Documentation/version.js +++ b/Documentation/version.js @@ -1,3 +1 @@ -function myFunction() { - /* Placeholder function not used for local docs */ -} +function writeVersionDropdown() {} diff --git a/DoxyGen/check_links.sh b/DoxyGen/check_links.sh deleted file mode 100755 index 5040adab..00000000 --- a/DoxyGen/check_links.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/bash - -# SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates -# -# SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the License); you may -# not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an AS IS BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -usage() { - echo "" - echo "Usage: $(basename $0) " - echo " Index.html file to start link scanning at." - echo " Directory with doxygen source files." - echo "" -} - -if [ ! -f "$1" ]; then - if [ -z "$1" ]; then - echo "No index file provided!" >&2 - else - echo "Index file not found: '$1'" >&2 - fi - usage - exit 1 -fi - -if [ ! -d "$2" ]; then - if [ -z "$2" ]; then - echo "No source directory provided!" >&2 - else - echo "Source dir not found: '$2'" >&2 - fi - usage - exit 1 -fi - -linkchecker -F csv --timeout 3 --check-extern $1 - -OFS=$IFS -IFS=$'\n' - -for line in $(grep -E '^[^#]' linkchecker-out.csv | tail -n +2); do - link=$(echo $line | cut -d';' -f 1) - msg=$(echo $line | cut -d';' -f 4) - origin=$(grep -Ern "href=['\"]${link}['\"]" $2) - for o in $origin; do - ofile=$(echo $o | cut -d':' -f 1) - oline=$(echo $o | cut -d':' -f 2) - match=$(echo $o | cut -d':' -f 3-) - rest="${match#*$link}" - ocolumn=$((${#match} - ${#rest} - ${#link})) - echo "$(readlink -f -n $ofile):${oline}:${ocolumn};${link};${msg};URL '${link}' results to '${msg}'" >&2 - done -done - -IFS=$OFS - -exit 0 diff --git a/DoxyGen/gen_doc.sh b/DoxyGen/gen_doc.sh deleted file mode 100755 index 7767c2eb..00000000 --- a/DoxyGen/gen_doc.sh +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash -# -# SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates -# -# SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the License); you may -# not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an AS IS BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# Version: 1.0 -# Date: 2022-05-31 -# This bash script generates CMSIS-Driver Documentation: -# -# Pre-requisites: -# - bash shell (for Windows: install git for Windows) -# - doxygen 1.9.2 -# - git -# - gh cli - -set -o pipefail - -DIRNAME=$(dirname $(realpath $0)) -DOXYGEN=$(which doxygen) -REQ_DXY_VERSION="1.9.2" -REQUIRED_GEN_PACK_LIB="0.5.1" - -############ gen-pack library ########### - -function install_lib() { - local URL="https://github.com/Open-CMSIS-Pack/gen-pack/archive/refs/tags/v$1.tar.gz" - echo "Downloading gen_pack lib to '$2'" - mkdir -p "$2" - curl -L "${URL}" -s | tar -xzf - --strip-components 1 -C "$2" || exit 1 -} - -function load_lib() { - if [[ -d ${GEN_PACK_LIB} ]]; then - . "${GEN_PACK_LIB}/gen-pack" - return 0 - fi - local GLOBAL_LIB="/usr/local/share/gen-pack/${REQUIRED_GEN_PACK_LIB}" - local USER_LIB="${HOME}/.local/share/gen-pack/${REQUIRED_GEN_PACK_LIB}" - if [[ ! -d "${GLOBAL_LIB}" && ! -d "${USER_LIB}" ]]; then - echo "Required gen_pack lib not found!" >&2 - install_lib "${REQUIRED_GEN_PACK_LIB}" "${USER_LIB}" - fi - - if [[ -d "${GLOBAL_LIB}" ]]; then - . "${GLOBAL_LIB}/gen-pack" - elif [[ -d "${USER_LIB}" ]]; then - . "${USER_LIB}/gen-pack" - else - echo "Required gen-pack lib is not installed!" >&2 - exit 1 - fi -} - -load_lib -find_git -find_ghcli - -######################################### - -if [[ ! -f "${DOXYGEN}" ]]; then - echo "Doxygen not found!" >&2 - echo "Did you miss to add it to PATH?" - exit 1 -else - version=$("${DOXYGEN}" --version | sed -E 's/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/') - echo "DOXYGEN is ${DOXYGEN} at version ${version}" - if [[ "${version}" != "${REQ_DXY_VERSION}" ]]; then - echo " >> Version is different from ${REQ_DXY_VERSION} !" >&2 - fi -fi - -if [ -z "$VERSION" ]; then - VERSION_FULL=$(git_describe "v") - VERSION=${VERSION_FULL%+*} -else - VERSION_FULL=${VERSION} -fi - -echo "Generating documentation ..." - -pushd $DIRNAME > /dev/null - -rm -rf ${DIRNAME}/../Documentation/html -sed -e "s/{projectNumber}/${VERSION}/" "${DIRNAME}/nn.dxy.in" \ - > "${DIRNAME}/nn.dxy" - -git_changelog -p "v" -f html 1> history.txt 2>/dev/null - -echo "${DOXYGEN} nn.dxy" -"${DOXYGEN}" nn.dxy -popd > /dev/null - -if [[ $2 != 0 ]]; then - cp -f "${DIRNAME}/templates/search.css" "${DIRNAME}/../Documentation/html/search/" -fi - -projectName=$(grep -E "PROJECT_NAME\s+=" "${DIRNAME}/nn.dxy" | sed -r -e 's/[^"]*"([^"]+)"/\1/') -datetime=$(date -u +'%a %b %e %Y %H:%M:%S') -year=$(date -u +'%Y') -if [[ "${year}" != "2022" ]]; then - year="2022-${year}" -fi -sed -e "s/{datetime}/${datetime}/" "${DIRNAME}/templates/footer.js.in" \ - | sed -e "s/{year}/${year}/" \ - | sed -e "s/{projectName}/${projectName}/" \ - | sed -e "s/{projectNumber}/${VERSION}/" \ - | sed -e "s/{projectNumberFull}/${VERSION_FULL}/" \ - > "${DIRNAME}/../Documentation/html/footer.js" - -exit 0 diff --git a/DoxyGen/templates/check.png b/DoxyGen/templates/check.png deleted file mode 100644 index 094e59cf59c4257682f6c8d5faa5e2670730c939..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmV;L17-Y)P)WdKHUATc!{PH%P~GB7YQATcmHFgQ9gIUp-AF)%RoqGHAX000McNliru z)&&<0F)fD2eNX@Z010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00Qz! zL_t(|+D%hkNRwd{e!g!%4z@XGYQ#uwZjnhsgQkx1Ux zRp^ZobYl^MBvED(LWXN-{?^oQqMQ43Tl@X~I`8LZZai%7%X!Xw&Uv20;rQnTtT;dq zZ{#~qTJ3IGlDN=8@{bx(rZA6J_=W&Qi3GJs;f~0oXsM8FW8D`!9Q9RaAS49@Qu~PJ zlGq3au)MyvFRq9W@EY$a`Y%CdG+mM0U~*1AYrA8Y_$0j1IrvioLYXk4*#vU*EwS?v%^5%1XxRIiCn8CP-TT%3j6T% z>~q|2=)?GxFG!|!m~8Q&w#=o?c!bFPvqMlMI;2YhMY}E|82NCFbmkNcZa+j^N}$f_ z!jEg)a9Z4l0{I5e|8e2hck+ zNJFJZ*{i`CQvU#0Cmn$JVM;H?R@a1}M2dPM%jovBASQ27*^hC1n#klkg}ojw2V$qF zh0Q3Ikf57wW+>)F18$;Af1V%FpXQBOS%TFFBr^rCG3=9K5eH>jmM{^2gB{ICeWIoR#Dk?^q=ZauSW49^^V9P;>-|!v5|5|vj9$@99Pjm zCUNkWU^7-j +/** + * @defgroup genPubTypes Structure Types + * @ingroup Public + * @brief Enums and Data Structures used in public API + * @{ + */ + + /** Enum for specifying activation function types */ typedef enum { @@ -137,6 +145,7 @@ typedef struct cmsis_nn_tile dilation; cmsis_nn_activation activation; } cmsis_nn_dw_conv_params; + /** CMSIS-NN object for pooling layer parameters */ typedef struct { @@ -267,4 +276,8 @@ typedef struct } cmsis_nn_lstm_params; +/** + * @} // end group genPubTypes + */ + #endif /* ARM_NN_TYPES_H */ diff --git a/Include/arm_nnfunctions.h b/Include/arm_nnfunctions.h index a6ac4e22..d8062f80 100644 --- a/Include/arm_nnfunctions.h +++ b/Include/arm_nnfunctions.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2010-2023 Arm Limited and/or its affiliates + * SPDX-FileCopyrightText: Copyright 2010-2024 Arm Limited and/or its affiliates * * SPDX-License-Identifier: Apache-2.0 * @@ -21,87 +21,12 @@ * Title: arm_nnfunctions.h * Description: Public header file for CMSIS NN Library * - * $Date: 18 December 2023 - * $Revision: V.12.5.0 + * $Date: 9 January 2024 + * $Revision: V.12.5.1 * * Target : Arm(R) M-Profile Architecture * -------------------------------------------------------------------- */ -/** - \mainpage CMSIS NN Software Library - * - * \tableofcontents - * \section Introduction - * - * - * This user manual describes the CMSIS NN software library, - * a collection of efficient neural network kernels developed to maximize the - * performance and minimize the memory footprint of neural networks on Arm Cortex-M processors. - * - * The library is divided into a number of functions each covering a specific category: - * - \ref NNConv - * - \ref Acti - * - \ref FC - * - \ref SVDF - * - \ref Pooling - * - \ref Softmax - * - \ref groupElementwise - * - \ref LSTM - * - * \section Processors Supported Processors - * - * CMSIS-NN targets Cortex-M processors with typically three different implementations for each function. Each - * targets a different group of processors. - * - Processors without Single Instruction Multiple Data(SIMD) capability (e.g, Cortex-M0) - * - Processors with DSP extension (e.g Cortex-M4) - * - Processors with Arm M-Profile Vector Extension(MVE) instructions (e.g Cortex-M55) - * The right implementation is picked through feature flags and the user does not have to explicit set it. - * - * \section Framework Quantization Specification - * The library follows the [int8](https://www.tensorflow.org/lite/performance/quantization_spec) and int16 - * quantization specification of TensorFlow Lite for Microcontrollers. - * \section Overview Block Diagram - * - * \image html CMSIS-NN-OVERVIEW.PNG - * - * \section Examples - * - * - * An example image recognition application using TensorFlow Flow Lite for Microcontrollers as an inference engine - * and CMSIS-NN as the optimized library can be found in the Examples directory. - * - * \section Macros Pre-processor Macros - * - * \subsection Feature Feature flag based - * The macros below are defined in a build system based on feature flags for a chosen processor or architecture - * input to a compiler. - * These tie in to the classification in \ref Macros. - * - * For a CMSIS-NN file compiled as *armclang -mcpu=cortex-m4 --target=arm-arm-none-eabi -I - * -Ofast -O file.c* , ARM_MATH_DSP is enabled as Cortex-M4 has the DSP extension as a feature. - * - * - `ARM_MATH_DSP` - Selects code for processors with DSP extension. - * - * - `ARM_MATH_MVEI` - Selects code for processors which supports MVE instructions. - * - * \subsection MiscFlags User Set - * - `ARM_MATH_AUTOVECTORIZE` - * Applicable when ARM_MATH_MVEI is active to let the compiler auto vectorize functions, if available, that uses - inline - * assembly. This has to be explicitly set at compile time. - * - * \section Inclusive Inclusive Language - * This product confirms to Arm’s inclusive language policy and, to the best of our knowledge, - * does not contain any non-inclusive language. If you find something that concerns you, email terms@arm.com. - * - * \section Copyright Copyright Notice - * - * - * SPDX-FileCopyrightText: Copyright 2010-2023 Arm Limited and/or its affiliates - * - * - */ - /** * @defgroup Public Public * A collection of functions to perform basic operations for neural network layers. Functions with a _s8 suffix support diff --git a/Include/arm_nnsupportfunctions.h b/Include/arm_nnsupportfunctions.h index 52e6c364..9c0ebda5 100644 --- a/Include/arm_nnsupportfunctions.h +++ b/Include/arm_nnsupportfunctions.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2010-2023 Arm Limited and/or its affiliates + * SPDX-FileCopyrightText: Copyright 2010-2024 Arm Limited and/or its affiliates * * SPDX-License-Identifier: Apache-2.0 * @@ -21,8 +21,8 @@ * Title: arm_nnsupportfunctions.h * Description: Public header file of support functions for CMSIS NN Library * - * $Date: 8 December 2023 - * $Revision: V.17.6.2 + * $Date: 9 January 2024 + * $Revision: V.17.6.3 * * Target : Arm(R) M-Profile Architecture * -------------------------------------------------------------------- */ @@ -75,6 +75,20 @@ extern "C" { */ #define PACK_Q15x2_32x1(v0, v1) (((int32_t)v0 & (int32_t)0xFFFF) | ((int32_t)v1 << 16)) +/** + * @defgroup groupSupport Private + * + * Internal Support functions. Not intended to be called direclty by a CMSIS-NN user. + * + */ + +/** + * @defgroup genPrivTypes Structure Types + * @ingroup groupSupport + * @brief Data structure types used by private functions. + * @{ + */ + /** * @brief Union for SIMD access of q31/s16/s8 types */ @@ -104,10 +118,7 @@ union arm_nn_long_long }; /** - * @defgroup groupSupport Private - * - * Internal Support functions. Not intended to be called direclty by a CMSIS-NN user. - * + * @} // end group groupPrivTypes */ /** diff --git a/LICENSE.txt b/LICENSE similarity index 100% rename from LICENSE.txt rename to LICENSE diff --git a/README.md b/README.md index 9d003365..8e0e985f 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ the function to an appropriate Doxygen group as well. ### Doxygen Function prototypes must have a detailed comment header in Doxygen format. You can execute the doxygen document generation -script in the Doxygen folder to check that no errors are introduced. +script in the Documentation/Doxygen folder to check that no errors are introduced. ### Unit Tests For any new features and bug fixes, new unit tests are needed. Improvements have to be verifed by unit tests. If you do diff --git a/Scripts/gen_pack.sh b/Scripts/gen_pack.sh deleted file mode 100755 index 833e931c..00000000 --- a/Scripts/gen_pack.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/bin/bash -# SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates -# -# SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the License); you may -# not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an AS IS BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Version: 2.3 -# Date: 2022-09-28 -# This bash script generates a CMSIS Software Pack: -# - -set -o pipefail - -# Set version of gen pack library -REQUIRED_GEN_PACK_LIB="0.5.1" - -# Set default command line arguments -DEFAULT_ARGS=(-c "v") - -# Pack warehouse directory - destination -PACK_OUTPUT=./output - -# Temporary pack build directory -PACK_BUILD=./build - -# Specify directory names to be added to pack base directory -PACK_DIRS=" - Documentation - Include - Source -" - -# Specify file names to be added to pack base directory -PACK_BASE_FILES=" - LICENSE.txt - README.md -" - -# Specify file names to be deleted from pack build directory -PACK_DELETE_FILES="" - -# Specify patches to be applied -PACK_PATCH_FILES="" - -# Specify addition argument to packchk -PACKCHK_ARGS=() - -# Specify additional dependencies for packchk -PACKCHK_DEPS=" - ARM.CMSIS.pdsc -" - -# custom pre-processing steps -function preprocess() { - ./DoxyGen/gen_doc.sh -} - -# custom post-processing steps -function postprocess() { - # Set component version to match pack version - VERSION=$(git_describe "${CHANGELOG}" | sed -e "s/+g.*$//") - sed -i -e "s/Cgroup=\"NN Lib\" Cversion=\"[^\"]*\"/Cgroup=\"NN Lib\" Cversion=\"${VERSION}\"/" ${PACK_BUILD}/ARM.CMSIS-NN.pdsc -} - -############ DO NOT EDIT BELOW ########### - -function install_lib() { - local URL="https://github.com/Open-CMSIS-Pack/gen-pack/archive/refs/tags/v$1.tar.gz" - echo "Downloading gen-pack lib to '$2'" - mkdir -p "$2" - curl -L "${URL}" -s | tar -xzf - --strip-components 1 -C "$2" || exit 1 -} - -function load_lib() { - if [[ -d ${GEN_PACK_LIB} ]]; then - . "${GEN_PACK_LIB}/gen-pack" - return 0 - fi - local GLOBAL_LIB="/usr/local/share/gen-pack/${REQUIRED_GEN_PACK_LIB}" - local USER_LIB="${HOME}/.local/share/gen-pack/${REQUIRED_GEN_PACK_LIB}" - if [[ ! -d "${GLOBAL_LIB}" && ! -d "${USER_LIB}" ]]; then - echo "Required gen_pack lib not found!" >&2 - install_lib "${REQUIRED_GEN_PACK_LIB}" "${USER_LIB}" - fi - - if [[ -d "${GLOBAL_LIB}" ]]; then - . "${GLOBAL_LIB}/gen-pack" - elif [[ -d "${USER_LIB}" ]]; then - . "${USER_LIB}/gen-pack" - else - echo "Required gen-pack lib is not installed!" >&2 - exit 1 - fi -} - -load_lib -gen_pack "${DEFAULT_ARGS[@]}" "$@" - -exit 0 diff --git a/Scripts/git-configure.sh b/Scripts/git-configure.sh deleted file mode 100755 index 83f11c72..00000000 --- a/Scripts/git-configure.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates -# -# SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the License); you may -# not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an AS IS BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -DIRNAME=$(git rev-parse --show-toplevel) - -if ! git config --local -l | egrep -q include.path=../.gitconfig$; then - git config --local --add include.path ../.gitconfig - rm ${DIRNAME}/.git/index - git checkout HEAD -- ${DIRNAME} -fi diff --git a/Scripts/git-version.clean b/Scripts/git-version.clean deleted file mode 100755 index 854cae5d..00000000 --- a/Scripts/git-version.clean +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -# SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates -# -# SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the License); you may -# not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an AS IS BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -sed -e "s/release version=\"[^\"]*\"/release version=\"0.0.0\"/" | \ - sed -e "s/Cversion=\"[^\"]*\"/Cversion=\"0.0.0\"/" diff --git a/Scripts/git-version.smudge b/Scripts/git-version.smudge deleted file mode 100755 index 50ee0f86..00000000 --- a/Scripts/git-version.smudge +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates -# -# SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the License); you may -# not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an AS IS BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -DIRNAME=$(dirname $(readlink -f $0)) -DESCRIBE=$(readlink -f ${DIRNAME}/git_describe.sh) -VERSION=$(${DESCRIBE} v) - -sed -e "s/release version=\"0.0.0\"/release version=\"${VERSION}\"/" | \ - sed -e "s/Cversion=\"0.0.0\"/Cversion=\"${VERSION}\"/" diff --git a/gen_pack.sh b/gen_pack.sh new file mode 100755 index 00000000..a11bacb2 --- /dev/null +++ b/gen_pack.sh @@ -0,0 +1,112 @@ +#!/usr/bin/env bash +# Version: 3.0 +# Date: 2024-01-09 +# This bash script generates a CMSIS-NN Software Pack: +# + +set -o pipefail + +# Set version of gen pack library +# For available versions see https://github.com/Open-CMSIS-Pack/gen-pack/tags. +# Use the tag name without the prefix "v", e.g., 0.7.0 +REQUIRED_GEN_PACK_LIB="0.9.1" + +# Set default command line arguments +DEFAULT_ARGS=(-c "v") + +# Pack warehouse directory - destination +# Default: ./output +# +# PACK_OUTPUT=./output + +# Temporary pack build directory, +# Default: ./build +# +# PACK_BUILD=./build + +# Specify directory names to be added to pack base directory +# An empty list defaults to all folders next to this script. +# Default: empty (all folders) +# +PACK_DIRS=" + Documentation + Include + Source +" + +# Specify file names to be added to pack base directory +# Default: empty +# +PACK_BASE_FILES=" + LICENSE + README.md +" + +# Specify file names to be deleted from pack build directory +# Default: empty +# +PACK_DELETE_FILES=" + Documentation/Doxygen + Documentation/README.md +" + +# Specify patches to be applied +# Default: empty +# +# PACK_PATCH_FILES="" + +# Specify addition argument to packchk +# Default: empty +# +# PACKCHK_ARGS=() + +# Specify additional dependencies for packchk +# Default: empty +# +PACKCHK_DEPS=" + ARM.CMSIS.pdsc +" + +# Optional: restrict fallback modes for changelog generation +# Default: full +# Values: +# - full Tag annotations, release descriptions, or commit messages (in order) +# - release Tag annotations, or release descriptions (in order) +# - tag Tag annotations only +# +PACK_CHANGELOG_MODE="tag" +# custom pre-processing steps +# +# usage: preprocess +# The build folder +# +function preprocess() { + # add custom steps here to be executed + # before populating the pack build folder + ./Documentation/Doxygen/gen_doc.sh + return 0 +} +# custom post-processing steps +# +# usage: postprocess +# The build folder +# +function postprocess() { + # Set component version to match pack version + VERSION=$(git_describe "${CHANGELOG}" | sed -e "s/+g.*$//") + sed -i -e "s/Cgroup=\"NN Lib\" Cversion=\"[^\"]*\"/Cgroup=\"NN Lib\" Cversion=\"${VERSION}\"/" ${PACK_BUILD}/ARM.CMSIS-NN.pdsc +} + +############ DO NOT EDIT BELOW ########### + +# Set GEN_PACK_LIB_PATH to use a specific gen-pack library root +# ... instead of bootstrap based on REQUIRED_GEN_PACK_LIB +if [[ -f "${GEN_PACK_LIB_PATH}/gen-pack" ]]; then + . "${GEN_PACK_LIB}/gen-pack" +else + . <(curl -sL "https://raw.githubusercontent.com/Open-CMSIS-Pack/gen-pack/main/bootstrap") +fi + +gen_pack "${DEFAULT_ARGS[@]}" "$@" + +exit 0