This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 447a73003c46895ca7e38aeded10bc1d5c8c1df0 Author: wangmingrong1 <[email protected]> AuthorDate: Mon Sep 23 16:16:39 2024 +0800 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 <[email protected]> --- cmake/nuttx_allsyms.cmake | 94 ++++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 50 deletions(-) diff --git a/cmake/nuttx_allsyms.cmake b/cmake/nuttx_allsyms.cmake index dbc8511824..d87d5a64ea 100644 --- a/cmake/nuttx_allsyms.cmake +++ b/cmake/nuttx_allsyms.cmake @@ -38,61 +38,55 @@ # 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 - COMMAND ${NUTTX_DIR}/tools/mkallsyms.py ${CMAKE_BINARY_DIR}/${dep_target} - ${allsyms_file}.c - DEPENDS ${dep_target} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMAND_EXPAND_LISTS) + # generate `g_allsyms` file + add_custom_command( + OUTPUT ${allsyms_file}.c POST_BUILD + COMMAND ${NUTTX_DIR}/tools/mkallsyms.py ${CMAKE_BINARY_DIR}/${dep_target} + ${allsyms_file}.c + DEPENDS ${dep_target} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMAND_EXPAND_LISTS) - # relink target with allsysm.c which generated by the elf of the previous - # phase - add_executable( - ${inter_target} ${allsyms_file}.c - $<FILTER:$<TARGET_OBJECTS:nuttx>,EXCLUDE,allsyms_empty>) + # relink target with allsysm.c which generated by the elf of the previous + # phase + add_executable( + ${inter_target} ${allsyms_file}.c + $<FILTER:$<TARGET_OBJECTS:nuttx>,EXCLUDE,allsyms_empty>) - # relink target and nuttx have exactly the same configuration - target_include_directories( - ${inter_target} SYSTEM PUBLIC ${CMAKE_SOURCE_DIR}/include - ${CMAKE_BINARY_DIR}/include) - target_compile_definitions( - ${inter_target} PRIVATE $<TARGET_PROPERTY:nuttx,NUTTX_KERNEL_DEFINITIONS>) - target_compile_options( - ${inter_target} - PRIVATE $<TARGET_PROPERTY:nuttx,NUTTX_KERNEL_COMPILE_OPTIONS>) - target_link_options(${inter_target} PRIVATE - $<TARGET_PROPERTY:nuttx,LINK_OPTIONS>) - target_link_libraries( - ${inter_target} - PRIVATE $<TARGET_GENEX_EVAL:nuttx,$<TARGET_PROPERTY:nuttx,LINK_LIBRARIES>> - ) - endif() + # relink target and nuttx have exactly the same configuration + target_include_directories( + ${inter_target} SYSTEM PUBLIC ${CMAKE_SOURCE_DIR}/include + ${CMAKE_BINARY_DIR}/include) + target_compile_definitions( + ${inter_target} PRIVATE $<TARGET_PROPERTY:nuttx,NUTTX_KERNEL_DEFINITIONS>) + target_compile_options( + ${inter_target} + PRIVATE $<TARGET_PROPERTY:nuttx,NUTTX_KERNEL_COMPILE_OPTIONS>) + target_link_options(${inter_target} PRIVATE + $<TARGET_PROPERTY:nuttx,LINK_OPTIONS>) + target_link_libraries( + ${inter_target} + 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
