• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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