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 58e97e521c9ef38851dccab84c6313c04aaa95d8
Author: Tiago Medicci Serrano <tiago.medi...@espressif.com>
AuthorDate: Fri Apr 28 13:55:23 2023 -0300

    libc/string: prevent libc in the kernel/userspace optionally
    
    Add the `LIBC_PREVENT_STRING_KERNEL` and `LIBC_PREVENT_STRING_USER`
    that are meant to be selected by the chip if no libc implementation
    is going to be built. If selected, neither NuttX's software version
    of the libc nor any architecture-specific implementation will be
    built in the kernel or in the userspace, respectively. In this
    case, the linker may provide a ROM-defined version of the libc
    functions instead.
---
 libs/libc/Makefile                               |  1 +
 libs/libc/libc.h                                 | 30 ++++++++++----
 libs/libc/machine/Kconfig                        | 24 +++++++++++
 libs/libc/machine/arm/armv7-a/gnu/arch_memchr.S  |  6 +++
 libs/libc/machine/arm/armv7-a/gnu/arch_memcpy.S  |  6 +++
 libs/libc/machine/arm/armv7-a/gnu/arch_memmove.S |  6 +++
 libs/libc/machine/arm/armv7-a/gnu/arch_memset.S  |  6 +++
 libs/libc/machine/arm/armv7-a/gnu/arch_strcmp.S  |  6 +++
 libs/libc/machine/arm/armv7-a/gnu/arch_strlen.S  |  6 +++
 libs/libc/machine/arm/armv7-m/gnu/arch_memchr.S  |  6 +++
 libs/libc/machine/arm/armv7-m/gnu/arch_memcpy.S  |  6 +++
 libs/libc/machine/arm/armv7-m/gnu/arch_memmove.S |  6 +++
 libs/libc/machine/arm/armv7-m/gnu/arch_memset.S  |  6 +++
 libs/libc/machine/arm/armv7-m/gnu/arch_strcmp.S  |  6 +++
 libs/libc/machine/arm/armv7-m/gnu/arch_strcpy.S  |  5 +++
 libs/libc/machine/arm/armv7-m/gnu/arch_strlen.S  |  6 +++
 libs/libc/machine/arm/armv7-r/gnu/arch_memchr.S  |  6 +++
 libs/libc/machine/arm/armv7-r/gnu/arch_memcpy.S  |  6 +++
 libs/libc/machine/arm/armv7-r/gnu/arch_memmove.S |  6 +++
 libs/libc/machine/arm/armv7-r/gnu/arch_memset.S  |  6 +++
 libs/libc/machine/arm/armv7-r/gnu/arch_strcmp.S  |  6 +++
 libs/libc/machine/arm/armv7-r/gnu/arch_strlen.S  |  6 +++
 libs/libc/machine/arm/armv8-m/gnu/arch_memchr.S  |  6 +++
 libs/libc/machine/arm/armv8-m/gnu/arch_memcpy.S  |  6 +++
 libs/libc/machine/arm/armv8-m/gnu/arch_memmove.S |  6 +++
 libs/libc/machine/arm/armv8-m/gnu/arch_memset.S  |  6 +++
 libs/libc/machine/arm/armv8-m/gnu/arch_strcmp.S  |  6 +++
 libs/libc/machine/arm/armv8-m/gnu/arch_strlen.S  |  6 +++
 libs/libc/machine/arm64/gnu/arch_memchr.S        |  6 +++
 libs/libc/machine/arm64/gnu/arch_memcmp.S        |  6 +++
 libs/libc/machine/arm64/gnu/arch_memcpy.S        |  6 +++
 libs/libc/machine/arm64/gnu/arch_memmove.S       |  6 +++
 libs/libc/machine/arm64/gnu/arch_memset.S        |  6 +++
 libs/libc/machine/arm64/gnu/arch_strchr.S        |  6 +++
 libs/libc/machine/arm64/gnu/arch_strchrnul.S     |  6 +++
 libs/libc/machine/arm64/gnu/arch_strcmp.S        |  6 +++
 libs/libc/machine/arm64/gnu/arch_strcpy.S        |  6 +++
 libs/libc/machine/arm64/gnu/arch_strlen.S        |  6 +++
 libs/libc/machine/arm64/gnu/arch_strncmp.S       |  6 +++
 libs/libc/machine/arm64/gnu/arch_strnlen.S       |  6 +++
 libs/libc/machine/arm64/gnu/arch_strrchr.S       |  6 +++
 libs/libc/machine/risc-v/gnu/arch_memcpy.S       | 10 +++++
 libs/libc/machine/risc-v/gnu/arch_memset.S       |  6 +++
 libs/libc/machine/risc-v/gnu/arch_strcmp.S       |  6 +++
 libs/libc/machine/xtensa/arch_memcpy.S           |  6 +++
 libs/libc/machine/xtensa/arch_memmove.S          |  6 +++
 libs/libc/machine/xtensa/arch_memset.S           |  6 +++
 libs/libc/machine/xtensa/arch_strcmp.S           |  5 +++
 libs/libc/machine/xtensa/arch_strcpy.S           |  6 +++
 libs/libc/machine/xtensa/arch_strlen.S           |  6 +++
 libs/libc/machine/xtensa/arch_strncpy.S          |  6 +++
 libs/libc/string/Make.defs                       | 52 ++----------------------
 libs/libc/string/lib_memchr.c                    |  4 ++
 libs/libc/string/lib_memcmp.c                    |  4 +-
 libs/libc/string/lib_memcpy.c                    |  4 +-
 libs/libc/string/lib_memmove.c                   |  4 +-
 libs/libc/string/lib_memset.c                    |  4 +-
 libs/libc/string/lib_strcasecmp.c                |  4 +-
 libs/libc/string/lib_strcat.c                    |  4 +-
 libs/libc/string/lib_strchr.c                    |  4 +-
 libs/libc/string/lib_strchrnul.c                 |  4 +-
 libs/libc/string/lib_strcmp.c                    |  4 +-
 libs/libc/string/lib_strcpy.c                    |  4 +-
 libs/libc/string/lib_strlcat.c                   |  4 +-
 libs/libc/string/lib_strlcpy.c                   |  4 +-
 libs/libc/string/lib_strlen.c                    |  4 +-
 libs/libc/string/lib_strncasecmp.c               |  4 +-
 libs/libc/string/lib_strncat.c                   |  4 +-
 libs/libc/string/lib_strncmp.c                   |  4 +-
 libs/libc/string/lib_strncpy.c                   |  4 +-
 libs/libc/string/lib_strnlen.c                   |  4 +-
 libs/libc/string/lib_strrchr.c                   |  4 +-
 libs/libc/string/lib_vikmemcpy.c                 |  6 +++
 73 files changed, 406 insertions(+), 77 deletions(-)

