cmake/allsyms: Generate empty files using scripts instead of implementing them within cmake files

The function of generating an empty symbol table has been implemented in tools/mkallsyms.py. Makefile is implemented in python script. Cmake needs to be consistent with Makefile.

Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>
This commit is contained in:
wangmingrong1
2024-09-23 16:16:39 +08:00
committed by Xiang Xiao
parent 651a5e6afa
commit 447a73003c

View File

@@ -38,26 +38,24 @@
# dep_target : targets which depends on
# allsyms_file : generated allsyms file name
# ~~~
# create an empty allsyms source file for `nuttx`
set(ALLSYMS_SOURCE ${CMAKE_BINARY_DIR}/allsyms_empty.c)
add_custom_command(
OUTPUT ${ALLSYMS_SOURCE}
COMMAND ${NUTTX_DIR}/tools/mkallsyms.py nuttx.empty ${ALLSYMS_SOURCE}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Generating allsyms_empty.c")
add_custom_target(generate_empty_allsyms DEPENDS ${ALLSYMS_SOURCE})
add_dependencies(nuttx generate_empty_allsyms)
target_sources(nuttx PRIVATE ${ALLSYMS_SOURCE})
set(ALLSYMS_INCDIR ${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/include)
set_source_files_properties(${ALLSYMS_SOURCE} PROPERTIES INCLUDE_DIRECTORIES
"${ALLSYMS_INCDIR}")
macro(define_allsyms_link_target inter_target dep_target allsyms_file)
if(${inter_target} STREQUAL nuttx)
# create an empty allsyms source file for `nuttx`
set(ALLSYMS_SOURCE ${CMAKE_BINARY_DIR}/allsyms_empty.c)
if(NOT EXISTS ${ALLSYMS_SOURCE})
file(WRITE ${ALLSYMS_SOURCE} "#include <nuttx/compiler.h>\n\n")
file(APPEND ${ALLSYMS_SOURCE} "#include <nuttx/symtab.h>\n")
file(APPEND ${ALLSYMS_SOURCE} "extern int g_nallsyms;\n\n")
file(APPEND ${ALLSYMS_SOURCE} "extern struct symtab_s g_allsyms[];\n\n")
file(APPEND ${ALLSYMS_SOURCE} "int g_nallsyms = 1;\n\n")
file(
APPEND ${ALLSYMS_SOURCE}
"struct symtab_s g_allsyms[1] = {{ \"Unknown\", (FAR void *)0x00000000 }};\n\n"
)
endif()
target_sources(nuttx PRIVATE ${ALLSYMS_SOURCE})
set(ALLSYMS_INCDIR ${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/include)
set_source_files_properties(
${ALLSYMS_SOURCE} PROPERTIES INCLUDE_DIRECTORIES "${ALLSYMS_INCDIR}")
else()
# generate `g_allsyms` file
add_custom_command(
OUTPUT ${allsyms_file}.c POST_BUILD
@@ -86,13 +84,9 @@ macro(define_allsyms_link_target inter_target dep_target allsyms_file)
$<TARGET_PROPERTY:nuttx,LINK_OPTIONS>)
target_link_libraries(
${inter_target}
PRIVATE $<TARGET_GENEX_EVAL:nuttx,$<TARGET_PROPERTY:nuttx,LINK_LIBRARIES>>
)
endif()
PRIVATE $<TARGET_GENEX_EVAL:nuttx,$<TARGET_PROPERTY:nuttx,LINK_LIBRARIES>>)
endmacro()
# nuttx link with allsysm
define_allsyms_link_target(nuttx NULL NULL)
# allsyms link phase 1 with generated allsyms source file
define_allsyms_link_target(allsyms_inter nuttx allsyms_first_link)
# allsyms link phase 2 since the table offset may changed