44 lines
1.5 KiB
CMake
44 lines
1.5 KiB
CMake
|
if(NOT DEFINED BUILD_ROM_CALLBACK)
|
||
|
set(BUILD_ROM_CALLBACK False)
|
||
|
endif()
|
||
|
set(OBJ_TEMP_DIR "${PROJECT_BINARY_DIR}/obj_tmp")
|
||
|
|
||
|
macro(reg_rom_callback)
|
||
|
if(NOT TARGET ${COMPONENT_NAME})
|
||
|
set(ROM_LIB ${LIBS})
|
||
|
set(DEPEND_TARGET)
|
||
|
else()
|
||
|
get_target_property(ORI_LIB_DIR ${COMPONENT_NAME} BINARY_DIR)
|
||
|
get_target_property(CUSTOM_LIB_DIR ${COMPONENT_NAME} ARCHIVE_OUTPUT_DIRECTORY)
|
||
|
if(CUSTOM_LIB_DIR)
|
||
|
set(ROM_LIB ${CUSTOM_LIB_DIR}/lib${COMPONENT_NAME}.a)
|
||
|
else()
|
||
|
set(ROM_LIB ${ORI_LIB_DIR}/lib${COMPONENT_NAME}.a)
|
||
|
endif()
|
||
|
set(DEPEND_TARGET ${COMPONENT_NAME})
|
||
|
endif()
|
||
|
|
||
|
add_custom_target(GEN_ROM_CB_${COMPONENT_NAME} ALL
|
||
|
WORKING_DIRECTORY ${OBJ_TEMP_DIR}
|
||
|
COMMAND echo "${ROM_LIB}"
|
||
|
COMMAND ${CP} ${ROM_LIB} ${OBJ_TEMP_DIR}
|
||
|
COMMAND ${CMAKE_AR} -x lib${COMPONENT_NAME}.a
|
||
|
DEPENDS ${DEPEND_TARGET}
|
||
|
)
|
||
|
endmacro()
|
||
|
|
||
|
function(build_rom_callback)
|
||
|
execute_process(
|
||
|
COMMAND ${MKDIR} ${OBJ_TEMP_DIR}
|
||
|
)
|
||
|
add_custom_target(BUILD_ROM_CALLBACK ALL
|
||
|
COMMAND ${CMAKE_LINKER} -r ${OBJ_TEMP_DIR}/*.o* -o ${OBJ_TEMP_DIR}/rom_bin.o
|
||
|
COMMAND ${CMAKE_NM} -u ${OBJ_TEMP_DIR}/rom_bin.o > rom_bin_raw.undef
|
||
|
COMMAND ${CMAKE_READELF} -W -r ${OBJ_TEMP_DIR}/rom_bin.o > rom_bin.rel
|
||
|
COMMAND ${CMAKE_READELF} -W -s ${OBJ_TEMP_DIR}/rom_bin.o > rom_symbol.list
|
||
|
COMMAND ${CMAKE_READELF} -W -s ${TARGET_NAME}.elf > image_symbol.list
|
||
|
DEPENDS ${TARGET_NAME}
|
||
|
)
|
||
|
|
||
|
endfunction(build_rom_callback)
|