diff --git a/libs/libc/Makefile b/libs/libc/Makefile
index a133cd4bf6..40e87f58fb 100644
--- a/libs/libc/Makefile
+++ b/libs/libc/Makefile
@@ -82,6 +82,7 @@ else
 endif
 
 CFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)libs$(DELIM)libc
+AFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)libs$(DELIM)libc
 
 # Rule for the symbol table generation
 
diff --git a/libs/libc/libc.h b/libs/libc/libc.h
index 897e1f7df3..cb869043ee 100644
--- a/libs/libc/libc.h
+++ b/libs/libc/libc.h
@@ -27,15 +27,17 @@
 
 #include <nuttx/config.h>
 
-#include <sys/types.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <semaphore.h>
-
-#include <nuttx/lib/lib.h>
-#include <nuttx/streams.h>
+#ifndef __ASSEMBLY__
+#  include <sys/types.h>
+#  include <stdbool.h>
+#  include <stdio.h>
+#  include <stdlib.h>
+#  include <limits.h>
+#  include <semaphore.h>
+
+#  include <nuttx/lib/lib.h>
+#  include <nuttx/streams.h>
+#endif
 
 /****************************************************************************
  * Pre-processor Definitions
@@ -53,6 +55,12 @@
 
 #define LIB_BUFLEN_UNKNOWN INT_MAX
 
+#if defined(CONFIG_BUILD_FLAT) || \
+    ((!defined(CONFIG_LIBC_PREVENT_STRING_USER) && !defined(__KERNEL__))  || \
+     (!defined(CONFIG_LIBC_PREVENT_STRING_KERNEL) && defined(__KERNEL__)))
+#  define LIBC_BUILD_STRING
+#endif
+
 /****************************************************************************
  * Public Types
  ****************************************************************************/
@@ -61,6 +69,8 @@
  * Public Data
  ****************************************************************************/
 
+#ifndef __ASSEMBLY__
+
 #undef EXTERN
 #if defined(__cplusplus)
 #define EXTERN extern "C"
@@ -157,4 +167,6 @@ void lib_cxx_initialize(void);
 }
 #endif
 
+#endif /* __ASSEMBLY__ */
+
 #endif /* __LIBS_LIBC_LIBC_H */
diff --git a/libs/libc/machine/Kconfig b/libs/libc/machine/Kconfig
index 8628534ff7..cb32809a18 100644
--- a/libs/libc/machine/Kconfig
+++ b/libs/libc/machine/Kconfig
@@ -137,6 +137,30 @@ config LIBC_ARCH_ELF_64BIT
        default n
        depends on LIBC_ARCH_ELF
 
+config LIBC_PREVENT_STRING_KERNEL
+       bool
+       default n
+       ---help---
+               Prevent any implementation of the libc from being built and 
linked
+               in the kernel, including NuttX's software-defined version of 
the libc
+               or any other architecture-specific version of it. The 
ROM-defined
+               version should be linked instead. This option is particularly 
useful
+               when it's required that the ROM-defined libc to be used by the 
kernel
+               (for accessing some driver resource, for instance) but the 
userspace
+               is forbidden to use the same ROM-defined versions. In this case,
+               NuttX's software-defined version of the libc or arch-specific
+               assembly version is built instead.
+
+config LIBC_PREVENT_STRING_USER
+       bool
+       default n
+       ---help---
+               Prevent any implementation of the libc from being built and 
linked
+               in the userspace, including NuttX's software-defined version of 
the
+               libc or any other architecture-specific version of it. A 
ROM-defined
+               version of the libc may be linked to the userspace by the 
linker.
+
+
 # One or more the of above may be selected by architecture specific logic
 
 if ARCH_ARM
diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_memchr.S 
b/libs/libc/machine/arm/armv7-a/gnu/arch_memchr.S
index 338cb26f73..9d2d39e68a 100644
--- a/libs/libc/machine/arm/armv7-a/gnu/arch_memchr.S
+++ b/libs/libc/machine/arm/armv7-a/gnu/arch_memchr.S
@@ -66,6 +66,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 @ 2011-02-07 david.gilb...@linaro.org
 @    Extracted from local git a5b438d861
 @ 2011-07-14 david.gilb...@linaro.org
@@ -389,3 +393,5 @@ memchr:
 #else
   /* Defined in memchr-stub.c.  */
 #endif
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_memcpy.S 
b/libs/libc/machine/arm/armv7-a/gnu/arch_memcpy.S
index a7ebdebe0a..22a7a3556f 100644
--- a/libs/libc/machine/arm/armv7-a/gnu/arch_memcpy.S
+++ b/libs/libc/machine/arm/armv7-a/gnu/arch_memcpy.S
@@ -33,6 +33,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /*
  * This memcpy routine is optimised for Cortex-A15 cores and takes advantage
  * of VFP or NEON when built with the appropriate flags.
@@ -624,3 +628,5 @@ def_fn memcpy p2align=6
        bx      lr
 
        .size   memcpy, . - memcpy
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_memmove.S 
b/libs/libc/machine/arm/armv7-a/gnu/arch_memmove.S
index 61196052fc..058ccd9b39 100644
--- a/libs/libc/machine/arm/armv7-a/gnu/arch_memmove.S
+++ b/libs/libc/machine/arm/armv7-a/gnu/arch_memmove.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
        .thumb
        .syntax unified
        .global memmove
@@ -64,3 +68,5 @@ memmove:
        pop     {r4}
        bx      lr
        .size memmove, . - memmove
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_memset.S 
b/libs/libc/machine/arm/armv7-a/gnu/arch_memset.S
index 50aece2d63..383c505fdc 100644
--- a/libs/libc/machine/arm/armv7-a/gnu/arch_memset.S
+++ b/libs/libc/machine/arm/armv7-a/gnu/arch_memset.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
        .arm
        .syntax unified
        .global memset
@@ -144,3 +148,5 @@ memset:
        strbcs      r1, [r3], #1
        bx          lr
        .size memset, . - memset
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_strcmp.S 
b/libs/libc/machine/arm/armv7-a/gnu/arch_strcmp.S
index d8d69192a6..b5b45d09e9 100644
--- a/libs/libc/machine/arm/armv7-a/gnu/arch_strcmp.S
+++ b/libs/libc/machine/arm/armv7-a/gnu/arch_strcmp.S
@@ -30,6 +30,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 #ifdef __ARMEB__
 #define SHFT2LSB lsl
 #define SHFT2LSBEQ lsleq
@@ -301,3 +305,5 @@ strcmp:
        ldr     r5, [sp], #4
        bx      lr
        .size strcmp, . - strcmp
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_strlen.S 
b/libs/libc/machine/arm/armv7-a/gnu/arch_strlen.S
index 676302ce8a..6ce9aaf866 100644
--- a/libs/libc/machine/arm/armv7-a/gnu/arch_strlen.S
+++ b/libs/libc/machine/arm/armv7-a/gnu/arch_strlen.S
@@ -62,6 +62,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 #include "acle-compat.h"
 
        .macro def_fn f p2align=0
@@ -182,3 +186,5 @@ def_fn      strlen p2align=6
        mov     const_0, #0
        b       .Lstart_realigned
        .size   strlen, . - strlen
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_memchr.S 
b/libs/libc/machine/arm/armv7-m/gnu/arch_memchr.S
index 261452e94e..986b0e1fb7 100644
--- a/libs/libc/machine/arm/armv7-m/gnu/arch_memchr.S
+++ b/libs/libc/machine/arm/armv7-m/gnu/arch_memchr.S
@@ -66,6 +66,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 @ 2011-02-07 david.gilb...@linaro.org
 @    Extracted from local git a5b438d861
 @ 2011-07-14 david.gilb...@linaro.org
@@ -427,3 +431,5 @@ memchr:
 #else
   /* Defined in memchr-stub.c.  */
 #endif
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_memcpy.S 
b/libs/libc/machine/arm/armv7-m/gnu/arch_memcpy.S
index 1ab78f3066..e9761aee0d 100644
--- a/libs/libc/machine/arm/armv7-m/gnu/arch_memcpy.S
+++ b/libs/libc/machine/arm/armv7-m/gnu/arch_memcpy.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* This memcpy routine is optimised for Cortex-M3/M4 cores with/without
    unaligned access.
 
