Skip to content

Commit 038806a

Browse files
committed
picolib: Add option to compile additional variant of stdc++
Compile additional variant of libstdc++ with exceptions disabled. Signed-off-by: Adrian Gielniewski <[email protected]>
1 parent 2e9ac05 commit 038806a

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

config/comp_libs/picolibc.in

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@ config LIBC_PICOLIBC_GCC_LIBSTDCXX
2020
picolibc. This version is linked when "--specs=picolibcpp.specs"
2121
is specified.
2222

23+
config LIBC_PICOLIBC_GCC_LIBSTDCXX_NOEXCEPT
24+
bool
25+
prompt "Compile libstdc++ picolibc variant with exceptions disabled"
26+
default y
27+
depends on CC_LANG_CXX
28+
help
29+
This option compiles an additional target libstdc++ for use with
30+
picolibc. This version is linked when "--specs=picolibcpp_noexcept.specs"
31+
is specified.
32+
2333
config LIBC_PICOLIBC_CXA_ATEXIT
2434
def_bool y
2535
select LIBC_PROVIDES_CXA_ATEXIT

samples/arm-picolibc-eabi/crosstool.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ CT_CC_GCC_MULTILIB_LIST="rmprofile"
99
CT_CC_GCC_CONFIG_TLS=y
1010
CT_CC_LANG_CXX=y
1111
CT_COMP_LIBS_PICOLIBC=y
12+
CT_LIBC_PICOLIBC_GCC_LIBSTDCXX_NOEXCEPT=y

scripts/build/companion_libs/340-picolibc.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ do_picolibc_extract() {
2727
# flag for libstdc++ "picolibc" variant.
2828
do_cc_libstdcxx_picolibc()
2929
{
30+
local variant="$1"
3031
local -a final_opts
3132
local final_backend
33+
local suffix=
3234

3335
if [ "${CT_LIBC_PICOLIBC_GCC_LIBSTDCXX}" = "y" ]; then
3436
final_opts+=( "host=${CT_HOST}" )
@@ -46,6 +48,10 @@ do_cc_libstdcxx_picolibc()
4648
if [ "${CT_LIBC_PICOLIBC_ENABLE_TARGET_OPTSPACE}" = "y" ]; then
4749
final_opts+=( "enable_optspace=yes" )
4850
fi
51+
if [ "${variant}" = "noexcept" ]; then
52+
final_opts+=( "extra_cxxflags_for_target=-fno-exceptions" )
53+
suffix="-noexcept"
54+
fi
4955

5056
if [ "${CT_BARE_METAL}" = "y" ]; then
5157
final_opts+=( "mode=baremetal" )
@@ -61,8 +67,9 @@ do_cc_libstdcxx_picolibc()
6167
fi
6268

6369
CT_DoStep INFO "Installing libstdc++ picolibc"
64-
CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-libstdcxx-picolibc"
70+
CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-libstdcxx-picolibc${suffix}"
6571
"${final_backend}" "${final_opts[@]}"
72+
# TODO: suffix
6673
CT_Popd
6774

6875
CT_EndStep
@@ -170,6 +177,10 @@ EOF
170177

171178
do_cc_libstdcxx_picolibc
172179

180+
if [ "${CT_LIBC_PICOLIBC_GCC_LIBSTDCXX_NOEXCEPT}" = "y" ]; then
181+
do_cc_libstdcxx_picolibc noexcept
182+
fi
183+
173184
if [ "${CT_STRIP_TARGET_TOOLCHAIN_LIBRARIES}" = "y" ]; then
174185

175186
CT_DoStep INFO "Stripping Picolibc library"

0 commit comments

Comments
 (0)