Generic-ADSP-Common.cmake 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # support for the Analog Devices toolchain for their DSPs
  2. # Raphael Cotty" <raphael.cotty (AT) googlemail.com>
  3. #
  4. # it supports three architectures:
  5. # Blackfin
  6. # TS (TigerShark)
  7. # 21k (Sharc 21xxx)
  8. IF(NOT ADSP)
  9. SET(ADSP TRUE)
  10. SET(CMAKE_STATIC_LIBRARY_SUFFIX ".dlb")
  11. SET(CMAKE_SHARED_LIBRARY_SUFFIX "")
  12. SET(CMAKE_EXECUTABLE_SUFFIX ".dxe")
  13. # if ADSP_PROCESSOR has not been set, but CMAKE_SYSTEM_PROCESSOR has,
  14. # assume that this is the processor name to use for the compiler
  15. IF(CMAKE_SYSTEM_PROCESSOR AND NOT ADSP_PROCESSOR)
  16. SET(ADSP_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR})
  17. ENDIF(CMAKE_SYSTEM_PROCESSOR AND NOT ADSP_PROCESSOR)
  18. # if ADSP_PROCESSOR_SILICIUM_REVISION has not been set, use "none"
  19. IF(NOT ADSP_PROCESSOR_SILICIUM_REVISION)
  20. SET(ADSP_PROCESSOR_SILICIUM_REVISION "none")
  21. ENDIF(NOT ADSP_PROCESSOR_SILICIUM_REVISION)
  22. # this file is included from the C and CXX files, so handle both here
  23. GET_FILENAME_COMPONENT(_ADSP_DIR "${CMAKE_C_COMPILER}" PATH)
  24. IF(NOT _ADSP_DIR)
  25. GET_FILENAME_COMPONENT(_ADSP_DIR "${CMAKE_CXX_COMPILER}" PATH)
  26. ENDIF(NOT _ADSP_DIR)
  27. IF(NOT _ADSP_DIR)
  28. GET_FILENAME_COMPONENT(_ADSP_DIR "${CMAKE_ASM_COMPILER}" PATH)
  29. ENDIF(NOT _ADSP_DIR)
  30. # detect architecture
  31. IF(CMAKE_C_COMPILER MATCHES ccblkfn OR CMAKE_CXX_COMPILER MATCHES ccblkfn OR CMAKE_ASM_COMPILER MATCHES easmBLKFN)
  32. IF(NOT ADSP_PROCESSOR)
  33. SET(ADSP_PROCESSOR "ADSP-BF561")
  34. ENDIF(NOT ADSP_PROCESSOR)
  35. SET(ADSP_BLACKFIN TRUE)
  36. SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/Blackfin")
  37. ENDIF(CMAKE_C_COMPILER MATCHES ccblkfn OR CMAKE_CXX_COMPILER MATCHES ccblkfn OR CMAKE_ASM_COMPILER MATCHES easmBLKFN)
  38. IF(CMAKE_C_COMPILER MATCHES ccts OR CMAKE_CXX_COMPILER MATCHES ccts OR CMAKE_ASM_COMPILER MATCHES easmTS)
  39. IF(NOT ADSP_PROCESSOR)
  40. SET(ADSP_PROCESSOR "ADSP-TS101")
  41. ENDIF(NOT ADSP_PROCESSOR)
  42. SET(ADSP_TS TRUE)
  43. SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/TS")
  44. ENDIF(CMAKE_C_COMPILER MATCHES ccts OR CMAKE_CXX_COMPILER MATCHES ccts OR CMAKE_ASM_COMPILER MATCHES easmTS)
  45. IF(CMAKE_C_COMPILER MATCHES cc21k OR CMAKE_CXX_COMPILER MATCHES cc21k OR CMAKE_ASM_COMPILER MATCHES easm21k)
  46. IF(NOT ADSP_PROCESSOR)
  47. SET(ADSP_PROCESSOR "ADSP-21060")
  48. ENDIF(NOT ADSP_PROCESSOR)
  49. SET(ADSP_21K TRUE)
  50. SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k") # default if nothing matches
  51. IF (ADSP_PROCESSOR MATCHES "210..$")
  52. SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k")
  53. ENDIF(ADSP_PROCESSOR MATCHES "210..$")
  54. IF (ADSP_PROCESSOR MATCHES "211..$")
  55. SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/211k")
  56. ENDIF(ADSP_PROCESSOR MATCHES "211..$")
  57. IF (ADSP_PROCESSOR MATCHES "212..$")
  58. SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/212k")
  59. ENDIF(ADSP_PROCESSOR MATCHES "212..$")
  60. IF (ADSP_PROCESSOR MATCHES "213..$")
  61. SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/213k")
  62. ENDIF(ADSP_PROCESSOR MATCHES "213..$")
  63. SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k")
  64. ENDIF(CMAKE_C_COMPILER MATCHES cc21k OR CMAKE_CXX_COMPILER MATCHES cc21k OR CMAKE_ASM_COMPILER MATCHES easm21k)
  65. LINK_DIRECTORIES("${_ADSP_FAMILY_DIR}/lib")
  66. # vdk support
  67. FIND_PROGRAM( ADSP_VDKGEN_EXECUTABLE vdkgen "${_ADSP_FAMILY_DIR}/vdk" )
  68. MACRO(ADSP_GENERATE_VDK VDK_GENERATED_HEADER VDK_GENERATED_SOURCE VDK_KERNEL_SUPPORT_FILE)
  69. ADD_CUSTOM_COMMAND(
  70. OUTPUT ${VDK_GENERATED_HEADER} ${VDK_GENERATED_SOURCE}
  71. COMMAND ${ADSP_VDKGEN_EXECUTABLE} ${VDK_KERNEL_SUPPORT_FILE} -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -MM
  72. DEPENDS ${VDK_KERNEL_SUPPORT_FILE}
  73. )
  74. ENDMACRO(ADSP_GENERATE_VDK VDK_GENERATED_HEADER VDK_GENERATED_SOURCE VDK_KERNEL_SUPPORT_FILE)
  75. # loader support
  76. FIND_PROGRAM( ADSP_ELFLOADER_EXECUTABLE elfloader "${_ADSP_FAMILY_DIR}" )
  77. # BOOT_MODE: prom, flash, spi, spislave, UART, TWI, FIFO
  78. # FORMAT: hex, ASCII, binary, include
  79. # WIDTH: 8, 16
  80. MACRO(ADSP_CREATE_LOADER_FILE TARGET_NAME BOOT_MODE FORMAT WIDTH)
  81. ADD_CUSTOM_COMMAND(
  82. TARGET ${TARGET_NAME}
  83. POST_BUILD
  84. COMMAND ${ADSP_ELFLOADER_EXECUTABLE} ${EXECUTABLE_OUTPUT_PATH}/${TARGET_NAME}.dxe -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -b ${BOOT_MODE} -f ${FORMAT} -width ${WIDTH} -o ${EXECUTABLE_OUTPUT_PATH}/${TARGET_NAME}.ldr
  85. COMMENT "Building the loader file"
  86. )
  87. ENDMACRO(ADSP_CREATE_LOADER_FILE TARGET_NAME BOOT_MODE FORMAT WIDTH)
  88. MACRO(ADSP_CREATE_LOADER_FILE_INIT TARGET_NAME BOOT_MODE FORMAT WIDTH INITIALIZATION_FILE)
  89. ADD_CUSTOM_COMMAND(
  90. TARGET ${TARGET_NAME}
  91. POST_BUILD
  92. COMMAND ${ADSP_ELFLOADER_EXECUTABLE} ${EXECUTABLE_OUTPUT_PATH}/${TARGET_NAME}.dxe -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -b ${BOOT_MODE} -f ${FORMAT} -width ${WIDTH} -o ${EXECUTABLE_OUTPUT_PATH}/${TARGET_NAME}.ldr -init ${INITIALIZATION_FILE}
  93. COMMENT "Building the loader file"
  94. )
  95. ENDMACRO(ADSP_CREATE_LOADER_FILE_INIT TARGET_NAME BOOT_MODE FORMAT WIDTH INITIALIZATION_FILE)
  96. ENDIF(NOT ADSP)