SConscript 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import os
  2. import shutil
  3. from building import *
  4. group = []
  5. cwd = GetCurrentDir()
  6. src = []
  7. CPPPATH = []
  8. CPPDEFINES = []
  9. packages_root_path = cwd + '/../'
  10. def find_CMSIS_5_folder(root_path):
  11. dirs = os.listdir(root_path)
  12. for dir in dirs:
  13. if os.path.isdir(packages_root_path + dir):
  14. if "CMSIS_5-" in dir:
  15. return dir
  16. print("Cannot find CMSIS_5's path!")
  17. return None
  18. cmsis_folder_name = find_CMSIS_5_folder(packages_root_path)
  19. if (cmsis_folder_name == None):
  20. Return('group') # if we cannot find the CMSIS folder, it will directly return
  21. cmsis_root_path = packages_root_path + cmsis_folder_name
  22. cmsis_path = cmsis_root_path + '/CMSIS/'
  23. if GetDepend('PKG_CMSIS_CORE'):
  24. CPPPATH += [cmsis_path + 'Core/Include']
  25. if GetDepend('PKG_CMSIS_DSP'):
  26. CPPPATH += [cmsis_path + 'DSP/Include']
  27. CPPPATH += [cmsis_path + 'DSP/Include/dsp']
  28. CPPPATH += [cmsis_path + 'DSP/PrivateInclude']
  29. if GetDepend('PKG_CMSIS_DSP_BASIC_MATH'):
  30. dsp_BasicMathFunctions_path = cmsis_path + 'DSP/Source/BasicMathFunctions/'
  31. src += [dsp_BasicMathFunctions_path + 'BasicMathFunctions.c']
  32. src += [dsp_BasicMathFunctions_path + 'BasicMathFunctionsF16.c']
  33. if GetDepend('PKG_CMSIS_DSP_BAYES'):
  34. dsp_BayesFunctions_path = cmsis_path + 'DSP/Source/BayesFunctions/'
  35. src += [dsp_BayesFunctions_path + 'BayesFunctions.c']
  36. src += [dsp_BayesFunctions_path + 'BayesFunctionsF16.c']
  37. if GetDepend('PKG_CMSIS_DSP_COMMON_TABLES'):
  38. dsp_CommonTables_path = cmsis_path + 'DSP/Source/CommonTables/'
  39. src += [dsp_CommonTables_path + 'CommonTables.c']
  40. src += [dsp_CommonTables_path + 'CommonTablesF16.c']
  41. if GetDepend('PKG_CMSIS_DSP_COMPLEX_MATH'):
  42. dsp_ComplexMathFunctions_path = cmsis_path + 'DSP/Source/ComplexMathFunctions/'
  43. src += [dsp_ComplexMathFunctions_path + 'ComplexMathFunctions.c']
  44. src += [dsp_ComplexMathFunctions_path + 'ComplexMathFunctionsF16.c']
  45. if GetDepend('PKG_CMSIS_DSP_CONTROLLER'):
  46. dsp_ControllerFunctions_path = cmsis_path + 'DSP/Source/ControllerFunctions/'
  47. src += [dsp_ControllerFunctions_path + 'ControllerFunctions.c']
  48. if GetDepend('PKG_CMSIS_DSP_DISTANCE'):
  49. dsp_DistanceFunctions_path = cmsis_path + 'DSP/Source/DistanceFunctions/'
  50. src += [dsp_DistanceFunctions_path + 'DistanceFunctions.c']
  51. src += [dsp_DistanceFunctions_path + 'DistanceFunctionsF16.c']
  52. if GetDepend('PKG_CMSIS_DSP_FAST_MATH'):
  53. dsp_FastMathFunctions_path = cmsis_path + 'DSP/Source/FastMathFunctions/'
  54. src += [dsp_FastMathFunctions_path + 'FastMathFunctions.c']
  55. src += [dsp_FastMathFunctions_path + 'FastMathFunctionsF16.c']
  56. if GetDepend('PKG_CMSIS_DSP_FILTERING'):
  57. dsp_FilteringFunctions_path = cmsis_path + 'DSP/Source/FilteringFunctions/'
  58. src += [dsp_FilteringFunctions_path + 'FilteringFunctions.c']
  59. src += [dsp_FilteringFunctions_path + 'FilteringFunctionsF16.c']
  60. if GetDepend('PKG_CMSIS_DSP_INTERPOLATION'):
  61. dsp_InterpolationFunctions_path = cmsis_path + 'DSP/Source/InterpolationFunctions/'
  62. src += [dsp_InterpolationFunctions_path + 'InterpolationFunctions.c']
  63. src += [dsp_InterpolationFunctions_path + 'InterpolationFunctionsF16.c']
  64. if GetDepend('PKG_CMSIS_DSP_MATRIX'):
  65. dsp_MatrixFunctions_path = cmsis_path + 'DSP/Source/MatrixFunctions/'
  66. src += [dsp_MatrixFunctions_path + 'MatrixFunctions.c']
  67. src += [dsp_MatrixFunctions_path + 'MatrixFunctionsF16.c']
  68. if GetDepend('PKG_CMSIS_DSP_QUATERNION_MATH'):
  69. dsp_QuaternionMathFunctions_path = cmsis_path + 'DSP/Source/QuaternionMathFunctions/'
  70. src += [dsp_QuaternionMathFunctions_path + 'QuaternionMathFunctions.c']
  71. if GetDepend('PKG_CMSIS_DSP_STATISTICS'):
  72. dsp_StatisticsFunctions_path = cmsis_path + 'DSP/Source/StatisticsFunctions/'
  73. src += [dsp_StatisticsFunctions_path + 'StatisticsFunctions.c']
  74. src += [dsp_StatisticsFunctions_path + 'StatisticsFunctionsF16.c']
  75. if GetDepend('PKG_CMSIS_DSP_SUPPORT'):
  76. dsp_SupportFunctions_path = cmsis_path + 'DSP/Source/SupportFunctions/'
  77. src += [dsp_SupportFunctions_path + 'SupportFunctions.c']
  78. src += [dsp_SupportFunctions_path + 'SupportFunctionsF16.c']
  79. if GetDepend('PKG_CMSIS_DSP_SVM'):
  80. dsp_SVMFunctions_path = cmsis_path + 'DSP/Source/SVMFunctions/'
  81. src += [dsp_SVMFunctions_path + 'SVMFunctions.c']
  82. src += [dsp_SVMFunctions_path + 'SVMFunctionsF16.c']
  83. if GetDepend('PKG_CMSIS_DSP_TRANSFORM'):
  84. dsp_TransformFunctions_path = cmsis_path + 'DSP/Source/TransformFunctions/'
  85. src += [dsp_TransformFunctions_path + 'TransformFunctions.c']
  86. src += [dsp_TransformFunctions_path + 'TransformFunctionsF16.c']
  87. if GetDepend('PKG_CMSIS_NN'):
  88. CPPPATH += [cmsis_path + 'NN/Include']
  89. if GetDepend('PKG_CMSIS_NN_ACTIVATION'):
  90. src += Glob(cmsis_path + 'NN/Source/ActivationFunctions/*.c')
  91. if GetDepend('PKG_CMSIS_NN_BASIC_MATH'):
  92. src += Glob(cmsis_path + 'NN/Source/BasicMathFunctions/*.c')
  93. if GetDepend('PKG_CMSIS_NN_CONCATENATION'):
  94. src += Glob(cmsis_path + 'NN/Source/ConcatenationFunctions/*.c')
  95. if GetDepend('PKG_CMSIS_NN_CONVOLUTION'):
  96. src += Glob(cmsis_path + 'NN/Source/ConvolutionFunctions/*.c')
  97. if GetDepend('PKG_CMSIS_NN_FULLY_CONNECTED'):
  98. src += Glob(cmsis_path + 'NN/Source/FullyConnectedFunctions/*.c')
  99. if GetDepend('PKG_CMSIS_NN_SUPPORT'):
  100. src += Glob(cmsis_path + 'NN/Source/NNSupportFunctions/*.c')
  101. if GetDepend('PKG_CMSIS_NN_POOLING'):
  102. src += Glob(cmsis_path + 'NN/Source/PoolingFunctions/*.c')
  103. if GetDepend('PKG_CMSIS_NN_RESHAPE'):
  104. src += Glob(cmsis_path + 'NN/Source/ReshapeFunctions/*.c')
  105. if GetDepend('PKG_CMSIS_NN_SVDF'):
  106. src += Glob(cmsis_path + 'NN/Source/SVDFunctions/*.c')
  107. if GetDepend('PKG_CMSIS_NN_SOFTMAX'):
  108. src += Glob(cmsis_path + 'NN/Source/SoftmaxFunctions/*.c')
  109. if GetDepend('PKG_USING_CMSIS_RTOS2'):
  110. CPPPATH += [cmsis_path + 'RTOS2/Include']
  111. if GetDepend('PKG_CMSIS_RTOS2_COMPATIBLE_CMSIS_RTOS1'):
  112. CPPPATH = CPPPATH + [cmsis_path + 'RTOS2/Template']
  113. src += Glob(cmsis_path + 'RTOS2/Template/*.c')
  114. # Definitions for MATH
  115. if GetDepend('ARCH_ARM_CORTEX_M7'):
  116. CPPDEFINES += ['ARM_MATH_CM7']
  117. elif GetDepend('ARCH_ARM_CORTEX_M4'):
  118. CPPDEFINES += ['ARM_MATH_CM4']
  119. elif GetDepend('ARCH_ARM_CORTEX_M3'):
  120. CPPDEFINES += ['ARM_MATH_CM3']
  121. elif GetDepend('ARCH_ARM_CORTEX_M4'):
  122. CPPDEFINES += ['ARM_MATH_CM4']
  123. elif GetDepend('ARCH_ARM_CORTEX_M0'):
  124. CPPDEFINES += ['ARM_MATH_CM0']
  125. if GetDepend('ARCH_ARM_CORTEX_FPU'):
  126. CPPDEFINES += ['__FPU_PRESENT=1']
  127. #delate non-used files
  128. try:
  129. shutil.rmtree(os.path.join(cmsis_root_path,'.github'))
  130. shutil.rmtree(os.path.join(cmsis_root_path,'Device'))
  131. shutil.rmtree(os.path.join(cmsis_root_path,'docker'))
  132. except:
  133. pass
  134. group = DefineGroup('CMSIS-5', src, depend = ['PKG_USING_CMSIS_5'], CPPPATH = CPPPATH, LOCAL_CPPDEFINES=CPPDEFINES)
  135. Return('group')