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

Reply via email to