You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2026/10/15 11:38:33 UTC
(nuttx) 03/06: libc: build lib_cxx_initialize only for C++ init
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 <ji...@xiaomi.com>
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 <ji...@xiaomi.com>
---
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
}