@@ -345,3 +349,5 @@ memcpy:
        .cantunwind
        .fnend
        .size   memcpy, .-memcpy
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_memmove.S 
b/libs/libc/machine/arm/armv7-m/gnu/arch_memmove.S
index 0e51a2d2f3..67d10c9897 100644
--- a/libs/libc/machine/arm/armv7-m/gnu/arch_memmove.S
+++ b/libs/libc/machine/arm/armv7-m/gnu/arch_memmove.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 #include "arm_asm.h"
 
        .thumb
@@ -71,3 +75,5 @@ memmove:
        .cantunwind
        .fnend
        .size memmove, . - memmove
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_memset.S 
b/libs/libc/machine/arm/armv7-m/gnu/arch_memset.S
index 0f08db063f..f3fd46dfb1 100644
--- a/libs/libc/machine/arm/armv7-m/gnu/arch_memset.S
+++ b/libs/libc/machine/arm/armv7-m/gnu/arch_memset.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 #include "arm_asm.h"
 
        .thumb
@@ -114,3 +118,5 @@ memset:
        .cantunwind
        .fnend
        .size memset, . - memset
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_strcmp.S 
b/libs/libc/machine/arm/armv7-m/gnu/arch_strcmp.S
index 7ae553be94..742bf96512 100644
--- a/libs/libc/machine/arm/armv7-m/gnu/arch_strcmp.S
+++ b/libs/libc/machine/arm/armv7-m/gnu/arch_strcmp.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Very similar to the generic code, but uses Thumb2 as implemented
    in ARMv7-M.  */
 
@@ -419,3 +423,5 @@ def_fn strcmp
        .cantunwind
        .fnend
        .size strcmp, . - strcmp
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_strcpy.S 
b/libs/libc/machine/arm/armv7-m/gnu/arch_strcpy.S
index 873279e16a..c8345f80f2 100644
--- a/libs/libc/machine/arm/armv7-m/gnu/arch_strcpy.S
+++ b/libs/libc/machine/arm/armv7-m/gnu/arch_strcpy.S
@@ -18,6 +18,10 @@
  *
  ***************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* This strcpy borrowed some ideas from arch_strcmp.S(). */
 
 /* Parameters and result. */
@@ -306,3 +310,4 @@ offset_3:
     *dst++ = 0;
 #endif  /* Pseudo code end */
 
+#endif
diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_strlen.S 
b/libs/libc/machine/arm/armv7-m/gnu/arch_strlen.S
index d8cd7c7e1d..5c3e581c98 100644
--- a/libs/libc/machine/arm/armv7-m/gnu/arch_strlen.S
+++ b/libs/libc/machine/arm/armv7-m/gnu/arch_strlen.S
@@ -62,6 +62,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 #include "arm-acle-compat.h"
 #include "arm_asm.h"
 
@@ -193,3 +197,5 @@ def_fn      strlen p2align=6
        .cantunwind
        .fnend
        .size   strlen, . - strlen
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_memchr.S 
b/libs/libc/machine/arm/armv7-r/gnu/arch_memchr.S
index 6e1ed88763..e6813f578b 100644
--- a/libs/libc/machine/arm/armv7-r/gnu/arch_memchr.S
+++ b/libs/libc/machine/arm/armv7-r/gnu/arch_memchr.S
@@ -66,6 +66,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 @ 2011-02-07 david.gilb...@linaro.org
 @    Extracted from local git a5b438d861
 @ 2011-07-14 david.gilb...@linaro.org
@@ -389,3 +393,5 @@ memchr:
 #else
   /* Defined in memchr-stub.c.  */
 #endif
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_memcpy.S 
b/libs/libc/machine/arm/armv7-r/gnu/arch_memcpy.S
index a6a2d34094..61d8e94adf 100644
--- a/libs/libc/machine/arm/armv7-r/gnu/arch_memcpy.S
+++ b/libs/libc/machine/arm/armv7-r/gnu/arch_memcpy.S
@@ -33,6 +33,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /*
  * This memcpy routine is optimised for Cortex-A15 cores and takes advantage
  * of VFP or NEON when built with the appropriate flags.
@@ -624,3 +628,5 @@ def_fn memcpy p2align=6
        bx      lr
 
        .size   memcpy, . - memcpy
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_memmove.S 
b/libs/libc/machine/arm/armv7-r/gnu/arch_memmove.S
index 38b3eee5d4..73e3012776 100644
--- a/libs/libc/machine/arm/armv7-r/gnu/arch_memmove.S
+++ b/libs/libc/machine/arm/armv7-r/gnu/arch_memmove.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
        .thumb
        .syntax unified
        .global memmove
@@ -64,3 +68,5 @@ memmove:
        pop     {r4}
        bx      lr
        .size memmove, . - memmove
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_memset.S 
b/libs/libc/machine/arm/armv7-r/gnu/arch_memset.S
index 109514283b..a1c601a2ca 100644
--- a/libs/libc/machine/arm/armv7-r/gnu/arch_memset.S
+++ b/libs/libc/machine/arm/armv7-r/gnu/arch_memset.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
        .arm
        .syntax unified
        .global memset
@@ -144,3 +148,5 @@ memset:
        strbcs      r1, [r3], #1
        bx          lr
        .size memset, . - memset
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_strcmp.S 
b/libs/libc/machine/arm/armv7-r/gnu/arch_strcmp.S
index 5fcdcb3d34..b56e3a39e8 100644
--- a/libs/libc/machine/arm/armv7-r/gnu/arch_strcmp.S
+++ b/libs/libc/machine/arm/armv7-r/gnu/arch_strcmp.S
@@ -30,6 +30,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 #ifdef __ARMEB__
 #define SHFT2LSB lsl
 #define SHFT2LSBEQ lsleq
@@ -301,3 +305,5 @@ strcmp:
        ldr     r5, [sp], #4
        bx      lr
        .size strcmp, . - strcmp
+
+#endif
diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_strlen.S 
b/libs/libc/machine/arm/armv7-r/gnu/arch_strlen.S
index c5aa3bacb0..f6ed3266ed 100644
--- a/libs/libc/machine/arm/armv7-r/gnu/arch_strlen.S
+++ b/libs/libc/machine/arm/armv7-r/gnu/arch_strlen.S
@@ -62,6 +62,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 #include "acle-compat.h"
 
        .macro def_fn f p2align=0
@@ -182,3 +186,5 @@ def_fn      strlen p2align=6
        mov     const_0, #0
        b       .Lstart_realigned
        .size   strlen, . - strlen
+
+#endif
diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_memchr.S 
b/libs/libc/machine/arm/armv8-m/gnu/arch_memchr.S
index 57f7caef9c..de60106ebe 100644
--- a/libs/libc/machine/arm/armv8-m/gnu/arch_memchr.S
+++ b/libs/libc/machine/arm/armv8-m/gnu/arch_memchr.S
@@ -66,6 +66,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 @ 2011-02-07 david.gilb...@linaro.org
 @    Extracted from local git a5b438d861
 @ 2011-07-14 david.gilb...@linaro.org
@@ -427,3 +431,5 @@ memchr:
 #else
   /* Defined in memchr-stub.c.  */
 #endif
