• 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
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