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