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 9if(NOT ADSP) 10 11 set(ADSP TRUE) 12 13 set(CMAKE_STATIC_LIBRARY_SUFFIX ".dlb") 14 set(CMAKE_SHARED_LIBRARY_SUFFIX "") 15 set(CMAKE_EXECUTABLE_SUFFIX ".dxe") 16 17 # if ADSP_PROCESSOR has not been set, but CMAKE_SYSTEM_PROCESSOR has, 18 # assume that this is the processor name to use for the compiler 19 if(CMAKE_SYSTEM_PROCESSOR AND NOT ADSP_PROCESSOR) 20 set(ADSP_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}) 21 endif() 22 23 # if ADSP_PROCESSOR_SILICIUM_REVISION has not been set, use "none" 24 if(NOT ADSP_PROCESSOR_SILICIUM_REVISION) 25 set(ADSP_PROCESSOR_SILICIUM_REVISION "none") 26 endif() 27 28 # this file is included from the C and CXX files, so handle both here 29 30 get_filename_component(_ADSP_DIR "${CMAKE_C_COMPILER}" PATH) 31 if(NOT _ADSP_DIR) 32 get_filename_component(_ADSP_DIR "${CMAKE_CXX_COMPILER}" PATH) 33 endif() 34 if(NOT _ADSP_DIR) 35 get_filename_component(_ADSP_DIR "${CMAKE_ASM_COMPILER}" PATH) 36 endif() 37 38 # detect architecture 39 40 if(CMAKE_C_COMPILER MATCHES ccblkfn OR CMAKE_CXX_COMPILER MATCHES ccblkfn OR CMAKE_ASM_COMPILER MATCHES easmBLKFN) 41 if(NOT ADSP_PROCESSOR) 42 set(ADSP_PROCESSOR "ADSP-BF561") 43 endif() 44 set(ADSP_BLACKFIN TRUE) 45 set(_ADSP_FAMILY_DIR "${_ADSP_DIR}/Blackfin") 46 endif() 47 48 if(CMAKE_C_COMPILER MATCHES ccts OR CMAKE_CXX_COMPILER MATCHES ccts OR CMAKE_ASM_COMPILER MATCHES easmTS) 49 if(NOT ADSP_PROCESSOR) 50 set(ADSP_PROCESSOR "ADSP-TS101") 51 endif() 52 set(ADSP_TS TRUE) 53 set(_ADSP_FAMILY_DIR "${_ADSP_DIR}/TS") 54 endif() 55 56 if(CMAKE_C_COMPILER MATCHES cc21k OR CMAKE_CXX_COMPILER MATCHES cc21k OR CMAKE_ASM_COMPILER MATCHES easm21k) 57 if(NOT ADSP_PROCESSOR) 58 set(ADSP_PROCESSOR "ADSP-21060") 59 endif() 60 set(ADSP_21K TRUE) 61 62 set(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k") # default if nothing matches 63 if (ADSP_PROCESSOR MATCHES "210..$") 64 set(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k") 65 endif() 66 67 if (ADSP_PROCESSOR MATCHES "211..$") 68 set(_ADSP_FAMILY_DIR "${_ADSP_DIR}/211k") 69 endif() 70 71 if (ADSP_PROCESSOR MATCHES "212..$") 72 set(_ADSP_FAMILY_DIR "${_ADSP_DIR}/212k") 73 endif() 74 75 if (ADSP_PROCESSOR MATCHES "213..$") 76 set(_ADSP_FAMILY_DIR "${_ADSP_DIR}/213k") 77 endif() 78 79 set(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k") 80 endif() 81 82 83 link_directories("${_ADSP_FAMILY_DIR}/lib") 84 85 # vdk support 86 find_program( ADSP_VDKGEN_EXECUTABLE vdkgen "${_ADSP_FAMILY_DIR}/vdk" ) 87 88 macro(ADSP_GENERATE_VDK VDK_GENERATED_HEADER VDK_GENERATED_SOURCE VDK_KERNEL_SUPPORT_FILE) 89 add_custom_command( 90 OUTPUT ${VDK_GENERATED_HEADER} ${VDK_GENERATED_SOURCE} 91 COMMAND ${ADSP_VDKGEN_EXECUTABLE} ${VDK_KERNEL_SUPPORT_FILE} -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -MM 92 DEPENDS ${VDK_KERNEL_SUPPORT_FILE} 93 ) 94 endmacro() 95 96 # loader support 97 find_program( ADSP_ELFLOADER_EXECUTABLE elfloader "${_ADSP_FAMILY_DIR}" ) 98 99 # BOOT_MODE: prom, flash, spi, spislave, UART, TWI, FIFO 100 # FORMAT: hex, ASCII, binary, include 101 # WIDTH: 8, 16 102 macro(ADSP_CREATE_LOADER_FILE TARGET_NAME BOOT_MODE FORMAT WIDTH) 103 add_custom_command( 104 TARGET ${TARGET_NAME} 105 POST_BUILD 106 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 107 COMMENT "Building the loader file" 108 ) 109 endmacro() 110 111 macro(ADSP_CREATE_LOADER_FILE_INIT TARGET_NAME BOOT_MODE FORMAT WIDTH INITIALIZATION_FILE) 112 add_custom_command( 113 TARGET ${TARGET_NAME} 114 POST_BUILD 115 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} 116 COMMENT "Building the loader file" 117 ) 118 endmacro() 119 120endif() 121