1if(NOT DEFINED BUILD_ROM_CALLBACK) 2 set(BUILD_ROM_CALLBACK False) 3endif() 4set(OBJ_TEMP_DIR "${PROJECT_BINARY_DIR}/obj_tmp") 5 6macro(reg_rom_callback) 7 if(NOT TARGET ${COMPONENT_NAME}) 8 set(ROM_LIB ${LIBS}) 9 set(DEPEND_TARGET) 10 else() 11 get_target_property(ORI_LIB_DIR ${COMPONENT_NAME} BINARY_DIR) 12 get_target_property(CUSTOM_LIB_DIR ${COMPONENT_NAME} ARCHIVE_OUTPUT_DIRECTORY) 13 if(CUSTOM_LIB_DIR) 14 set(ROM_LIB ${CUSTOM_LIB_DIR}/lib${COMPONENT_NAME}.a) 15 else() 16 set(ROM_LIB ${ORI_LIB_DIR}/lib${COMPONENT_NAME}.a) 17 endif() 18 set(DEPEND_TARGET ${COMPONENT_NAME}) 19 endif() 20 21 add_custom_target(GEN_ROM_CB_${COMPONENT_NAME} ALL 22 WORKING_DIRECTORY ${OBJ_TEMP_DIR} 23 COMMAND echo "${ROM_LIB}" 24 COMMAND ${CP} ${ROM_LIB} ${OBJ_TEMP_DIR} 25 COMMAND ${CMAKE_AR} -x lib${COMPONENT_NAME}.a 26 DEPENDS ${DEPEND_TARGET} 27 ) 28endmacro() 29 30function(build_rom_callback) 31 execute_process( 32 COMMAND ${MKDIR} ${OBJ_TEMP_DIR} 33 ) 34 add_custom_target(BUILD_ROM_CALLBACK ALL 35 COMMAND ${CMAKE_LINKER} -r ${OBJ_TEMP_DIR}/*.o* -o ${OBJ_TEMP_DIR}/rom_bin.o 36 COMMAND ${CMAKE_NM} -u ${OBJ_TEMP_DIR}/rom_bin.o > rom_bin_raw.undef 37 COMMAND ${CMAKE_READELF} -W -r ${OBJ_TEMP_DIR}/rom_bin.o > rom_bin.rel 38 COMMAND ${CMAKE_READELF} -W -s ${OBJ_TEMP_DIR}/rom_bin.o > rom_symbol.list 39 COMMAND ${CMAKE_READELF} -W -s ${TARGET_NAME}.elf > image_symbol.list 40 DEPENDS ${TARGET_NAME} 41 ) 42 43endfunction(build_rom_callback) 44