summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bsp/k210/drivers/SConscript2
-rw-r--r--components/libc/cplusplus/Kconfig4
-rw-r--r--components/libc/cplusplus/SConscript7
-rw-r--r--components/libc/cplusplus/cpp11/gcc/__utils.h4
4 files changed, 12 insertions, 5 deletions
diff --git a/bsp/k210/drivers/SConscript b/bsp/k210/drivers/SConscript
index 9d10702655..a118be7270 100644
--- a/bsp/k210/drivers/SConscript
+++ b/bsp/k210/drivers/SConscript
@@ -38,7 +38,7 @@ if GetDepend('RT_USING_PWM'):
if GetDepend('RT_USING_WDT'):
src += ['drv_wdt.c']
-group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
+group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=['NNCASE_NO_EXCEPTIONS'])
objs = [group]
diff --git a/components/libc/cplusplus/Kconfig b/components/libc/cplusplus/Kconfig
index e049f65629..1dcc6f389c 100644
--- a/components/libc/cplusplus/Kconfig
+++ b/components/libc/cplusplus/Kconfig
@@ -16,4 +16,8 @@ if RT_USING_CPLUSPLUS
bool "Enable RT-Thread APIs C++ wrapper"
default n
+ config RT_USING_CPP_EXCEPTIONS
+ bool "Enable C++ exceptions (will increase overhead)"
+ default n
+
endif
diff --git a/components/libc/cplusplus/SConscript b/components/libc/cplusplus/SConscript
index a7829cea6d..2f280892f4 100644
--- a/components/libc/cplusplus/SConscript
+++ b/components/libc/cplusplus/SConscript
@@ -5,8 +5,13 @@ Import('rtconfig')
cwd = GetCurrentDir()
src = ['cxx_crt_init.c', 'cxx_crt.cpp']
CPPPATH = [cwd]
+CXXFLAGS = ''
-group = DefineGroup('CPP', src, depend=['RT_USING_CPLUSPLUS'], CPPPATH=CPPPATH)
+
+if rtconfig.PLATFORM in ['gcc', 'armclang', 'llvm-arm'] and not GetDepend('RT_USING_CPP_EXCEPTIONS'):
+ CXXFLAGS += ' -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -Wl,--gc-sections' # reduce resource consumptions
+
+group = DefineGroup('CPP', src, depend=['RT_USING_CPLUSPLUS'], CPPPATH=CPPPATH, CXXFLAGS=CXXFLAGS)
list = os.listdir(cwd)
for d in list:
diff --git a/components/libc/cplusplus/cpp11/gcc/__utils.h b/components/libc/cplusplus/cpp11/gcc/__utils.h
index f9a3c93796..304d789ab5 100644
--- a/components/libc/cplusplus/cpp11/gcc/__utils.h
+++ b/components/libc/cplusplus/cpp11/gcc/__utils.h
@@ -17,11 +17,9 @@
#include <rtthread.h>
-#define RT_USING_CPP_EXCEPTION
-
inline void throw_system_error(int err, const char *what_msg)
{
-#ifdef RT_USING_CPP_EXCEPTION
+#ifdef RT_USING_CPP_EXCEPTIONS
throw std::system_error(std::error_code(err, std::system_category()), what_msg);
#else
(void)err;