gen_doc.sh 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. doxygen "${DIRNAME}/Build/Build.dxy" 1
  73. doxygen "${DIRNAME}/Core/core.dxy" 1
  74. doxygen "${DIRNAME}/Core_A/core_A.dxy" 1
  75. doxygen "${DIRNAME}/DAP/dap.dxy" 1
  76. doxygen "${DIRNAME}/Driver/Driver.dxy" 1
  77. doxygen "${DIRNAME}/DSP/dsp.dxy" 1
  78. doxygen "${DIRNAME}/General/general.dxy" 0
  79. doxygen "${DIRNAME}/DAP/dap.dxy" 1
  80. doxygen "${DIRNAME}/NN/nn.dxy" 1
  81. doxygen "${DIRNAME}/Pack/Pack.dxy" 1
  82. doxygen "${DIRNAME}/RTOS/rtos.dxy" 1
  83. doxygen "${DIRNAME}/RTOS2/rtos.dxy" 1
  84. doxygen "${DIRNAME}/SVD/svd.dxy" 0
  85. doxygen "${DIRNAME}/Zone/zone.dxy" 1
  86. exit 0