1# Copyright 2021-2022 hpmicro 2# SPDX-License-Identifier: BSD-3-Clause 3cmake_minimum_required(VERSION 3.13) 4 5if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.20) 6 cmake_policy(SET CMP0116 OLD) 7endif() 8cmake_policy(SET CMP0079 NEW) 9 10set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) 11set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}) 12 13sdk_linker_global_symbols("_flash_size=${flash_size}") 14sdk_linker_global_symbols("_extram_size=${extram_size}") 15sdk_linker_global_symbols("_heap_size=${HEAP_SIZE}") 16sdk_linker_global_symbols("_stack_size=${STACK_SIZE}") 17 18if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "") 19 string(TOLOWER ${CMAKE_BUILD_TYPE} build_type) 20 string(FIND ${build_type} "release" found) 21 if (${found} GREATER_EQUAL 0) 22 sdk_compile_options("-O3") 23 else() 24 sdk_compile_options("-g") 25 endif() 26 27 SET(FLASH_XIP 0) 28 SET(FLASH_SDRAM_XIP 0) 29 SET(LINK_TO_FLASH 0) 30 31 if(NOT DEFINED INCLUDE_BOOTHEADER) 32 SET(INCLUDE_BOOTHEADER 0) 33 endif() 34 set(USE_PRESET_FLASH_LINKER 0) 35 string(FIND ${build_type} "flash_" found) 36 if(${found} GREATER_EQUAL 0) 37 set(USE_PRESET_FLASH_LINKER 1) 38 string(FIND ${build_type} "flash_xip" found) 39 if(${found} GREATER_EQUAL 0) 40 set(FLASH_XIP 1) 41 set(LINK_TO_FLASH 1) 42 set(INCLUDE_BOOTHEADER 1) 43 sdk_compile_definitions("-DFLASH_XIP=1") 44 endif() 45 string(FIND ${build_type} "flash_sdram_xip" found) 46 if(${found} GREATER_EQUAL 0) 47 set(FLASH_SDRAM_XIP 1) 48 set(LINK_TO_FLASH 1) 49 set(INCLUDE_BOOTHEADER 1) 50 sdk_compile_definitions("-DFLASH_XIP=1") 51 sdk_compile_definitions("-DINIT_EXT_RAM_FOR_DATA=1") 52 endif() 53 54 string(FIND ${build_type} "flash_uf2" found) 55 if(${found} GREATER_EQUAL 0) 56 set(FLASH_UF2 1) 57 set(LINK_TO_FLASH 1) 58 set(EXCLUDE_BOOTHEADER 1) 59 sdk_compile_definitions("-DFLASH_UF2=1") 60 endif() 61 62 string(FIND ${build_type} "flash_sdram_uf2" found) 63 if(${found} GREATER_EQUAL 0) 64 set(FLASH_SDRAM_UF2 1) 65 set(LINK_TO_FLASH 1) 66 set(EXCLUDE_BOOTHEADER 1) 67 sdk_compile_definitions("-DFLASH_UF2=1") 68 sdk_compile_definitions("-DINIT_EXT_RAM_FOR_DATA=1") 69 endif() 70 71 72 if(DEFINED EXCLUDE_BOOTHEADER) 73 if (${EXCLUDE_BOOTHEADER}) 74 set(INCLUDE_BOOTHEADER 0) 75 endif() 76 endif() 77 endif() 78 79 string(FIND ${build_type} "sec_core_img" found) 80 if(${found} GREATER_EQUAL 0) 81 set(GEN_SEC_CORE_IMG_C_ARRAY true) 82 endif() 83 84else() 85 sdk_compile_options("-g") 86endif() 87 88if(NOT DEFINED USE_PRESET_FLASH_LINKER OR "${USE_PRESET_FLASH_LINKER}" EQUAL "0") 89 if(DEFINED CUSTOM_GCC_LINKER_FILE) 90 set(USE_CUSTOM_LINKER 1) 91 set(LINKER_SCRIPT ${CUSTOM_GCC_LINKER_FILE}) 92 else() 93 if(DEFINED USE_LINKER_TEMPLATE) 94 set(USE_CUSTOM_LINKER 1) 95 set(LINKER_SCRIPT ${PROJECT_BINARY_DIR}/linker.cmd) 96 endif() 97 endif() 98endif() 99 100if(${EXCLUDE_SDK_STARTUP}) 101 set(USE_CUSTOM_STARTUP 1) 102endif() 103 104if(DEFINED CUSTOM_GCC_STARTUP_FILE) 105 set(USE_CUSTOM_STARTUP 1) 106 sdk_gcc_src(${CUSTOM_GCC_STARTUP_FILE}) 107endif() 108 109if(DEFINED CUSTOM_SES_STARTUP_FILE) 110 set(USE_CUSTOM_STARTUP 1) 111 sdk_gcc_src(${CUSTOM_SES_STARTUP_FILE}) 112endif() 113 114sdk_sys_inc(${SYSROOT_DIR}/include) 115 116# parse module list file provided in soc folder, it will decide which modules to be enabled under drivers folder 117import_soc_modules(soc/${HPM_SOC}/soc_modules.list) 118 119add_subdirectory(arch) 120add_subdirectory(boards) 121add_subdirectory(soc) 122add_subdirectory(drivers) 123add_subdirectory(utils) 124add_subdirectory(components) 125add_subdirectory(middleware) 126 127if(DEFINED USE_LINKER_TEMPLATE) 128 set(linker_script_dep DEPFILE ${PROJECT_BINARY_DIR}/${LINKER_SCRIPT}.dep) 129 get_directory_property(compile_defs COMPILE_DEFINITIONS) 130 foreach(def ${compile_defs}) 131 list(APPEND all_defs -D${def}) 132 endforeach() 133 get_filename_component(base_name ${CMAKE_CURRENT_BINARY_DIR} NAME) 134 set(LINKER_TARGET linker) 135 add_custom_command( 136 OUTPUT ${LINKER_SCRIPT} 137 DEPENDS 138 ${HPM_SDK_BASE}/soc/${HPM_SOC}/toolchains/gcc/linker.ld 139 ${linker_script_dep} 140 COMMAND ${CMAKE_C_COMPILER} 141 -x assembler-with-cpp 142 -MD -MF ${LINKER_SCRIPT}.dep -MT ${base_name}/${LINKER_SCRIPT} 143 ${all_defs} 144 -E ${HPM_SDK_BASE}/soc/${HPM_SOC}/toolchains/gcc/linker.ld 145 -P 146 -o ${LINKER_SCRIPT} 147 WORKING_DIRECTORY ${PROJECT_BINARY_DIR} 148 VERBATIM) 149 add_custom_target(${LINKER_TARGET} DEPENDS ${LINKER_SCRIPT}) 150endif() 151 152sdk_ld_options("-T ${LINKER_SCRIPT}") 153 154# prepare dummy file 155set(EMPTY_FILE ${PROJECT_BINARY_DIR}/misc/empty.c) 156file(WRITE ${EMPTY_FILE} "") 157 158add_executable(${APP_ELF_NAME} ${EMPTY_FILE}) 159 160set_target_properties(${APP_ELF_NAME} PROPERTIES LINK_DEPENDS ${LINKER_SCRIPT}) 161 162if("${TOOLCHAIN_VARIANT}" STREQUAL "nds-gcc") 163 target_link_libraries(${APP_ELF_NAME} 164 "-Wl,-Map=${PROJECT_BINARY_DIR}/${APP_MAP_NAME}" 165 ${HPM_SDK_NDSGCC_LIB_ITF} 166 ${HPM_SDK_GCC_LIB} ${HPM_SDK_GCC_LIB_ITF} 167 ${HPM_SDK_LIB} ${HPM_SDK_LIB_ITF} app) 168else() 169 target_link_libraries(${APP_ELF_NAME} 170 "-Wl,-Map=${PROJECT_BINARY_DIR}/${APP_MAP_NAME}" 171 ${HPM_SDK_GCC_LIB} ${HPM_SDK_GCC_LIB_ITF} 172 ${HPM_SDK_LIB} ${HPM_SDK_LIB_ITF} app) 173endif() 174 175add_custom_command( 176 TARGET ${APP_ELF_NAME} 177 COMMAND "${CROSS_COMPILE}objcopy" -O binary -S ${PROJECT_BINARY_DIR}/${APP_ELF_NAME} ${PROJECT_BINARY_DIR}/${APP_BIN_NAME} 178) 179 180add_custom_command( 181 TARGET ${APP_ELF_NAME} 182 COMMAND "${CROSS_COMPILE}objdump" -S -d ${PROJECT_BINARY_DIR}/${APP_ELF_NAME} > ${PROJECT_BINARY_DIR}/${APP_ASM_NAME} 183) 184 185 186if (DEFINED GEN_SEC_CORE_IMG_C_ARRAY) 187 if(NOT DEFINED SEC_CORE_IMG_C_ARRAY_OUTPUT) 188 set(SEC_CORE_IMG_C_ARRAY_OUTPUT "sec_core_img.c") 189 endif() 190 generate_bin2c_array(${SEC_CORE_IMG_C_ARRAY_OUTPUT}) 191endif() 192