summaryrefslogtreecommitdiff
path: root/Modules/Platform/Generic-ADSP-Common.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/Platform/Generic-ADSP-Common.cmake')
-rw-r--r--Modules/Platform/Generic-ADSP-Common.cmake120
1 files changed, 120 insertions, 0 deletions
diff --git a/Modules/Platform/Generic-ADSP-Common.cmake b/Modules/Platform/Generic-ADSP-Common.cmake
new file mode 100644
index 000000000..10fb34e00
--- /dev/null
+++ b/Modules/Platform/Generic-ADSP-Common.cmake
@@ -0,0 +1,120 @@
+# support for the Analog Devices toolchain for their DSPs
+# Raphael Cotty" <raphael.cotty (AT) googlemail.com>
+#
+# it supports three architectures:
+# Blackfin
+# TS (TigerShark)
+# 21k (Sharc 21xxx)
+
+IF(NOT ADSP)
+
+ SET(ADSP TRUE)
+
+ SET(CMAKE_STATIC_LIBRARY_SUFFIX ".dlb")
+ SET(CMAKE_SHARED_LIBRARY_SUFFIX "")
+ SET(CMAKE_EXECUTABLE_SUFFIX ".dxe")
+
+ # if ADSP_PROCESSOR has not been set, but CMAKE_SYSTEM_PROCESSOR has,
+ # assume that this is the processor name to use for the compiler
+ IF(CMAKE_SYSTEM_PROCESSOR AND NOT ADSP_PROCESSOR)
+ SET(ADSP_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR})
+ ENDIF(CMAKE_SYSTEM_PROCESSOR AND NOT ADSP_PROCESSOR)
+
+ # if ADSP_PROCESSOR_SILICIUM_REVISION has not been set, use "none"
+ IF(NOT ADSP_PROCESSOR_SILICIUM_REVISION)
+ SET(ADSP_PROCESSOR_SILICIUM_REVISION "none")
+ ENDIF(NOT ADSP_PROCESSOR_SILICIUM_REVISION)
+
+ # this file is included from the C and CXX files, so handle both here
+
+ GET_FILENAME_COMPONENT(_ADSP_DIR "${CMAKE_C_COMPILER}" PATH)
+ IF(NOT _ADSP_DIR)
+ GET_FILENAME_COMPONENT(_ADSP_DIR "${CMAKE_CXX_COMPILER}" PATH)
+ ENDIF(NOT _ADSP_DIR)
+ IF(NOT _ADSP_DIR)
+ GET_FILENAME_COMPONENT(_ADSP_DIR "${CMAKE_ASM_COMPILER}" PATH)
+ ENDIF(NOT _ADSP_DIR)
+
+ # detect architecture
+
+ IF(CMAKE_C_COMPILER MATCHES ccblkfn OR CMAKE_CXX_COMPILER MATCHES ccblkfn OR CMAKE_ASM_COMPILER MATCHES easmBLKFN)
+ IF(NOT ADSP_PROCESSOR)
+ SET(ADSP_PROCESSOR "ADSP-BF561")
+ ENDIF(NOT ADSP_PROCESSOR)
+ SET(ADSP_BLACKFIN TRUE)
+ SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/Blackfin")
+ ENDIF(CMAKE_C_COMPILER MATCHES ccblkfn OR CMAKE_CXX_COMPILER MATCHES ccblkfn OR CMAKE_ASM_COMPILER MATCHES easmBLKFN)
+
+ IF(CMAKE_C_COMPILER MATCHES ccts OR CMAKE_CXX_COMPILER MATCHES ccts OR CMAKE_ASM_COMPILER MATCHES easmTS)
+ IF(NOT ADSP_PROCESSOR)
+ SET(ADSP_PROCESSOR "ADSP-TS101")
+ ENDIF(NOT ADSP_PROCESSOR)
+ SET(ADSP_TS TRUE)
+ SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/TS")
+ ENDIF(CMAKE_C_COMPILER MATCHES ccts OR CMAKE_CXX_COMPILER MATCHES ccts OR CMAKE_ASM_COMPILER MATCHES easmTS)
+
+ IF(CMAKE_C_COMPILER MATCHES cc21k OR CMAKE_CXX_COMPILER MATCHES cc21k OR CMAKE_ASM_COMPILER MATCHES easm21k)
+ IF(NOT ADSP_PROCESSOR)
+ SET(ADSP_PROCESSOR "ADSP-21060")
+ ENDIF(NOT ADSP_PROCESSOR)
+ SET(ADSP_21K TRUE)
+
+ SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k") # default if nothing matches
+ IF (ADSP_PROCESSOR MATCHES "210..$")
+ SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k")
+ ENDIF(ADSP_PROCESSOR MATCHES "210..$")
+
+ IF (ADSP_PROCESSOR MATCHES "211..$")
+ SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/211k")
+ ENDIF(ADSP_PROCESSOR MATCHES "211..$")
+
+ IF (ADSP_PROCESSOR MATCHES "212..$")
+ SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/212k")
+ ENDIF(ADSP_PROCESSOR MATCHES "212..$")
+
+ IF (ADSP_PROCESSOR MATCHES "213..$")
+ SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/213k")
+ ENDIF(ADSP_PROCESSOR MATCHES "213..$")
+
+ SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k")
+ ENDIF(CMAKE_C_COMPILER MATCHES cc21k OR CMAKE_CXX_COMPILER MATCHES cc21k OR CMAKE_ASM_COMPILER MATCHES easm21k)
+
+
+ LINK_DIRECTORIES("${_ADSP_FAMILY_DIR}/lib")
+
+ # vdk support
+ FIND_PROGRAM( ADSP_VDKGEN_EXECUTABLE vdkgen "${_ADSP_FAMILY_DIR}/vdk" )
+
+ MACRO(ADSP_GENERATE_VDK VDK_GENERATED_HEADER VDK_GENERATED_SOURCE VDK_KERNEL_SUPPORT_FILE)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${VDK_GENERATED_HEADER} ${VDK_GENERATED_SOURCE}
+ COMMAND ${ADSP_VDKGEN_EXECUTABLE} ${VDK_KERNEL_SUPPORT_FILE} -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -MM
+ DEPENDS ${VDK_KERNEL_SUPPORT_FILE}
+ )
+ ENDMACRO(ADSP_GENERATE_VDK VDK_GENERATED_HEADER VDK_GENERATED_SOURCE VDK_KERNEL_SUPPORT_FILE)
+
+ # loader support
+ FIND_PROGRAM( ADSP_ELFLOADER_EXECUTABLE elfloader "${_ADSP_FAMILY_DIR}" )
+
+ # BOOT_MODE: prom, flash, spi, spislave, UART, TWI, FIFO
+ # FORMAT: hex, ASCII, binary, include
+ # WIDTH: 8, 16
+ MACRO(ADSP_CREATE_LOADER_FILE TARGET_NAME BOOT_MODE FORMAT WIDTH)
+ ADD_CUSTOM_COMMAND(
+ TARGET ${TARGET_NAME}
+ POST_BUILD
+ 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
+ COMMENT "Building the loader file"
+ )
+ ENDMACRO(ADSP_CREATE_LOADER_FILE TARGET_NAME BOOT_MODE FORMAT WIDTH)
+
+ MACRO(ADSP_CREATE_LOADER_FILE_INIT TARGET_NAME BOOT_MODE FORMAT WIDTH INITIALIZATION_FILE)
+ ADD_CUSTOM_COMMAND(
+ TARGET ${TARGET_NAME}
+ POST_BUILD
+ 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}
+ COMMENT "Building the loader file"
+ )
+ ENDMACRO(ADSP_CREATE_LOADER_FILE_INIT TARGET_NAME BOOT_MODE FORMAT WIDTH INITIALIZATION_FILE)
+
+ENDIF(NOT ADSP)