This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 1eec5a12da812439393da7baa3f6ccac8cfba401
Author: jingfei <[email protected]>
AuthorDate: Tue Oct 13 18:09:18 2026 +0800

    libc: build lib_cxx_initialize only for C++ init
    
    Without CONFIG_HAVE_CXXINITIALIZE the body of lib_cxx_initialize()
    compiles away, but the empty function and its call from
    nxtask_startup() remain. Build the file only when C++ static
    initialization is supported and make the call a no-op otherwise.
    
    stm32f103-minimum:nsh: text -16 bytes.
    
    Signed-off-by: jingfei <[email protected]>
---
 libs/libc/libc.h                    | 4 ++++
 libs/libc/misc/CMakeLists.txt       | 5 ++++-
 libs/libc/misc/Make.defs            | 6 +++++-
 libs/libc/misc/lib_cxx_initialize.c | 3 +--
 4 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/libs/libc/libc.h b/libs/libc/libc.h
index 02c8d5928a2..65691ed3801 100644
--- a/libs/libc/libc.h
+++ b/libs/libc/libc.h
@@ -334,7 +334,11 @@ int lib_restoredir(void);
 
 /* Defined in lib_cxx_initialize.c */
 
+#ifdef CONFIG_HAVE_CXXINITIALIZE
 void lib_cxx_initialize(void);
+#else
+#  define lib_cxx_initialize()
+#endif
 
 #undef EXTERN
 #if defined(__cplusplus)
diff --git a/libs/libc/misc/CMakeLists.txt b/libs/libc/misc/CMakeLists.txt
index 774710ad3f5..c226fd40e8c 100644
--- a/libs/libc/misc/CMakeLists.txt
+++ b/libs/libc/misc/CMakeLists.txt
@@ -36,7 +36,6 @@ list(
   lib_xorshift128.c
   lib_tea_encrypt.c
   lib_tea_decrypt.c
-  lib_cxx_initialize.c
   lib_idr.c
   lib_impure.c
   lib_memfd.c
@@ -51,6 +50,10 @@ list(
   lib_getnprocs.c
   lib_mntent.c)
 
+if(CONFIG_HAVE_CXXINITIALIZE)
+  list(APPEND SRCS lib_cxx_initialize.c)
+endif()
+
 if(CONFIG_LIBC_TEMPBUFFER)
   list(APPEND SRCS lib_tempbuffer.c)
 endif()
diff --git a/libs/libc/misc/Make.defs b/libs/libc/misc/Make.defs
index c5fa595206e..1a1e1f606a6 100644
--- a/libs/libc/misc/Make.defs
+++ b/libs/libc/misc/Make.defs
@@ -24,11 +24,15 @@
 
 CSRCS += lib_bitmap.c lib_circbuf.c lib_creat.c lib_mknod.c lib_umask.c
 CSRCS += lib_utsname.c lib_getrandom.c lib_xorshift128.c lib_tea_encrypt.c
-CSRCS += lib_tea_decrypt.c lib_cxx_initialize.c lib_impure.c lib_memfd.c
+CSRCS += lib_tea_decrypt.c lib_impure.c lib_memfd.c
 CSRCS += lib_mutex.c lib_fchmodat.c lib_fstatat.c lib_getfullpath.c
 CSRCS += lib_openat.c lib_mkdirat.c lib_utimensat.c lib_mallopt.c
 CSRCS += lib_idr.c lib_getnprocs.c lib_mntent.c
 
+ifeq ($(CONFIG_HAVE_CXXINITIALIZE),y)
+CSRCS += lib_cxx_initialize.c
+endif
+
 ifeq ($(CONFIG_LIBC_TEMPBUFFER),y)
 CSRCS += lib_tempbuffer.c
 endif
diff --git a/libs/libc/misc/lib_cxx_initialize.c 
b/libs/libc/misc/lib_cxx_initialize.c
index 1f75d5ba8d4..cfb6daa1371 100644
--- a/libs/libc/misc/lib_cxx_initialize.c
+++ b/libs/libc/misc/lib_cxx_initialize.c
@@ -60,7 +60,6 @@
 
 void lib_cxx_initialize(void)
 {
-#ifdef CONFIG_HAVE_CXXINITIALIZE
   static int inited = 0;
 
   if (inited == 0)
@@ -74,6 +73,7 @@ void lib_cxx_initialize(void)
       for (initp = _sinit; initp < _einit; initp++)
         {
           initializer_t initializer = *initp;
+
           sinfo("initp: %p initializer: %p\n", initp, initializer);
 
           /* Make sure that the address is non-NULL. Some toolchains may put
@@ -89,5 +89,4 @@ void lib_cxx_initialize(void)
 
       inited = 1;
     }
-#endif
 }

Reply via email to