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

lupyuen 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 c4f142e45c syslog: add an option to completely disable syslog logic
c4f142e45c is described below

commit c4f142e45c05983976ae4eadbde4135246e3b29f
Author: raiden00pl <raide...@railab.me>
AuthorDate: Sun Mar 23 08:44:16 2025 +0100

    syslog: add an option to completely disable syslog logic
    
    Add an option to completely disable syslog() and replace it with an empty 
functions.
    This option can be useful for small systems when we don't have any logging 
support,
    but compiler is not able to remove useless code.
    
    This way the final image also won't contain the strings that are present in
    syslog() calls when compiler optimization is enabled (for example from 
/boards
    where syslog is often used instead of debug macros).
    
    Signed-off-by: raiden00pl <raide...@railab.me>
---
 drivers/syslog/CMakeLists.txt      |  2 +-
 drivers/syslog/Kconfig             | 10 +++++++
 libs/libc/syslog/CMakeLists.txt    |  4 +++
 libs/libc/syslog/Make.defs         |  4 +++
 libs/libc/syslog/lib_syslog_none.c | 59 ++++++++++++++++++++++++++++++++++++++
 5 files changed, 78 insertions(+), 1 deletion(-)

diff --git a/drivers/syslog/CMakeLists.txt b/drivers/syslog/CMakeLists.txt
index b8e8804d33..74da0e05f2 100644
--- a/drivers/syslog/CMakeLists.txt
+++ b/drivers/syslog/CMakeLists.txt
@@ -32,7 +32,7 @@ if(CONFIG_SYSLOG_INTBUFFER)
   list(APPEND SRCS syslog_intbuffer.c)
 endif()
 
-if(NOT CONFIG_ARCH_SYSLOG)
+if(CONFIG_SYSLOG)
   list(APPEND SRCS syslog_initialize.c)
 endif()
 
diff --git a/drivers/syslog/Kconfig b/drivers/syslog/Kconfig
index 0c51edfab5..85748d103c 100644
--- a/drivers/syslog/Kconfig
+++ b/drivers/syslog/Kconfig
@@ -27,6 +27,16 @@ config SYSLOG_TO_SCHED_NOTE
        ---help---
                If this option is enabled, syslog will be redirected to 
sched_note,
                It uses the sched_note_printf macro to replace syslog
+
+config SYSLOG_NONE
+       bool "Disable system logging"
+       ---help---
+               System logging is disabled and all calls to syslog() are 
replaced with
+               an empty function. This option can be useful for small systems 
when we don't
+               have any logging support, so we can get rid of unused logic.
+               This way the final image also won't contain the strings that 
are present
+               in syslog().
+
 endchoice
 
 config SYSLOG_CHARDEV
diff --git a/libs/libc/syslog/CMakeLists.txt b/libs/libc/syslog/CMakeLists.txt
index 8837e59661..c450efa833 100644
--- a/libs/libc/syslog/CMakeLists.txt
+++ b/libs/libc/syslog/CMakeLists.txt
@@ -23,3 +23,7 @@
 if(CONFIG_SYSLOG)
   target_sources(c PRIVATE lib_setlogmask.c lib_syslog.c)
 endif()
+
+if(CONFIG_SYSLOG_NONE)
+  target_sources(c PRIVATE lib_syslog_none.c)
+endif()
diff --git a/libs/libc/syslog/Make.defs b/libs/libc/syslog/Make.defs
index ffddf47976..e03a4be0da 100644
--- a/libs/libc/syslog/Make.defs
+++ b/libs/libc/syslog/Make.defs
@@ -26,6 +26,10 @@ ifeq ($(CONFIG_SYSLOG),y)
 CSRCS += lib_syslog.c lib_setlogmask.c
 endif
 
+ifeq ($(CONFIG_SYSLOG_NONE),y)
+CSRCS += lib_syslog_none.c
+endif
+
 # Add the syslog directory to the build
 
 DEPPATH += --dep-path syslog
diff --git a/libs/libc/syslog/lib_syslog_none.c 
b/libs/libc/syslog/lib_syslog_none.c
new file mode 100644
index 0000000000..14765f16ab
--- /dev/null
+++ b/libs/libc/syslog/lib_syslog_none.c
@@ -0,0 +1,59 @@
+/****************************************************************************
+ * libs/libc/syslog/lib_syslog_none.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <syslog.h>
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: syslog/vsyslog
+ *
+ * Description:
+ *   These are empty syslog function used when CONFIG_SYSLOG_NONE option
+ *   is selected. This way we can completely remove the syslog logic and its
+ *   associated strings from the image.
+ *
+ * Returned Value:
+ *   None.
+ *
+ ****************************************************************************/
+
+void syslog(int priority, FAR const IPTR char *fmt, ...)
+{
+  UNUSED(priority);
+  UNUSED(fmt);
+}
+
+void vsyslog(int priority, FAR const IPTR char *fmt, va_list ap)
+{
+  UNUSED(priority);
+  UNUSED(fmt);
+  UNUSED(ap);
+}

Reply via email to