+
+#endif
diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_memcpy.S 
b/libs/libc/machine/arm/armv8-m/gnu/arch_memcpy.S
index 161072e212..2606ce111d 100644
--- a/libs/libc/machine/arm/armv8-m/gnu/arch_memcpy.S
+++ b/libs/libc/machine/arm/armv8-m/gnu/arch_memcpy.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* This memcpy routine is optimised for Cortex-M3/M4 cores with/without
    unaligned access.
 
@@ -367,3 +371,5 @@ memcpy:
        .cantunwind
        .fnend
        .size   memcpy, .-memcpy
+
+#endif
diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_memmove.S 
b/libs/libc/machine/arm/armv8-m/gnu/arch_memmove.S
index fecfca6d89..10ec4429c3 100644
--- a/libs/libc/machine/arm/armv8-m/gnu/arch_memmove.S
+++ b/libs/libc/machine/arm/armv8-m/gnu/arch_memmove.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 #include "arm_asm.h"
 
        .thumb
@@ -71,3 +75,5 @@ memmove:
        .cantunwind
        .fnend
        .size memmove, . - memmove
+
+#endif
diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_memset.S 
b/libs/libc/machine/arm/armv8-m/gnu/arch_memset.S
index 82c3659d8a..d63bb7ee40 100644
--- a/libs/libc/machine/arm/armv8-m/gnu/arch_memset.S
+++ b/libs/libc/machine/arm/armv8-m/gnu/arch_memset.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 #include "arm_asm.h"
 
        .thumb
@@ -129,3 +133,5 @@ memset:
        .cantunwind
        .fnend
        .size memset, . - memset
+
+#endif
diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_strcmp.S 
b/libs/libc/machine/arm/armv8-m/gnu/arch_strcmp.S
index 6b4d64bcf7..5e14800d69 100644
--- a/libs/libc/machine/arm/armv8-m/gnu/arch_strcmp.S
+++ b/libs/libc/machine/arm/armv8-m/gnu/arch_strcmp.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Very similar to the generic code, but uses Thumb2 as implemented
    in ARMv7-M.  */
 
@@ -419,3 +423,5 @@ def_fn strcmp
        .cantunwind
        .fnend
        .size strcmp, . - strcmp
+
+#endif
diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_strlen.S 
b/libs/libc/machine/arm/armv8-m/gnu/arch_strlen.S
index 524ff36176..0987c5dcee 100644
--- a/libs/libc/machine/arm/armv8-m/gnu/arch_strlen.S
+++ b/libs/libc/machine/arm/armv8-m/gnu/arch_strlen.S
@@ -62,6 +62,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 #include "arm-acle-compat.h"
 #include "arm_asm.h"
 
