summaryrefslogtreecommitdiff
path: root/scripts/build
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2021-01-12 06:28:38 (GMT)
committerKeith Packard <keithp@keithp.com>2021-01-12 07:29:01 (GMT)
commit27b18d2fc70a7788c97f57a02a768214a2548ee0 (patch)
tree369633156cecebec9fae686eec418e94fb148711 /scripts/build
parent43f50793826918f78b79d2e8197da4e58bdf6748 (diff)
picolibc: Build libstdc++ against picolibc if requested
This uses the gcc support for building libstdc++ using alternate lib header files. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'scripts/build')
-rw-r--r--scripts/build/companion_libs/340-picolibc.sh46
1 files changed, 46 insertions, 0 deletions
diff --git a/scripts/build/companion_libs/340-picolibc.sh b/scripts/build/companion_libs/340-picolibc.sh
index c0128c1..525497a 100644
--- a/scripts/build/companion_libs/340-picolibc.sh
+++ b/scripts/build/companion_libs/340-picolibc.sh
@@ -22,6 +22,50 @@ do_picolibc_extract() {
CT_ExtractPatch PICOLIBC
}
+#------------------------------------------------------------------------------
+# Build an additional target libstdc++ with "-Os" (optimise for speed) option
+# flag for libstdc++ "picolibc" variant.
+do_cc_libstdcxx_picolibc()
+{
+ local -a final_opts
+ local final_backend
+
+ if [ "${CT_LIBC_PICOLIBC_GCC_LIBSTDCXX}" = "y" ]; then
+ final_opts+=( "host=${CT_HOST}" )
+ final_opts+=( "libstdcxx_name=picolibc" )
+ final_opts+=( "prefix=${CT_PREFIX_DIR}" )
+ final_opts+=( "complibs=${CT_HOST_COMPLIBS_DIR}" )
+ final_opts+=( "cflags=${CT_CFLAGS_FOR_HOST}" )
+ final_opts+=( "ldflags=${CT_LDFLAGS_FOR_HOST}" )
+ final_opts+=( "lang_list=c,c++" )
+ final_opts+=( "build_step=libstdcxx" )
+ final_opts+=( "extra_config+=('--enable-stdio=stdio_pure')" )
+ if [ "${CT_LIBC_PICOLIBC_ENABLE_TARGET_OPTSPACE}" = "y" ]; then
+ final_opts+=( "enable_optspace=yes" )
+ fi
+
+ if [ "${CT_BARE_METAL}" = "y" ]; then
+ final_opts+=( "mode=baremetal" )
+ final_opts+=( "build_libgcc=yes" )
+ final_opts+=( "build_libstdcxx=yes" )
+ final_opts+=( "build_libgfortran=yes" )
+ if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
+ final_opts+=( "build_staticlinked=yes" )
+ fi
+ final_backend=do_gcc_core_backend
+ else
+ final_backend=do_gcc_backend
+ fi
+
+ CT_DoStep INFO "Installing libstdc++ picolibc"
+ CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-libstdcxx-picolibc"
+ "${final_backend}" "${final_opts[@]}"
+ CT_Popd
+
+ CT_EndStep
+ fi
+}
+
do_picolibc_for_target() {
local -a picolibc_opts
local cflags_for_target
@@ -119,6 +163,8 @@ EOF
CT_Popd
CT_EndStep
+
+ do_cc_libstdcxx_picolibc
}
fi