diff --git a/components/libc/Kconfig b/components/libc/Kconfig index 47b484744e..9939dbdc4e 100644 --- a/components/libc/Kconfig +++ b/components/libc/Kconfig @@ -1,11 +1,27 @@ menu "C/C++ and POSIX layer" -# This is for external libc(e.g. mlib), -# and NOT for newlib or picolibc which are inherent in the toolchains. -# Usually, the external libc should be a software package and select -# RT_USING_EXTERNAL_LIBC in software package's Kconfig +config RT_USING_INTERNAL_LIBC_ONLY + bool "Only use tool chain internal libc" + default n + help + This option is for RT-Thread Nano version. + If select this option, it will not compile components/libc + folder and only use tool chain internal libc. Normally, the + tool chain internal is only cover ISO standard (e.g. armcc), + but some tool chains' internal libc will cover more than + ISO standard (e.g. newlib). However, no matter the cover level + it is, the rt-thread libc leveling layer will not be involved + at all if select this option. + config RT_USING_EXTERNAL_LIBC + depends on !RT_USING_INTERNAL_LIBC_ONLY bool + help + This is for external libc(e.g. mlib), + and NOT for newlib or picolibc which are inherent in the toolchains. + Usually, the external libc should be a software package and select + RT_USING_EXTERNAL_LIBC in software package's Kconfig + This option is not available for users to select. source "$RTT_DIR/components/libc/compilers/common/Kconfig" source "$RTT_DIR/components/libc/posix/Kconfig" diff --git a/components/libc/compilers/SConscript b/components/libc/compilers/SConscript index 4c815c49b8..772229b18d 100644 --- a/components/libc/compilers/SConscript +++ b/components/libc/compilers/SConscript @@ -7,9 +7,10 @@ cwd = GetCurrentDir() objs = [] list = os.listdir(cwd) -for d in list: - path = os.path.join(cwd, d) - if os.path.isfile(os.path.join(path, 'SConscript')): - objs = objs + SConscript(os.path.join(d, 'SConscript')) +if not GetDepend('RT_USING_INTERNAL_LIBC_ONLY'): + for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) Return('objs') diff --git a/include/rtdef.h b/include/rtdef.h index c2cececbbd..81038dc3c7 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -50,9 +50,9 @@ * 2023-04-01 Chushicheng change version number to v5.0.1 * 2023-05-20 Bernard add stdc atomic detection. * 2023-09-15 xqyjlj perf rt_hw_interrupt_disable/enable - * 2023-09-17 Meco Man add RT_USING_LIBC_ISO_ONLY macro * 2023-10-10 Chushicheng change version number to v5.1.0 * 2023-10-11 zmshahaha move specific devices related and driver to components/drivers + * 2023-11-21 Meco Man add RT_USING_INTERNAL_LIBC_ONLY macro */ #ifndef __RT_DEF_H__ @@ -60,24 +60,26 @@ #include -#ifdef RT_USING_LIBC -#if !defined(RT_USING_LIBC_ISO_ONLY) && !defined(RT_VER_NUM) -/* If RT_VER_NUM is not defined, there is no extra libc support. */ -#define RT_USING_LIBC_ISO_ONLY (1) +/* + * If RT_VER_NUM is not defined or RT_USING_INTERNAL_LIBC_ONLY is defined, + * there is no extra libc support, only internal libc can be used. + */ +#if defined(RT_USING_INTERNAL_LIBC_ONLY) || !defined(RT_VER_NUM) +#define __RT_USING_INTERNAL_LIBC_ONLY (1) #else -#define RT_USING_LIBC_ISO_ONLY (0) -#endif /* !defined(RT_USING_LIBC_ISO_ONLY) && !defined(RT_VER_NUM) */ +#define __RT_USING_INTERNAL_LIBC_ONLY (0) +#endif /* defined(RT_USING_INTERNAL_LIBC_ONLY) && !defined(RT_VER_NUM) */ + #include #include #include -#if !RT_USING_LIBC_ISO_ONLY +#if !__RT_USING_INTERNAL_LIBC_ONLY #include #include #if defined(RT_USING_SIGNALS) || defined(RT_USING_SMART) #include #endif /* defined(RT_USING_SIGNALS) || defined(RT_USING_SMART) */ -#endif /* !RT_USING_LIBC_ISO_ONLY */ -#endif /* RT_USING_LIBC */ +#endif /* !__RT_USING_INTERNAL_LIBC_ONLY */ #ifdef __cplusplus extern "C" { @@ -133,13 +135,13 @@ typedef unsigned long long rt_uint64_t; /**< 64bit unsigned inte #endif /* RT_USING_LIBC */ #endif /* RT_USING_ARCH_DATA_TYPE */ -#if defined(RT_USING_LIBC) && !RT_USING_LIBC_ISO_ONLY +#if defined(RT_USING_LIBC) && !__RT_USING_INTERNAL_LIBC_ONLY typedef size_t rt_size_t; /**< Type for size number */ typedef ssize_t rt_ssize_t; /**< Used for a count of bytes or an error indication */ #else typedef rt_ubase_t rt_size_t; /**< Type for size number */ typedef rt_base_t rt_ssize_t; /**< Used for a count of bytes or an error indication */ -#endif /* defined(RT_USING_LIBC) && !RT_USING_LIBC_ISO_ONLY */ +#endif /* defined(RT_USING_LIBC) && !__RT_USING_INTERNAL_LIBC_ONLY */ typedef rt_base_t rt_err_t; /**< Type for error number */ typedef rt_uint32_t rt_time_t; /**< Type for time stamp */ @@ -403,7 +405,7 @@ typedef int (*init_fn_t)(void); /**@{*/ /* RT-Thread error code definitions */ -#if defined(RT_USING_LIBC) && !RT_USING_LIBC_ISO_ONLY +#if defined(RT_USING_LIBC) && !__RT_USING_INTERNAL_LIBC_ONLY /* POSIX error code compatible */ #define RT_EOK 0 /**< There is no error */ #define RT_ERROR 255 /**< A generic/unknown error happens */ @@ -438,7 +440,7 @@ typedef int (*init_fn_t)(void); #define RT_EPERM 13 /**< Operation not permitted */ #define RT_ETRAP 14 /**< Trap event */ #define RT_EFAULT 15 /**< Bad address */ -#endif /* defined(RT_USING_LIBC) && !RT_USING_LIBC_ISO_ONLY */ +#endif /* defined(RT_USING_LIBC) && !__RT_USING_INTERNAL_LIBC_ONLY */ /**@}*/ diff --git a/include/rtthread.h b/include/rtthread.h index 0e9502d469..6b329a8aa4 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -659,13 +659,12 @@ void rt_components_board_init(void); #else int rt_kprintf(const char *fmt, ...); void rt_kputs(const char *str); +#endif /* RT_USING_CONSOLE */ rt_err_t rt_backtrace(void); rt_err_t rt_backtrace_thread(rt_thread_t thread); rt_err_t rt_backtrace_frame(struct rt_hw_backtrace_frame *frame); -#endif /* RT_USING_CONSOLE */ - int rt_vsprintf(char *dest, const char *format, va_list arg_ptr); int rt_vsnprintf(char *buf, rt_size_t size, const char *fmt, va_list args); int rt_sprintf(char *buf, const char *format, ...);