@@ -193,3 +197,5 @@ def_fn      strlen p2align=6
        .cantunwind
        .fnend
        .size   strlen, . - strlen
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_memchr.S 
b/libs/libc/machine/arm64/gnu/arch_memchr.S
index f999057413..9b21d68ce9 100644
--- a/libs/libc/machine/arm64/gnu/arch_memchr.S
+++ b/libs/libc/machine/arm64/gnu/arch_memchr.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64
@@ -171,3 +175,5 @@ def_fn memchr
        ret
 
        .size   memchr, . - memchr
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_memcmp.S 
b/libs/libc/machine/arm64/gnu/arch_memcmp.S
index 5e2c978c2b..6cf6533250 100644
--- a/libs/libc/machine/arm64/gnu/arch_memcmp.S
+++ b/libs/libc/machine/arm64/gnu/arch_memcmp.S
@@ -59,6 +59,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64, unaligned accesses.
@@ -194,3 +198,5 @@ L(byte_loop):
        ret
 
        .size   memcmp, . - memcmp
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_memcpy.S 
b/libs/libc/machine/arm64/gnu/arch_memcpy.S
index b8f9d53d1d..2582ca5046 100644
--- a/libs/libc/machine/arm64/gnu/arch_memcpy.S
+++ b/libs/libc/machine/arm64/gnu/arch_memcpy.S
@@ -59,6 +59,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64, unaligned accesses.
@@ -230,3 +234,5 @@ L(copy_long):
        ret
 
        .size   memcpy, . - memcpy
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_memmove.S 
b/libs/libc/machine/arm64/gnu/arch_memmove.S
index 71c0fef53b..3919382d42 100644
--- a/libs/libc/machine/arm64/gnu/arch_memmove.S
+++ b/libs/libc/machine/arm64/gnu/arch_memmove.S
@@ -59,6 +59,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64, unaligned accesses
@@ -155,3 +159,5 @@ def_fn memmove, 6
 3:     ret
 
        .size   memmove, . - memmove
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_memset.S 
b/libs/libc/machine/arm64/gnu/arch_memset.S
index a6b07ee975..de64b319a1 100644
--- a/libs/libc/machine/arm64/gnu/arch_memset.S
+++ b/libs/libc/machine/arm64/gnu/arch_memset.S
@@ -59,6 +59,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64, unaligned accesses
@@ -240,3 +244,5 @@ L(zva_other):
        b       L(tail64)
 
        .size   memset, . - memset
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_strchr.S 
b/libs/libc/machine/arm64/gnu/arch_strchr.S
index 5ff53d5e05..f7b4baf472 100644
--- a/libs/libc/machine/arm64/gnu/arch_strchr.S
+++ b/libs/libc/machine/arm64/gnu/arch_strchr.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64
@@ -159,3 +163,5 @@ def_fn strchr
        ret
 
        .size   strchr, . - strchr
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_strchrnul.S 
b/libs/libc/machine/arm64/gnu/arch_strchrnul.S
index 04186d7e23..335cfd53ce 100644
--- a/libs/libc/machine/arm64/gnu/arch_strchrnul.S
+++ b/libs/libc/machine/arm64/gnu/arch_strchrnul.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64
@@ -144,3 +148,5 @@ def_fn strchrnul
        ret
 
        .size   strchrnul, . - strchrnul
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_strcmp.S 
b/libs/libc/machine/arm64/gnu/arch_strcmp.S
index 6860c15976..225698a04e 100644
--- a/libs/libc/machine/arm64/gnu/arch_strcmp.S
+++ b/libs/libc/machine/arm64/gnu/arch_strcmp.S
@@ -33,6 +33,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64
@@ -203,3 +207,5 @@ L(done):
        sub     result, data1, data2
        ret
        .size   strcmp, .-strcmp
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_strcpy.S 
b/libs/libc/machine/arm64/gnu/arch_strcpy.S
index 286f12715b..3acdff3460 100644
--- a/libs/libc/machine/arm64/gnu/arch_strcpy.S
+++ b/libs/libc/machine/arm64/gnu/arch_strcpy.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64, unaligned accesses, min page size 4k.
@@ -336,3 +340,5 @@ def_fn STRCPY p2align=6
        b       .Lfp_gt8
 
        .size   STRCPY, . - STRCPY
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_strlen.S 
b/libs/libc/machine/arm64/gnu/arch_strlen.S
index bece19b93f..3795381c87 100644
--- a/libs/libc/machine/arm64/gnu/arch_strlen.S
+++ b/libs/libc/machine/arm64/gnu/arch_strlen.S
@@ -33,6 +33,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64, unaligned accesses, min page size 4k.
@@ -240,3 +244,5 @@ L(page_cross):
        b       L(page_cross_entry)
 
        .size   strlen, . - strlen
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_strncmp.S 
b/libs/libc/machine/arm64/gnu/arch_strncmp.S
index 5b5fe7ab2a..af7e6442d9 100644
--- a/libs/libc/machine/arm64/gnu/arch_strncmp.S
+++ b/libs/libc/machine/arm64/gnu/arch_strncmp.S
@@ -33,6 +33,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64
@@ -292,3 +296,5 @@ def_fn strncmp
        mov     result, #0
        ret
        .size strncmp, . - strncmp
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_strnlen.S 
b/libs/libc/machine/arm64/gnu/arch_strnlen.S
index 8623f033a6..a659f80598 100644
--- a/libs/libc/machine/arm64/gnu/arch_strnlen.S
+++ b/libs/libc/machine/arm64/gnu/arch_strnlen.S
@@ -33,6 +33,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64
@@ -186,3 +190,5 @@ def_fn strnlen
        csel    data2, data2, data2a, le
        b       .Lrealigned
        .size   strnlen, . - .Lstart    /* Include pre-padding in size.  */
+
+#endif
diff --git a/libs/libc/machine/arm64/gnu/arch_strrchr.S 
b/libs/libc/machine/arm64/gnu/arch_strrchr.S
index 25daa316b7..212f20acc6 100644
--- a/libs/libc/machine/arm64/gnu/arch_strrchr.S
+++ b/libs/libc/machine/arm64/gnu/arch_strrchr.S
@@ -29,6 +29,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /* Assumptions:
  *
  * ARMv8-a, AArch64
@@ -177,3 +181,5 @@ def_fn strrchr
        ret
 
        .size   strrchr, . - strrchr
+
+#endif
diff --git a/libs/libc/machine/risc-v/gnu/arch_memcpy.S 
b/libs/libc/machine/risc-v/gnu/arch_memcpy.S
index 74905ac313..12198d1741 100644
--- a/libs/libc/machine/risc-v/gnu/arch_memcpy.S
+++ b/libs/libc/machine/risc-v/gnu/arch_memcpy.S
@@ -18,6 +18,14 @@
  *
  ****************************************************************************/
 
+/************************************************************************************
+ * Included Files
+ 
************************************************************************************/
+
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 
/************************************************************************************
  * Public Symbols
  
************************************************************************************/
@@ -128,3 +136,5 @@ memcpy:
        bltu            a1, a3, 5b
 6:
        ret
+
+#endif
diff --git a/libs/libc/machine/risc-v/gnu/arch_memset.S 
b/libs/libc/machine/risc-v/gnu/arch_memset.S
index 08e797503f..c4130754ea 100644
--- a/libs/libc/machine/risc-v/gnu/arch_memset.S
+++ b/libs/libc/machine/risc-v/gnu/arch_memset.S
@@ -13,6 +13,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 .text
 .global memset
 .type  memset, @function
@@ -104,3 +108,5 @@ memset:
        bleu a2, t1, .Ltiny
        j .Laligned
        .size   memset, .-memset
+
+#endif
diff --git a/libs/libc/machine/risc-v/gnu/arch_strcmp.S 
b/libs/libc/machine/risc-v/gnu/arch_strcmp.S
index b82dcd0103..178c139749 100644
--- a/libs/libc/machine/risc-v/gnu/arch_strcmp.S
+++ b/libs/libc/machine/risc-v/gnu/arch_strcmp.S
@@ -13,6 +13,10 @@
  *
  ****************************************************************************/
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 #include "asm.h"
 
 .text
@@ -185,3 +189,5 @@ strcmp:
 mask:
 .dword 0x7f7f7f7f7f7f7f7f
 #endif
+
+#endif
diff --git a/libs/libc/machine/xtensa/arch_memcpy.S 
b/libs/libc/machine/xtensa/arch_memcpy.S
index b2e8eabf40..d73e3b127b 100644
--- a/libs/libc/machine/xtensa/arch_memcpy.S
+++ b/libs/libc/machine/xtensa/arch_memcpy.S
@@ -27,6 +27,10 @@
 #include <arch/chip/core-isa.h>
 #include <arch/xtensa/xtensa_abi.h>
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /****************************************************************************
  * Pre-processor Macros
  ****************************************************************************/
@@ -276,3 +280,5 @@ __memcpy_aux:
   .end schedule
 
   .size memcpy, . - memcpy
