diff options
author | Joakim Nohlgård <joakim@nohlgard.se> | 2022-11-30 01:09:14 +0100 |
---|---|---|
committer | Chris Packham <judge.packham@gmail.com> | 2023-03-08 16:54:12 +1300 |
commit | 1a362b560768453ac2745abf7a889e7fc423f3da (patch) | |
tree | 19f7c3fb7f3130f5214cbd03252087f3b0f47b66 /scripts/build/companion_libs/340-picolibc.sh | |
parent | 9e13e83068afbc3b93728fa4512d8c199617be03 (diff) | |
download | crosstool-ng-1a362b560768453ac2745abf7a889e7fc423f3da.tar.gz crosstool-ng-1a362b560768453ac2745abf7a889e7fc423f3da.tar.bz2 crosstool-ng-1a362b560768453ac2745abf7a889e7fc423f3da.zip |
picolibc: Add configuration to select picolibc as the system libc
This moves the picolibc configuration values under C-library -> picolibc
so that they will be more easily discovered.
Signed-off-by: Joakim Nohlgård <joakim@nohlgard.se>
Diffstat (limited to 'scripts/build/companion_libs/340-picolibc.sh')
-rw-r--r-- | scripts/build/companion_libs/340-picolibc.sh | 152 |
1 files changed, 83 insertions, 69 deletions
diff --git a/scripts/build/companion_libs/340-picolibc.sh b/scripts/build/companion_libs/340-picolibc.sh index 1b005e0b..7b29a820 100644 --- a/scripts/build/companion_libs/340-picolibc.sh +++ b/scripts/build/companion_libs/340-picolibc.sh @@ -11,71 +11,13 @@ do_picolibc_for_build() { :; } do_picolibc_for_host() { :; } do_picolibc_for_target() { :; } -if [ "${CT_COMP_LIBS_PICOLIBC}" = "y" ]; then - -# Download picolibc -do_picolibc_get() { - CT_Fetch PICOLIBC -} - -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}" = "y" -o "${CT_COMP_LIBS_PICOLIBC}" = "y" ]; then - 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')" ) - final_opts+=( "extra_config+=('--disable-wchar_t')" ) - 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() { +do_picolibc_common_install() { local -a picolibc_opts local cflags_for_target - CT_DoStep INFO "Installing Picolibc library" - - CT_mkdir_pushd "${CT_BUILD_DIR}/build-picolibc-build-${CT_BUILD}" - - CT_DoLog EXTRA "Configuring Picolibc library" + CT_DoLog EXTRA "Configuring C library" # Multilib is the default, so if it is not enabled, disable it. if [ "${CT_MULTILIB}" != "y" ]; then @@ -106,9 +48,6 @@ RETARGETABLE_LOCKING:newlib-retargetable-locking fi done - [ "${CT_USE_SYSROOT}" = "y" ] && \ - picolibc_opts+=( "-Dsysroot-install=true" ) - [ "${CT_LIBC_PICOLIBC_EXTRA_SECTIONS}" = "y" ] && \ CT_LIBC_PICOLIBC_TARGET_CFLAGS="${CT_LIBC_PICOLIBC_TARGET_CFLAGS} -ffunction-sections -fdata-sections" @@ -145,13 +84,24 @@ needs_exe_wrapper = true skip_sanity_check = true EOF + local picolibc_sysroot_dir + local picolibc_lib_dir + if [ "${CT_LIBC_PICOLIBC}" = 'y' ]; then + picolibc_sysroot_dir="${CT_SYSROOT_DIR}" + picolibc_lib_dir="${CT_SYSROOT_DIR}/lib" + picolibc_opts+=( '-Dsystem-libc=true' ) + else + picolibc_sysroot_dir="${CT_PREFIX_DIR}/picolibc" + picolibc_lib_dir="${picolibc_sysroot_dir}/${CT_TARGET}/lib" + fi + CT_DoExecLog CFG \ meson \ --cross-file picolibc-cross.txt \ - --prefix="${CT_PREFIX_DIR}" \ - -Dincludedir=picolibc/include \ - -Dlibdir=picolibc/${CT_TARGET}/lib \ - -Dspecsdir="${CT_SYSROOT_DIR}"/lib \ + --prefix="${picolibc_sysroot_dir}" \ + -Dincludedir=include \ + -Dlibdir="${picolibc_lib_dir}" \ + -Dspecsdir="${CT_SYSROOT_DIR}/lib" \ "${CT_SRC_DIR}/picolibc" \ "${picolibc_opts[@]}" \ "${CT_LIBC_PICOLIBC_EXTRA_CONFIG_ARRAY[@]}" @@ -161,11 +111,75 @@ EOF CT_DoLog EXTRA "Installing C library" CT_DoExecLog ALL ninja install +} + +fi # CT_LIBC_PICOLIBC -o CT_COMP_LIBS_PICOLIBC + +if [ "${CT_COMP_LIBS_PICOLIBC}" = "y" ]; then + +do_cc_libstdcxx_picolibc() { :; } + +# Download picolibc +do_picolibc_get() { + CT_Fetch PICOLIBC +} + +do_picolibc_extract() { + CT_ExtractPatch PICOLIBC +} + +if [ "${CT_LIBC_PICOLIBC_GCC_LIBSTDCXX}" = "y" ]; then +#------------------------------------------------------------------------------ +# 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 + 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')" ) + final_opts+=( "extra_config+=('--disable-wchar_t')" ) + 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 # CT_LIBC_PICOLIBC_GCC_LIBSTDCXX +do_picolibc_for_target() { + CT_DoStep INFO "Installing Picolibc library" + CT_mkdir_pushd "${CT_BUILD_DIR}/build-picolibc-build-${CT_BUILD}" + do_picolibc_common_install + CT_Popd + CT_EndStep do_cc_libstdcxx_picolibc } -fi +fi # CT_COMP_LIBS_PICOLIBC |