# 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)