+
+#endif
diff --git a/libs/libc/machine/xtensa/arch_memmove.S 
b/libs/libc/machine/xtensa/arch_memmove.S
index f3a1d89b68..cbfb50c585 100644
--- a/libs/libc/machine/xtensa/arch_memmove.S
+++ b/libs/libc/machine/xtensa/arch_memmove.S
@@ -27,6 +27,10 @@
 #include <arch/chip/core-isa.h>
 #include <arch/xtensa/xtensa_abi.h>
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /****************************************************************************
  * Pre-processor Macros
  ****************************************************************************/
@@ -479,3 +483,5 @@ memmove:
 
   .end schedule
   .size memmove, . - memmove
+
+#endif
diff --git a/libs/libc/machine/xtensa/arch_memset.S 
b/libs/libc/machine/xtensa/arch_memset.S
index c01b7b4829..d1a0ab7ee7 100644
--- a/libs/libc/machine/xtensa/arch_memset.S
+++ b/libs/libc/machine/xtensa/arch_memset.S
@@ -27,6 +27,10 @@
 #include <arch/chip/core-isa.h>
 #include <arch/xtensa/xtensa_abi.h>
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -175,3 +179,5 @@ __memset_aux:
        .end schedule
 
        .size   memset, . - memset
+
+#endif
diff --git a/libs/libc/machine/xtensa/arch_strcmp.S 
b/libs/libc/machine/xtensa/arch_strcmp.S
index 0fd2d1b525..01ea8276cc 100644
--- a/libs/libc/machine/xtensa/arch_strcmp.S
+++ b/libs/libc/machine/xtensa/arch_strcmp.S
@@ -27,6 +27,10 @@
 #include <arch/chip/core-isa.h>
 #include <arch/xtensa/xtensa_abi.h>
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /****************************************************************************
  * Pre-processor Macros
  ****************************************************************************/
@@ -760,3 +764,4 @@ strcmp:
   .end  schedule
   .size strcmp, . - strcmp
 
+#endif
diff --git a/libs/libc/machine/xtensa/arch_strcpy.S 
b/libs/libc/machine/xtensa/arch_strcpy.S
index 64b51d3547..20b3076bf7 100644
--- a/libs/libc/machine/xtensa/arch_strcpy.S
+++ b/libs/libc/machine/xtensa/arch_strcpy.S
@@ -27,6 +27,10 @@
 #include <arch/chip/core-isa.h>
 #include <arch/xtensa/xtensa_abi.h>
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -240,3 +244,5 @@ strcpy:
   .end schedule
 
   .size strcpy, . - strcpy
+
+#endif
diff --git a/libs/libc/machine/xtensa/arch_strlen.S 
b/libs/libc/machine/xtensa/arch_strlen.S
index 2653689e7a..4e5e0765c7 100644
--- a/libs/libc/machine/xtensa/arch_strlen.S
+++ b/libs/libc/machine/xtensa/arch_strlen.S
@@ -27,6 +27,10 @@
 #include <arch/chip/core-isa.h>
 #include <arch/xtensa/xtensa_abi.h>
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -120,3 +124,5 @@ strlen:
   .end schedule
 
   .size strlen, . - strlen
+
+#endif
diff --git a/libs/libc/machine/xtensa/arch_strncpy.S 
b/libs/libc/machine/xtensa/arch_strncpy.S
index 93ca184027..24bca9aa06 100644
--- a/libs/libc/machine/xtensa/arch_strncpy.S
+++ b/libs/libc/machine/xtensa/arch_strncpy.S
@@ -27,6 +27,10 @@
 #include <arch/chip/core-isa.h>
 #include <arch/xtensa/xtensa_abi.h>
 
+#include "libc.h"
+
+#ifdef LIBC_BUILD_STRING
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -261,3 +265,5 @@ strncpy:
 .end schedule
 
   .size strncpy, . - strncpy
+
+#endif
diff --git a/libs/libc/string/Make.defs b/libs/libc/string/Make.defs
index 36876f41a4..54989a901c 100644
--- a/libs/libc/string/Make.defs
+++ b/libs/libc/string/Make.defs
@@ -32,61 +32,15 @@ CSRCS += lib_strsep.c lib_strerrorr.c lib_explicit_bzero.c 
lib_strsignal.c
 CSRCS += lib_index.c lib_rindex.c lib_timingsafe_bcmp.c lib_strverscmp.c
 CSRCS += lib_mempcpy.c lib_rawmemchr.c lib_bzero.c
 
-ifneq ($(CONFIG_LIBC_ARCH_MEMCHR),y)
-CSRCS += lib_memchr.c
-endif
-
-ifneq ($(CONFIG_LIBC_ARCH_MEMCMP),y)
-CSRCS += lib_memcmp.c
-endif
+CSRCS += lib_memchr.c lib_memcmp.c lib_memmove.c lib_memset.c
+CSRCS += lib_strchr.c lib_strcmp.c lib_strcpy.c lib_strlcat.c
+CSRCS += lib_strlcpy.c lib_strlen.c lib_strncpy.c lib_strnlen.c
 
-ifneq ($(CONFIG_LIBC_ARCH_MEMCPY),y)
 ifeq ($(CONFIG_MEMCPY_VIK),y)
 CSRCS += lib_vikmemcpy.c
 else
 CSRCS += lib_memcpy.c
 endif
-endif
-
-ifneq ($(CONFIG_LIBC_ARCH_MEMMOVE),y)
-CSRCS += lib_memmove.c
-endif
-
-ifneq ($(CONFIG_LIBC_ARCH_MEMSET),y)
-CSRCS += lib_memset.c
-endif
-
-ifneq ($(CONFIG_LIBC_ARCH_STRCHR),y)
-CSRCS += lib_strchr.c
-endif
-
-ifneq ($(CONFIG_LIBC_ARCH_STRCMP),y)
-CSRCS += lib_strcmp.c
-endif
-
-ifneq ($(CONFIG_LIBC_ARCH_STRCPY),y)
-CSRCS += lib_strcpy.c
-endif
-
-ifneq ($(CONFIG_LIBC_ARCH_STRLCAT),y)
-CSRCS += lib_strlcat.c
-endif
-
-ifneq ($(CONFIG_LIBC_ARCH_STRLCPY),y)
-CSRCS += lib_strlcpy.c
-endif
-
-ifneq ($(CONFIG_LIBC_ARCH_STRLEN),y)
-CSRCS += lib_strlen.c
-endif
-
-ifneq ($(CONFIG_LIBC_ARCH_STRNCPY),y)
-CSRCS += lib_strncpy.c
-endif
-
-ifneq ($(CONFIG_LIBC_ARCH_STRNLEN),y)
-CSRCS += lib_strnlen.c
-endif
 
 ifeq ($(CONFIG_LIBC_LOCALE),y)
 CSRCS += lib_strcoll.c lib_strxfrm.c
