diff --git a/bsp/k210/drivers/SConscript b/bsp/k210/drivers/SConscript index 9d107026551..a118be7270d 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 c7268e7b9af..1dcc6f389ce 100644 --- a/components/libc/cplusplus/Kconfig +++ b/components/libc/cplusplus/Kconfig @@ -5,11 +5,19 @@ menuconfig RT_USING_CPLUSPLUS if RT_USING_CPLUSPLUS config RT_USING_CPLUSPLUS11 - bool "Enable c++11 threading feature support" + bool "Enable C++11 standard multi-threading feature support" default n select RT_USING_POSIX_FS select RT_USING_POSIX_STDIO select RT_USING_PTHREADS select RT_USING_RTC + config RT_USING_CPP_WRAPPER + 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 760049c139c..2f280892f4f 100644 --- a/components/libc/cplusplus/SConscript +++ b/components/libc/cplusplus/SConscript @@ -1,21 +1,22 @@ -# RT-Thread building script for component - from building import * +import os Import('rtconfig') -cwd = GetCurrentDir() -src = Glob('*.cpp') + Glob('*.c') +cwd = GetCurrentDir() +src = ['cxx_crt_init.c', 'cxx_crt.cpp'] CPPPATH = [cwd] +CXXFLAGS = '' + + +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 -if GetDepend('RT_USING_CPLUSPLUS11'): - src += Glob('cpp11/*.cpp') + Glob('cpp11/*.c') - if rtconfig.PLATFORM in ['armclang']: - src += Glob('cpp11/armclang/*.cpp') + Glob('cpp11/armclang/*.c') - CPPPATH += [cwd + '/cpp11/armclang'] - elif rtconfig.PLATFORM in ['gcc']: - src += Glob('cpp11/gcc/*.cpp') + Glob('cpp11/gcc/*.c') - CPPPATH += [cwd + '/cpp11/gcc'] +group = DefineGroup('CPP', src, depend=['RT_USING_CPLUSPLUS'], CPPPATH=CPPPATH, CXXFLAGS=CXXFLAGS) -group = DefineGroup('CPlusPlus', src, depend = ['RT_USING_CPLUSPLUS'], CPPPATH = CPPPATH) +list = os.listdir(cwd) +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + group = group + SConscript(os.path.join(d, 'SConscript')) Return('group') diff --git a/components/libc/cplusplus/cpp11/SConscript b/components/libc/cplusplus/cpp11/SConscript new file mode 100644 index 00000000000..0d96a062694 --- /dev/null +++ b/components/libc/cplusplus/cpp11/SConscript @@ -0,0 +1,18 @@ +from building import * +Import('rtconfig') + +cwd = GetCurrentDir() +src = [] +CPPPATH = [] + +src += Glob('*.cpp') + Glob('*.c') +if rtconfig.PLATFORM in ['armclang']: + src += Glob('armclang/*.cpp') + Glob('armclang/*.c') + CPPPATH += [cwd + '/armclang'] +elif rtconfig.PLATFORM in ['gcc']: + src += Glob('gcc/*.cpp') + Glob('gcc/*.c') + CPPPATH += [cwd + '/gcc'] + +group = DefineGroup('CPP', src, depend=['RT_USING_CPLUSPLUS11'], CPPPATH=CPPPATH) + +Return('group') diff --git a/components/libc/cplusplus/cpp11/gcc/__utils.h b/components/libc/cplusplus/cpp11/gcc/__utils.h index f9a3c93796d..304d789ab55 100644 --- a/components/libc/cplusplus/cpp11/gcc/__utils.h +++ b/components/libc/cplusplus/cpp11/gcc/__utils.h @@ -17,11 +17,9 @@ #include -#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; diff --git a/components/libc/cplusplus/os/SConscript b/components/libc/cplusplus/os/SConscript new file mode 100644 index 00000000000..5bda46087a2 --- /dev/null +++ b/components/libc/cplusplus/os/SConscript @@ -0,0 +1,8 @@ +from building import * + +cwd = GetCurrentDir() +src = Glob('*.cpp') +CPPPATH = [cwd] +group = DefineGroup('CPP', src, depend=['RT_USING_CPP_WRAPPER'], CPPPATH=CPPPATH) + +Return('group') diff --git a/components/libc/cplusplus/cxx_Mutex.cpp b/components/libc/cplusplus/os/cxx_Mutex.cpp similarity index 100% rename from components/libc/cplusplus/cxx_Mutex.cpp rename to components/libc/cplusplus/os/cxx_Mutex.cpp diff --git a/components/libc/cplusplus/cxx_Semaphore.cpp b/components/libc/cplusplus/os/cxx_Semaphore.cpp similarity index 100% rename from components/libc/cplusplus/cxx_Semaphore.cpp rename to components/libc/cplusplus/os/cxx_Semaphore.cpp diff --git a/components/libc/cplusplus/cxx_Thread.cpp b/components/libc/cplusplus/os/cxx_Thread.cpp similarity index 100% rename from components/libc/cplusplus/cxx_Thread.cpp rename to components/libc/cplusplus/os/cxx_Thread.cpp diff --git a/components/libc/cplusplus/cxx_lock.h b/components/libc/cplusplus/os/cxx_lock.h similarity index 100% rename from components/libc/cplusplus/cxx_lock.h rename to components/libc/cplusplus/os/cxx_lock.h diff --git a/components/libc/cplusplus/cxx_mail.h b/components/libc/cplusplus/os/cxx_mail.h similarity index 100% rename from components/libc/cplusplus/cxx_mail.h rename to components/libc/cplusplus/os/cxx_mail.h diff --git a/components/libc/cplusplus/cxx_mutex.h b/components/libc/cplusplus/os/cxx_mutex.h similarity index 100% rename from components/libc/cplusplus/cxx_mutex.h rename to components/libc/cplusplus/os/cxx_mutex.h diff --git a/components/libc/cplusplus/cxx_queue.h b/components/libc/cplusplus/os/cxx_queue.h similarity index 100% rename from components/libc/cplusplus/cxx_queue.h rename to components/libc/cplusplus/os/cxx_queue.h diff --git a/components/libc/cplusplus/cxx_semaphore.h b/components/libc/cplusplus/os/cxx_semaphore.h similarity index 100% rename from components/libc/cplusplus/cxx_semaphore.h rename to components/libc/cplusplus/os/cxx_semaphore.h diff --git a/components/libc/cplusplus/cxx_thread.h b/components/libc/cplusplus/os/cxx_thread.h similarity index 100% rename from components/libc/cplusplus/cxx_thread.h rename to components/libc/cplusplus/os/cxx_thread.h