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


The following commit(s) were added to refs/heads/master by this push:
     new 7b4f554f39 cmake: strip file full path to save the code size
7b4f554f39 is described below

commit 7b4f554f393ba251f2f189d383b68793ca1d2563
Author: chao an <[email protected]>
AuthorDate: Thu Jul 11 16:50:31 2024 +0800

    cmake: strip file full path to save the code size
    
    Cmake build provide absolute paths to compile files. If __FILE__
    macros are used in the source code(ASSERT), the binary will be occupied
    by many invalid paths.
    This saves some memory, stops leaking user locations in binaries, makes
    failure logs more deterministic and most importantly makes builds more
    deterministic.
    Debuggers usually have a path mapping feature to ensure the files are
    still found.
    
    Test config sabre-6quad/citest:
    
    Before:
    $ size build/nuttx
       text    data     bss     dec     hex filename
     279309     908   13652  293869   47bed build/nuttx
    
    After:
    $ size build/nuttx
       text    data     bss     dec     hex filename
     269313     908   13652  283873   454e1 build/nuttx
    
    Signed-off-by: chao an <[email protected]>
---
 CMakeLists.txt | 15 +++++++++++++++
 Kconfig        | 16 ++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b152fe01d2..d9a3832dbd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -173,6 +173,7 @@ if(NOT EXISTS "${NUTTX_APPS_DIR}")
   message(FATAL_ERROR "Application directory ${NUTTX_APPS_DIR} is not found")
 endif()
 
+get_filename_component(NUTTX_APPS_DIR ${NUTTX_APPS_DIR} ABSOLUTE)
 get_filename_component(apps_dir ${NUTTX_APPS_DIR} NAME)
 set(NUTTX_APPS_BINDIR "${CMAKE_BINARY_DIR}/${apps_dir}")
 
@@ -513,6 +514,20 @@ if(CONFIG_NDEBUG)
   add_compile_options(-DNDEBUG)
 endif()
 
+# Cmake build provide absolute paths to compile files. If __FILE__ macros are
+# used in the source code(ASSERT), the binary will contain many invalid paths.
+# This saves some memory, stops exposing build systems locations in binaries,
+# make failure logs more deterministic and most importantly makes builds more
+# failure logs more deterministic and most importantly makes builds more
+# deterministic. Debuggers usually have a path mapping feature to ensure the
+# files are still found.
+if(CONFIG_OUTPUT_STRIP_PATHS)
+  add_compile_options(-fmacro-prefix-map=${NUTTX_DIR}=)
+  add_compile_options(-fmacro-prefix-map=${NUTTX_APPS_DIR}=)
+  add_compile_options(-fmacro-prefix-map=${NUTTX_BOARD_ABS_DIR}=)
+  add_compile_options(-fmacro-prefix-map=${NUTTX_CHIP_ABS_DIR}=)
+endif()
+
 add_definitions(-D__NuttX__)
 
 set_property(
diff --git a/Kconfig b/Kconfig
index 0550e05c99..2f9a933011 100644
--- a/Kconfig
+++ b/Kconfig
@@ -447,6 +447,22 @@ config DFU_PID
        hex "PID to use for DFU image"
 
 endif # DFU_BINARY
+
+config OUTPUT_STRIP_PATHS
+       bool "Strip absolute paths from binaries"
+       default y
+       depends on ARCH_TOOLCHAIN_GNU
+       ---help---
+         Cmake build provide absolute paths to compile files. If __FILE__
+         macros are used in the source code(ASSERT), the binary will contain
+         many invalid paths.
+         This saves some memory, stops exposing build systems locations in 
binaries,
+         make failure logs more deterministic and most importantly makes 
builds more
+         failure logs more deterministic and most importantly makes builds more
+         deterministic.
+         Debuggers usually have a path mapping feature to ensure the files are
+         still found.
+
 endmenu # Binary Output Formats
 
 menu "Customize Header Files"

Reply via email to