diff --git a/libs/libc/string/lib_memchr.c b/libs/libc/string/lib_memchr.c
index 1c58bb1bde..d4b2f87f01 100644
--- a/libs/libc/string/lib_memchr.c
+++ b/libs/libc/string/lib_memchr.c
@@ -26,6 +26,8 @@
 
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -44,6 +46,7 @@
  *
  ****************************************************************************/
 
+#if !defined(CONFIG_LIBC_ARCH_MEMCHR) && defined(LIBC_BUILD_STRING)
 #undef memchr /* See mm/README.txt */
 FAR void *memchr(FAR const void *s, int c, size_t n)
 {
@@ -61,3 +64,4 @@ FAR void *memchr(FAR const void *s, int c, size_t n)
 
   return NULL;
 }
+#endif
diff --git a/libs/libc/string/lib_memcmp.c b/libs/libc/string/lib_memcmp.c
index 9602c9a254..95b2614a6f 100644
--- a/libs/libc/string/lib_memcmp.c
+++ b/libs/libc/string/lib_memcmp.c
@@ -26,11 +26,13 @@
 #include <sys/types.h>
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_MEMCMP
+#if !defined(CONFIG_LIBC_ARCH_MEMCMP) && defined(LIBC_BUILD_STRING)
 #undef memcmp /* See mm/README.txt */
 no_builtin("memcmp")
 int memcmp(FAR const void *s1, FAR const void *s2, size_t n)
diff --git a/libs/libc/string/lib_memcpy.c b/libs/libc/string/lib_memcpy.c
index ba91d5abb1..d26e6054e3 100644
--- a/libs/libc/string/lib_memcpy.c
+++ b/libs/libc/string/lib_memcpy.c
@@ -26,6 +26,8 @@
 #include <sys/types.h>
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -34,7 +36,7 @@
  * Name: memcpy
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_MEMCPY
+#if !defined(CONFIG_LIBC_ARCH_MEMCPY) && defined(LIBC_BUILD_STRING)
 #undef memcpy /* See mm/README.txt */
 no_builtin("memcpy")
 FAR void *memcpy(FAR void *dest, FAR const void *src, size_t n)
diff --git a/libs/libc/string/lib_memmove.c b/libs/libc/string/lib_memmove.c
index afed8e0172..c2828dd468 100644
--- a/libs/libc/string/lib_memmove.c
+++ b/libs/libc/string/lib_memmove.c
@@ -26,11 +26,13 @@
 #include <sys/types.h>
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_MEMMOVE
+#if !defined(CONFIG_LIBC_ARCH_MEMMOVE) && defined(LIBC_BUILD_STRING)
 #undef memmove /* See mm/README.txt */
 no_builtin("memmove")
 FAR void *memmove(FAR void *dest, FAR const void *src, size_t count)
diff --git a/libs/libc/string/lib_memset.c b/libs/libc/string/lib_memset.c
index 4f20f15f9e..934b4c1f6d 100644
--- a/libs/libc/string/lib_memset.c
+++ b/libs/libc/string/lib_memset.c
@@ -30,6 +30,8 @@
 #include <string.h>
 #include <assert.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Pre-processor Definitions
  ****************************************************************************/
@@ -46,7 +48,7 @@
  * Public Functions
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_MEMSET
+#if !defined(CONFIG_LIBC_ARCH_MEMSET) && defined(LIBC_BUILD_STRING)
 #undef memset /* See mm/README.txt */
 no_builtin("memset")
 FAR void *memset(FAR void *s, int c, size_t n)
diff --git a/libs/libc/string/lib_strcasecmp.c 
b/libs/libc/string/lib_strcasecmp.c
index 1717682c03..7d7f5dd5c5 100644
--- a/libs/libc/string/lib_strcasecmp.c
+++ b/libs/libc/string/lib_strcasecmp.c
@@ -27,11 +27,13 @@
 #include <strings.h>
 #include <ctype.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRCASECMP
