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 10project(hpm_sdk) 11 12add_library(${HPM_SDK_LIB} STATIC "") 13target_link_libraries(${HPM_SDK_LIB} PUBLIC ${HPM_SDK_LIB_ITF}) 14 15add_library(${HPM_SDK_GCC_LIB} STATIC "") 16target_link_libraries(${HPM_SDK_GCC_LIB} PUBLIC ${HPM_SDK_GCC_LIB_ITF} ${HPM_SDK_LIB_ITF}) 17 18if(flash_size) 19 sdk_linker_global_symbols("_flash_size=${flash_size}") 20endif() 21 22if(extram_size) 23 sdk_linker_global_symbols("_extram_size=${extram_size}") 24endif() 25 26if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "") 27 string(TOLOWER ${CMAKE_BUILD_TYPE} build_type) 28 string(FIND ${build_type} "release" found) 29 if (${found} GREATER_EQUAL 0) 30 sdk_compile_options("-O3") 31 else() 32 sdk_compile_options("-g") 33 endif() 34 35 SET(FLASH_XIP 0) 36 SET(FLASH_SDRAM_XIP 0) 37 SET(LINK_TO_FLASH 0) 38 39 if(NOT DEFINED INCLUDE_BOOTHEADER) 40 SET(INCLUDE_BOOTHEADER 0) 41 endif() 42 string(FIND ${build_type} "flash_" found) 43 if(${found} GREATER_EQUAL 0) 44 string(FIND ${build_type} "flash_xip" found) 45 if(${found} GREATER_EQUAL 0) 46 set(FLASH_XIP 1) 47 set(LINK_TO_FLASH 1) 48 set(INCLUDE_BOOTHEADER 1) 49 sdk_compile_definitions("-DFLASH_XIP=1") 50 endif() 51 string(FIND ${build_type} "flash_sdram_xip" found) 52 if(${found} GREATER_EQUAL 0) 53 set(FLASH_SDRAM_XIP 1) 54 set(LINK_TO_FLASH 1) 55 set(INCLUDE_BOOTHEADER 1) 56 sdk_compile_definitions("-DFLASH_XIP=1") 57 sdk_compile_definitions("-DINIT_EXT_RAM_FOR_DATA=1") 58 endif() 59 60 string(FIND ${build_type} "flash_uf2" found) 61 if(${found} GREATER_EQUAL 0) 62 set(FLASH_UF2 1) 63 set(LINK_TO_FLASH 1) 64 set(EXCLUDE_BOOTHEADER 1) 65 sdk_compile_definitions("-DFLASH_UF2=1") 66 endif() 67 68 string(FIND ${build_type} "flash_sdram_uf2" found) 69 if(${found} GREATER_EQUAL 0) 70 set(FLASH_SDRAM_UF2 1) 71 set(LINK_TO_FLASH 1) 72 set(EXCLUDE_BOOTHEADER 1) 73 sdk_compile_definitions("-DFLASH_UF2=1") 74 sdk_compile_definitions("-DINIT_EXT_RAM_FOR_DATA=1") 75 endif() 76 77 78 if(DEFINED EXCLUDE_BOOTHEADER) 79 if (${EXCLUDE_BOOTHEADER}) 80 set(INCLUDE_BOOTHEADER 0) 81 endif() 82 endif() 83 endif() 84 85 string(FIND ${build_type} "sec_core_img" found) 86 if(${found} GREATER_EQUAL 0) 87 set(GEN_SEC_CORE_IMG_C_ARRAY true PARENT_SCOPE) 88 endif() 89 90else() 91 sdk_compile_options("-g") 92endif() 93 94set(USE_PRESET_FLASH_LINKER 0) 95if(DEFINED CUSTOM_GCC_LINKER_FILE) 96 set(USE_CUSTOM_LINKER 1) 97 if(NOT IS_ABSOLUTE ${CUSTOM_GCC_LINKER_FILE}) 98 message(FATAL_ERROR "Custom ld script has to be absolute path not relative: ${CUSTOM_GCC_LINKER_FILE}") 99 else() 100 set(LINKER_SCRIPT ${CUSTOM_GCC_LINKER_FILE}) 101 endif() 102elseif(DEFINED USE_LINKER_TEMPLATE) 103 set(USE_CUSTOM_LINKER 1) 104 set(LINKER_SCRIPT ${PROJECT_BINARY_DIR}/linker.cmd) 105else() 106 set(USE_PRESET_FLASH_LINKER 1) 107endif() 108 109if(${EXCLUDE_SDK_STARTUP}) 110 set(USE_CUSTOM_STARTUP 1) 111endif() 112 113if(DEFINED CUSTOM_GCC_STARTUP_FILE) 114 set(USE_CUSTOM_STARTUP 1) 115 sdk_gcc_src(${CUSTOM_GCC_STARTUP_FILE}) 116endif() 117 118if(DEFINED CUSTOM_SES_STARTUP_FILE) 119 set(USE_CUSTOM_STARTUP 1) 120 sdk_ses_src(${CUSTOM_SES_STARTUP_FILE}) 121endif() 122 123sdk_sys_inc(${SYSROOT_DIR}/include) 124 125# parse module list file provided in soc folder, it will decide which modules to be enabled under drivers folder 126import_soc_modules(soc/${HPM_SOC}/soc_modules.list) 127 128add_subdirectory(arch) 129add_subdirectory(boards) 130add_subdirectory(soc) 131add_subdirectory(drivers) 132add_subdirectory(utils) 133add_subdirectory(components) 134add_subdirectory(middleware) 135 136if(DEFINED USE_LINKER_TEMPLATE) 137 set(linker_script_dep DEPFILE ${PROJECT_BINARY_DIR}/${LINKER_SCRIPT}.dep) 138 get_directory_property(compile_defs COMPILE_DEFINITIONS) 139 foreach(def ${compile_defs}) 140 list(APPEND all_defs -D${def}) 141 endforeach() 142 get_filename_component(base_name ${CMAKE_CURRENT_BINARY_DIR} NAME) 143 set(LINKER_TARGET linker) 144 add_custom_command( 145 OUTPUT ${LINKER_SCRIPT} 146 DEPENDS 147 ${HPM_SDK_BASE}/soc/${HPM_SOC}/toolchains/gcc/linker.ld 148 ${linker_script_dep} 149 COMMAND ${CMAKE_C_COMPILER} 150 -x assembler-with-cpp 151 -MD -MF ${LINKER_SCRIPT}.dep -MT ${base_name}/${LINKER_SCRIPT} 152 ${all_defs} 153 -E ${HPM_SDK_BASE}/soc/${HPM_SOC}/toolchains/gcc/linker.ld 154 -P 155 -o ${LINKER_SCRIPT} 156 WORKING_DIRECTORY ${PROJECT_BINARY_DIR} 157 VERBATIM) 158 add_custom_target(${LINKER_TARGET} DEPENDS ${LINKER_SCRIPT}) 159endif() 160 161if(NOT EXISTS ${LINKER_SCRIPT}) 162 message(FATAL_ERROR "Can not locate GNU ld linker script: ${LINKER_SCRIPT}") 163else() 164 message(STATUS "GNU ld linker script: ${LINKER_SCRIPT}") 165endif() 166sdk_ld_options("-T ${LINKER_SCRIPT}") 167 168set(generated_file_path "${PROJECT_BINARY_DIR}/generated") 169 170# generate SDK version file 171execute_process( 172 COMMAND ${CMAKE_COMMAND} -DHPM_SDK_BASE=${HPM_SDK_BASE} 173 -DOUT_FILE=${generated_file_path}/include/hpm_sdk_version.h 174 -DSDKVERSION=${SDKVERSION} 175 -DSDK_VERSION_NUMBER=${SDK_VERSION_NUMBER} 176 -DSDK_VERSION_MAJOR=${SDK_VERSION_MAJOR} 177 -DSDK_VERSION_MINOR=${SDK_VERSION_MINOR} 178 -DSDK_PATCHLEVEL=${SDK_PATCHLEVEL} 179 -DSDK_VERSION_STRING=${SDK_VERSION_STRING} 180 -P ${HPM_SDK_BASE}/cmake/gen_version_h.cmake 181 WORKING_DIRECTORY ${PROJECT_BINARY_DIR} 182) 183sdk_inc(${generated_file_path}/include) 184 185set_target_properties(${APP_ELF_NAME} PROPERTIES LINK_DEPENDS ${LINKER_SCRIPT}) 186 187if(NOT DEFINED HPM_SDK_LD_NO_WHOLE_SDK) 188 set(HPM_SDK_LD_NO_WHOLE_SDK 0) 189endif() 190 191set(HPM_SDK_WHOLE_ARCHIVE_OPT "-Wl,--whole-archive") 192if(${HPM_SDK_LD_NO_WHOLE_SDK}) 193 set(HPM_SDK_WHOLE_ARCHIVE_OPT "") 194endif() 195 196if("${TOOLCHAIN_VARIANT}" STREQUAL "nds-gcc") 197 target_link_libraries(${APP_ELF_NAME} 198 "-Wl,-Map=${EXECUTABLE_OUTPUT_PATH}/${APP_MAP_NAME}" 199 ${HPM_SDK_WHOLE_ARCHIVE_OPT} 200 ${HPM_SDK_NDSGCC_LIB_ITF} 201 ${HPM_SDK_GCC_LIB} ${HPM_SDK_GCC_LIB_ITF} 202 ${HPM_SDK_LIB} ${HPM_SDK_LIB_ITF} app 203 "-Wl,--no-whole-archive") 204else() 205 target_link_libraries(${APP_ELF_NAME} 206 "-Wl,-Map=${EXECUTABLE_OUTPUT_PATH}/${APP_MAP_NAME}" 207 ${HPM_SDK_WHOLE_ARCHIVE_OPT} 208 ${HPM_SDK_GCC_LIB} ${HPM_SDK_GCC_LIB_ITF} 209 ${HPM_SDK_LIB} ${HPM_SDK_LIB_ITF} app 210 "-Wl,--no-whole-archive") 211endif() 212