• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1set(BUILD_DIR "$ENV{BUILD_TMP_DIR}" ) #version id
2set(OBJCOPY_PATH "$ENV{OBJCOPY_PATH}" ) #OBJCOPY_PATH
3
4
5
6##最终的链接目标,会生成对应的.a库
7#################################################
8## arch代码
9#################################################
10list(APPEND ARCH_SRCS
11    $<TARGET_OBJECTS:prt_hw_boot>
12    $<TARGET_OBJECTS:prt_port>
13    $<TARGET_OBJECTS:prt_dispatch>
14    $<TARGET_OBJECTS:prt_hwi>
15    $<TARGET_OBJECTS:prt_exc>
16    $<TARGET_OBJECTS:prt_hw_exc>
17    $<TARGET_OBJECTS:prt_vector>
18    $<TARGET_OBJECTS:prt_vi_dispatch>
19    $<TARGET_OBJECTS:prt_hw_tick>
20    $<TARGET_OBJECTS:prt_hw_tick_minor>
21    $<TARGET_OBJECTS:prt_hw>
22    $<TARGET_OBJECTS:prt_div64>
23)
24
25#################################################
26## kernel代码
27#################################################
28list(APPEND KERNEL_SRCS
29    $<TARGET_OBJECTS:prt_sem>
30    $<TARGET_OBJECTS:prt_sem_init>
31    $<TARGET_OBJECTS:prt_sem_minor>
32    $<TARGET_OBJECTS:prt_irq>
33    $<TARGET_OBJECTS:prt_sys>
34    $<TARGET_OBJECTS:prt_sys_init>
35    $<TARGET_OBJECTS:prt_sys_time>
36    $<TARGET_OBJECTS:prt_amp_task>
37    $<TARGET_OBJECTS:prt_amp_task_del>
38    $<TARGET_OBJECTS:prt_amp_task_init>
39    $<TARGET_OBJECTS:prt_amp_task_minor>
40    $<TARGET_OBJECTS:prt_task>
41    $<TARGET_OBJECTS:prt_taskself_id>
42    $<TARGET_OBJECTS:prt_task_attrib>
43    $<TARGET_OBJECTS:prt_task_del>
44    $<TARGET_OBJECTS:prt_task_global>
45    $<TARGET_OBJECTS:prt_task_info>
46    $<TARGET_OBJECTS:prt_task_init>
47    $<TARGET_OBJECTS:prt_task_minor>
48    $<TARGET_OBJECTS:prt_task_priority>
49    $<TARGET_OBJECTS:prt_task_sem>
50    $<TARGET_OBJECTS:prt_tick>
51    $<TARGET_OBJECTS:prt_tick_init>
52    $<TARGET_OBJECTS:prt_timer>
53    $<TARGET_OBJECTS:prt_swtmr>
54    $<TARGET_OBJECTS:prt_swtmr_init>
55    $<TARGET_OBJECTS:prt_swtmr_minor>
56    $<TARGET_OBJECTS:prt_kexc>
57    $<TARGET_OBJECTS:prt_exc>
58    $<TARGET_OBJECTS:prt_timer_minor>
59)
60list(APPEND IPC_SRCS
61    $<TARGET_OBJECTS:prt_event>
62    $<TARGET_OBJECTS:prt_queue>
63    $<TARGET_OBJECTS:prt_queue_del>
64    $<TARGET_OBJECTS:prt_queue_minor>
65    $<TARGET_OBJECTS:prt_queue_init>
66)
67list(APPEND MEM_SRCS
68    $<TARGET_OBJECTS:prt_fscmem>
69    $<TARGET_OBJECTS:prt_mem>
70)
71list(APPEND OM_SRCS
72    $<TARGET_OBJECTS:prt_cpup>
73    $<TARGET_OBJECTS:prt_cpup_minor>
74    $<TARGET_OBJECTS:prt_cpup_thread>
75    $<TARGET_OBJECTS:prt_cpup_thread_64>
76    $<TARGET_OBJECTS:prt_cpup_thread_init>
77    $<TARGET_OBJECTS:prt_cpup_warn>
78    $<TARGET_OBJECTS:prt_err>
79    $<TARGET_OBJECTS:prt_err_init>
80    $<TARGET_OBJECTS:prt_hook_init>
81    $<TARGET_OBJECTS:prt_rnd_set>
82)
83list(APPEND BASE_LIB_SRCS
84    $<TARGET_OBJECTS:prt_lib_math64>
85    $<TARGET_OBJECTS:prt_lib_version>
86)
87
88
89
90#编译结果
91string(TOUPPER ${PLAM_TYPE} PLAM_TYPE_UP)
92string(TOUPPER ${CPU_TYPE} CPU_TYPE_UP)
93#编译通用的.a库
94add_library(CortexMXarch  STATIC "${ARCH_SRCS}")
95add_library(CortexMXkernel  STATIC "${KERNEL_SRCS}" "${BASE_LIB_SRCS}")
96add_library(CortexMXmem  STATIC "${MEM_SRCS}")
97add_library(CortexMXom  STATIC "${OM_SRCS}")
98add_library(CortexMXipc  STATIC "${IPC_SRCS}")
99
100set_target_properties(CortexMXarch PROPERTIES SUFFIX ".lib")
101set_target_properties(CortexMXkernel PROPERTIES SUFFIX ".lib")
102set_target_properties(CortexMXmem PROPERTIES SUFFIX ".lib")
103set_target_properties(CortexMXom PROPERTIES SUFFIX ".lib")
104set_target_properties(CortexMXipc PROPERTIES SUFFIX ".lib")
105
106add_custom_target(cleanobj)
107add_custom_command(TARGET cleanobj POST_BUILD
108                   COMMAND echo "Finish Building!"
109                   )
110
111if (${COMPILE_MODE} STREQUAL "debug")
112    message("=============== COMPILE_MODE is ${COMPILE_MODE} ===============")
113else()
114    add_custom_command(
115        TARGET CortexMXarch
116        POST_BUILD
117        COMMAND sh ${PROJECT_SOURCE_DIR}/cmake/common/build_auxiliary_script/make_lib_rename_file_type.sh ${OBJCOPY_PATH} ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} "CortexMXarch.lib"
118    )
119
120    add_custom_command(
121        TARGET CortexMXkernel
122        POST_BUILD
123        COMMAND sh ${PROJECT_SOURCE_DIR}/cmake/common/build_auxiliary_script/make_lib_rename_file_type.sh ${OBJCOPY_PATH} ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} "CortexMXkernel.lib"
124    )
125
126    add_custom_command(
127        TARGET CortexMXmem
128        POST_BUILD
129        COMMAND sh ${PROJECT_SOURCE_DIR}/cmake/common/build_auxiliary_script/make_lib_rename_file_type.sh ${OBJCOPY_PATH} ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} "CortexMXmem.lib"
130    )
131
132    add_custom_command(
133        TARGET CortexMXom
134        POST_BUILD
135        COMMAND sh ${PROJECT_SOURCE_DIR}/cmake/common/build_auxiliary_script/make_lib_rename_file_type.sh ${OBJCOPY_PATH} ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} "CortexMXom.lib"
136    )
137
138    add_custom_command(
139        TARGET CortexMXipc
140        POST_BUILD
141        COMMAND sh ${PROJECT_SOURCE_DIR}/cmake/common/build_auxiliary_script/make_lib_rename_file_type.sh ${OBJCOPY_PATH} ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} "CortexMXipc.lib"
142    )
143endif()
144####以下为m4 make install打包脚本#####
145set(m4_cortex_export modules)
146
147# 下面的变量分别定义了安装根目录、头文件安装目录、动态库安装目录、静态库安装目录、OBJECT文件安装目录、可执行程序安装目录、配置文件安装目录。
148# 注意:所有安装路径必须是相对CMAKE_INSTALL_PREFIX的相对路径,不可以使用绝对路径!!!
149# 否则安装目录下的配置文件(foo-config.cmake, foo-tragets.cmake等)拷贝到其它目录时无法工作。
150set(INSTALL_M4_CORTEX_BASE_DIR               .)
151set(INSTALL_M4_CORTEX_INCLUDE_DIR            UniProton/include)
152set(INSTALL_M4_CORTEX_INCLUDE_SEC_DIR        libboundscheck/include)
153set(INSTALL_M4_CORTEX_ARCHIVE_DIR            UniProton/lib/cortex_m4)
154set(INSTALL_M4_CORTEX_ARCHIVE_SEC_DIR        libboundscheck/lib/cortex_m4)
155set(INSTALL_M4_CORTEX_ARCHIVE_CONFIG_DIR     UniProton/config)
156set(INSTALL_M4_CORTEX_CONFIG_DIR             cmake/cortex_m4)
157
158
159
160
161include(CMakePackageConfigHelpers)
162configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/tool_chain/m4-cortex-config.cmake.in
163    ${CMAKE_CURRENT_BINARY_DIR}/UniProton-m4-cortex-config.cmake
164    INSTALL_DESTINATION ${INSTALL_M4_CORTEX_CONFIG_DIR}
165    PATH_VARS
166    INSTALL_M4_CORTEX_BASE_DIR
167    INSTALL_M4_CORTEX_INCLUDE_DIR
168    INSTALL_M4_CORTEX_INCLUDE_SEC_DIR
169    INSTALL_M4_CORTEX_ARCHIVE_DIR
170    INSTALL_M4_CORTEX_ARCHIVE_SEC_DIR
171    INSTALL_M4_CORTEX_ARCHIVE_CONFIG_DIR
172    INSTALL_M4_CORTEX_CONFIG_DIR
173    INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}
174)
175install(EXPORT ${m4_cortex_export}
176        NAMESPACE UniProton::
177        FILE UniProton-m4-cortex-targets.cmake
178        DESTINATION ${INSTALL_M4_CORTEX_CONFIG_DIR}
179)
180install(FILES
181    ${CMAKE_CURRENT_BINARY_DIR}/UniProton-m4-cortex-config.cmake
182    DESTINATION ${INSTALL_M4_CORTEX_CONFIG_DIR}
183)
184
185install(TARGETS
186    CortexMXarch
187    CortexMXkernel
188    CortexMXmem
189    CortexMXom
190    CortexMXipc
191    EXPORT ${m4_cortex_export}
192    ARCHIVE DESTINATION ${INSTALL_M4_CORTEX_ARCHIVE_DIR}/
193)
194if (${COMPILE_OPTION} STREQUAL "coverity" OR ${COMPILE_OPTION} STREQUAL "fortify" OR ${COMPILE_OPTION} STREQUAL "UniProton")
195    message("Don't Install Sec Lib In ${COMPILE_OPTION}")
196else()
197    install(TARGETS
198        CortexMXsec_c
199        EXPORT ${m4_cortex_export}
200        ARCHIVE DESTINATION ${INSTALL_M4_CORTEX_ARCHIVE_SEC_DIR}
201    )
202
203    if (NOT "${RPROTON_INSTALL_FILE_OPTION}" STREQUAL "SUPER_BUILD")
204        ##{GLOB 所有文件 | GLOB_RECURSE 递归查找文件&文件夹}
205        file(GLOB glob_sec_files  ${PROJECT_SOURCE_DIR}/platform/libboundscheck/include/*.h)
206        install(FILES
207            ${glob_sec_files}
208            DESTINATION ${INSTALL_M4_CORTEX_INCLUDE_SEC_DIR}
209        )
210    endif()
211endif()
212install(FILES
213    ${PROJECT_SOURCE_DIR}/build/uniproton_config/config_m4/prt_buildef.h
214    DESTINATION ${INSTALL_M4_CORTEX_ARCHIVE_CONFIG_DIR}/cortex_m4/config_m4
215)
216if (NOT "${RPROTON_INSTALL_FILE_OPTION}" STREQUAL "SUPER_BUILD")
217    ##{GLOB 所有文件 | GLOB_RECURSE 递归查找文件&文件夹}
218
219    install(FILES
220        ${PROJECT_SOURCE_DIR}/src/config/prt_config.c
221        ${PROJECT_SOURCE_DIR}/src/config/prt_config_internal.h
222        ${PROJECT_SOURCE_DIR}/src/config/config/prt_config.h
223        DESTINATION ${INSTALL_M4_CORTEX_ARCHIVE_CONFIG_DIR}
224    )
225
226    ##{GLOB 所有文件 | GLOB_RECURSE 递归查找文件&文件夹}
227    file(GLOB hw_drv_include_files  ${PROJECT_SOURCE_DIR}/src/include/uapi/hw/armv7-m/*)
228    install(FILES
229        ${hw_drv_include_files}
230        DESTINATION ${INSTALL_M4_CORTEX_INCLUDE_DIR}/hw/armv7-m
231    )
232
233
234    install(FILES
235
236        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_clk.h
237        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_cpup.h
238        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_err.h
239        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_errno.h
240        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_event.h
241        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_exc.h
242        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_hook.h
243        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_hwi.h
244        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_idle.h
245        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_mem.h
246        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_module.h
247        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_queue.h
248        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_sem.h
249        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_sys.h
250        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_task.h
251        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_tick.h
252        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_timer.h
253        ${PROJECT_SOURCE_DIR}/src/include/uapi/prt_typedef.h
254        DESTINATION ${INSTALL_M4_CORTEX_INCLUDE_DIR}/
255    )
256endif()
257