• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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