gen_doc.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/bin/bash
  2. # Version: 1.0
  3. # Date: 2021-05-05
  4. # This bash script generates CMSIS Documentation:
  5. #
  6. # Pre-requisites:
  7. # - bash shell (for Windows: install git for Windows)
  8. # - doxygen 1.8.6
  9. # - mscgen 0.20
  10. set -o pipefail
  11. DIRNAME=$(dirname $(readlink -f $0))
  12. DOXYGEN=$(which doxygen)
  13. MSCGEN=$(which mscgen)
  14. REGEN=0
  15. ALLPARTS=($(find ${DIRNAME} -mindepth 1 -maxdepth 1 -type d -exec basename {} \;))
  16. PARTS=()
  17. if [[ -z "$*" ]]; then
  18. REGEN=1
  19. else
  20. for part in "$*"; do
  21. if [[ " ${ALLPARTS[@]} " =~ " $part " ]]; then
  22. PARTS+=($part)
  23. fi
  24. done
  25. fi
  26. if [[ ! -f "${DOXYGEN}" ]]; then
  27. echo "Doxygen not found!" >&2
  28. echo "Did you miss to add it to PATH?"
  29. exit 1
  30. else
  31. version=$("${DOXYGEN}" --version)
  32. echo "DOXYGEN is ${DOXYGEN} at version ${version}"
  33. if [[ "${version}" != "1.8.6" ]]; then
  34. echo " >> Version is different from 1.8.6 !" >&2
  35. fi
  36. fi
  37. if [[ ! -f "${MSCGEN}" ]]; then
  38. echo "mscgen not found!" >&2
  39. echo "Did you miss to add it to PATH?"
  40. exit 1
  41. else
  42. version=$("${MSCGEN}" 2>/dev/null | grep "Mscgen version" | sed -r -e 's/Mscgen version ([^,]+),.*/\1/')
  43. echo "MSCGEN is ${MSCGEN} at version ${version}"
  44. if [[ "${version}" != "0.20" ]]; then
  45. echo " >> Version is different from 0.20 !" >&2
  46. fi
  47. fi
  48. function doxygen {
  49. partname=$(basename $(dirname $1))
  50. if [[ $REGEN != 0 ]] || [[ " ${PARTS[@]} " =~ " ${partname} " ]]; then
  51. pushd "$(dirname $1)" > /dev/null
  52. echo "${DOXYGEN} $1"
  53. "${DOXYGEN}" $(basename "$1")
  54. popd > /dev/null
  55. if [[ $2 != 0 ]]; then
  56. cp -f "${DIRNAME}/Doxygen_Templates/search.css" "${DIRNAME}/../Documentation/${partname}/html/search/"
  57. fi
  58. projectName=$(grep -E "PROJECT_NAME\s+=" $1 | sed -r -e 's/[^"]*"([^"]+)"/\1/')
  59. projectNumber=$(grep -E "PROJECT_NUMBER\s+=" $1 | sed -r -e 's/[^"]*"([^"]+)"/\1/')
  60. datetime=$(date -u +'%a %b %e %Y %H:%M:%S')
  61. sed -e "s/{datetime}/${datetime}/" "${DIRNAME}/Doxygen_Templates/cmsis_footer.js" \
  62. | sed -e "s/{projectName}/${projectName}/" \
  63. | sed -e "s/{projectNumber}/${projectNumber}/" \
  64. > "${DIRNAME}/../Documentation/${partname}/html/cmsis_footer.js"
  65. fi
  66. }
  67. if [[ $REGEN != 0 ]]; then
  68. echo "Cleaning existing documentation ..."
  69. find "${DIRNAME}/../Documentation/" -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} +
  70. fi
  71. echo "Generating documentation ..."
  72. echo "Copying Build html"
  73. mkdir -p "${DIRNAME}/../Documentation/Build/"
  74. cp -r "${DIRNAME}/Build/html/" "${DIRNAME}/../Documentation/Build/"
  75. doxygen "${DIRNAME}/Core/core.dxy" 1
  76. doxygen "${DIRNAME}/Core_A/core_A.dxy" 1
  77. doxygen "${DIRNAME}/DAP/dap.dxy" 1
  78. doxygen "${DIRNAME}/Driver/Driver.dxy" 1
  79. echo "Copying DSP html"
  80. mkdir -p "${DIRNAME}/../Documentation/DSP/"
  81. cp -r "${DIRNAME}/DSP/html" "${DIRNAME}/../Documentation/DSP/"
  82. doxygen "${DIRNAME}/General/general.dxy" 0
  83. doxygen "${DIRNAME}/DAP/dap.dxy" 1
  84. echo "Copying NN html"
  85. mkdir -p "${DIRNAME}/../Documentation/NN/"
  86. cp -r "${DIRNAME}/NN/html" "${DIRNAME}/../Documentation/NN/"
  87. echo "Copying Pack html"
  88. mkdir -p "${DIRNAME}/../Documentation/Pack/"
  89. cp -r "${DIRNAME}/Pack/html" "${DIRNAME}/../Documentation/Pack/"
  90. doxygen "${DIRNAME}/RTOS/rtos.dxy" 1
  91. doxygen "${DIRNAME}/RTOS2/rtos.dxy" 1
  92. doxygen "${DIRNAME}/SVD/svd.dxy" 0
  93. doxygen "${DIRNAME}/Zone/zone.dxy" 1
  94. exit 0