+#if !defined(CONFIG_LIBC_ARCH_STRCASECMP) && defined(LIBC_BUILD_STRING)
 #undef strcasecmp /* See mm/README.txt */
 int strcasecmp(FAR const char *cs, FAR const char *ct)
 {
diff --git a/libs/libc/string/lib_strcat.c b/libs/libc/string/lib_strcat.c
index e6c3495549..ae0e39baa5 100644
--- a/libs/libc/string/lib_strcat.c
+++ b/libs/libc/string/lib_strcat.c
@@ -26,11 +26,13 @@
 
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRCAT
+#if !defined(CONFIG_LIBC_ARCH_STRCAT) && defined(LIBC_BUILD_STRING)
 #undef strcat /* See mm/README.txt */
 FAR char *strcat(FAR char *dest, FAR const char *src)
 {
diff --git a/libs/libc/string/lib_strchr.c b/libs/libc/string/lib_strchr.c
index 1942042e30..3d611c1471 100644
--- a/libs/libc/string/lib_strchr.c
+++ b/libs/libc/string/lib_strchr.c
@@ -26,6 +26,8 @@
 
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -44,7 +46,7 @@
  *
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRCHR
+#if !defined(CONFIG_LIBC_ARCH_STRCHR) && defined(LIBC_BUILD_STRING)
 #undef strchr /* See mm/README.txt */
 FAR char *strchr(FAR const char *s, int c)
 {
diff --git a/libs/libc/string/lib_strchrnul.c b/libs/libc/string/lib_strchrnul.c
index abafb54fa9..e6ad6aa59c 100644
--- a/libs/libc/string/lib_strchrnul.c
+++ b/libs/libc/string/lib_strchrnul.c
@@ -26,6 +26,8 @@
 
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -44,7 +46,7 @@
  *
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRCHRNUL
+#if !defined(CONFIG_LIBC_ARCH_STRCHRNUL) && defined(LIBC_BUILD_STRING)
 FAR char *strchrnul(FAR const char *s, int c)
 {
   if (s)
diff --git a/libs/libc/string/lib_strcmp.c b/libs/libc/string/lib_strcmp.c
index 3067684698..aad048eaaa 100644
--- a/libs/libc/string/lib_strcmp.c
+++ b/libs/libc/string/lib_strcmp.c
@@ -26,11 +26,13 @@
 
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRCMP
+#if !defined(CONFIG_LIBC_ARCH_STRCMP) && defined(LIBC_BUILD_STRING)
 #undef strcmp /* See mm/README.txt */
 int strcmp(FAR const char *cs, FAR const char *ct)
 {
diff --git a/libs/libc/string/lib_strcpy.c b/libs/libc/string/lib_strcpy.c
index d66dc7e5a4..a602fab89f 100644
--- a/libs/libc/string/lib_strcpy.c
+++ b/libs/libc/string/lib_strcpy.c
@@ -26,6 +26,8 @@
 
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -42,7 +44,7 @@
  *
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRCPY
+#if !defined(CONFIG_LIBC_ARCH_STRCPY) && defined(LIBC_BUILD_STRING)
 #undef strcpy /* See mm/README.txt */
 FAR char *strcpy(FAR char *dest, FAR const char *src)
 {
diff --git a/libs/libc/string/lib_strlcat.c b/libs/libc/string/lib_strlcat.c
index bc68885444..29365cdd9a 100644
--- a/libs/libc/string/lib_strlcat.c
+++ b/libs/libc/string/lib_strlcat.c
@@ -27,6 +27,8 @@
 #include <sys/types.h>
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -44,7 +46,7 @@
  *
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRLCAT
+#if !defined(CONFIG_LIBC_ARCH_STRLCAT) && defined(LIBC_BUILD_STRING)
 size_t strlcat(FAR char *dst, FAR const char *src, size_t dsize)
 {
   FAR const char *odst = dst;
diff --git a/libs/libc/string/lib_strlcpy.c b/libs/libc/string/lib_strlcpy.c
index ee6f20177b..b108af6cf0 100644
--- a/libs/libc/string/lib_strlcpy.c
+++ b/libs/libc/string/lib_strlcpy.c
@@ -27,6 +27,8 @@
 #include <sys/types.h>
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -43,7 +45,7 @@
  *
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRLCPY
+#if !defined(CONFIG_LIBC_ARCH_STRLCPY) && defined(LIBC_BUILD_STRING)
 size_t strlcpy(FAR char *dst, FAR const char *src, size_t dsize)
 {
   FAR const char *osrc = src;
diff --git a/libs/libc/string/lib_strlen.c b/libs/libc/string/lib_strlen.c
index 647c6d0643..de180e266f 100644
--- a/libs/libc/string/lib_strlen.c
+++ b/libs/libc/string/lib_strlen.c
@@ -26,11 +26,13 @@
 #include <sys/types.h>
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRLEN
+#if !defined(CONFIG_LIBC_ARCH_STRLEN) && defined(LIBC_BUILD_STRING)
 #undef strlen /* See mm/README.txt */
 size_t strlen(const char *s)
 {
diff --git a/libs/libc/string/lib_strncasecmp.c 
b/libs/libc/string/lib_strncasecmp.c
index b2e8261e43..ab3c4595f4 100644
--- a/libs/libc/string/lib_strncasecmp.c
+++ b/libs/libc/string/lib_strncasecmp.c
@@ -28,11 +28,13 @@
 #include <strings.h>
 #include <ctype.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRNCASECMP
+#if !defined(CONFIG_LIBC_ARCH_STRNCASECMP) && defined(LIBC_BUILD_STRING)
 #undef strncasecmp /* See mm/README.txt */
 int strncasecmp(FAR const char *cs, FAR const char *ct, size_t nb)
 {
diff --git a/libs/libc/string/lib_strncat.c b/libs/libc/string/lib_strncat.c
index aa05d4c871..379e503fc1 100644
--- a/libs/libc/string/lib_strncat.c
+++ b/libs/libc/string/lib_strncat.c
@@ -26,11 +26,13 @@
 #include <sys/types.h>
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRNCAT
+#if !defined(CONFIG_LIBC_ARCH_STRNCAT) && defined(LIBC_BUILD_STRING)
 #undef strncat /* See mm/README.txt */
 FAR char *strncat(FAR char *dest, FAR const char *src, size_t n)
 {
diff --git a/libs/libc/string/lib_strncmp.c b/libs/libc/string/lib_strncmp.c
index 2af32e9856..58b6fbfde2 100644
--- a/libs/libc/string/lib_strncmp.c
+++ b/libs/libc/string/lib_strncmp.c
@@ -26,11 +26,13 @@
 #include <sys/types.h>
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRNCMP
+#if !defined(CONFIG_LIBC_ARCH_STRNCMP) && defined(LIBC_BUILD_STRING)
 #undef strncmp /* See mm/README.txt */
 int strncmp(FAR const char *cs, FAR const char *ct, size_t nb)
 {
diff --git a/libs/libc/string/lib_strncpy.c b/libs/libc/string/lib_strncpy.c
index 1a7cf58bb2..7200ebadec 100644
--- a/libs/libc/string/lib_strncpy.c
+++ b/libs/libc/string/lib_strncpy.c
@@ -26,6 +26,8 @@
 #include <sys/types.h>
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -51,7 +53,7 @@
  *
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRNCPY
+#if !defined(CONFIG_LIBC_ARCH_STRNCPY) && defined(LIBC_BUILD_STRING)
 #undef strncpy /* See mm/README.txt */
 FAR char *strncpy(FAR char *dest, FAR const char *src, size_t n)
 {
diff --git a/libs/libc/string/lib_strnlen.c b/libs/libc/string/lib_strnlen.c
index 26f9419843..c81fcc6125 100644
--- a/libs/libc/string/lib_strnlen.c
+++ b/libs/libc/string/lib_strnlen.c
@@ -26,11 +26,13 @@
 #include <sys/types.h>
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
-#ifndef CONFIG_LIBC_ARCH_STRNLEN
+#if !defined(CONFIG_LIBC_ARCH_STRNLEN) && defined(LIBC_BUILD_STRING)
 size_t strnlen(const char *s, size_t maxlen)
 {
   const char *sc;
diff --git a/libs/libc/string/lib_strrchr.c b/libs/libc/string/lib_strrchr.c
index c690e94c3f..b8c3c05b5f 100644
--- a/libs/libc/string/lib_strrchr.c
+++ b/libs/libc/string/lib_strrchr.c
@@ -26,6 +26,8 @@
 
 #include <string.h>
 
+#include "libc.h"
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -34,7 +36,7 @@
  * occurrence of the character c in the string s.
  */
 
-#ifndef CONFIG_LIBC_ARCH_STRRCHR
+#if !defined(CONFIG_LIBC_ARCH_STRRCHR) && defined(LIBC_BUILD_STRING)
 #undef strrchr /* See mm/README.txt */
 FAR char *strrchr(FAR const char *s, int c)
 {
diff --git a/libs/libc/string/lib_vikmemcpy.c b/libs/libc/string/lib_vikmemcpy.c
index ce9a89a4e2..ef1f99afed 100644
--- a/libs/libc/string/lib_vikmemcpy.c
+++ b/libs/libc/string/lib_vikmemcpy.c
@@ -62,6 +62,10 @@
 #include <stdint.h>
 #include <string.h>
 
+#include "libc.h"
+
+#if !defined(CONFIG_LIBC_ARCH_MEMCPY) && defined(LIBC_BUILD_STRING)
+
 /****************************************************************************
  * Pre-processor Definitions
  ****************************************************************************/
@@ -342,3 +346,5 @@ FAR void *memcpy(FAR void *dest, FAR const void *src, 
size_t count)
 
   return dest;
 }
+
+#endif

Reply via email to