Skip to content

Picolibc cplusplus #620

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions cmake/zephyr/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,9 @@ config TOOLCHAIN_ZEPHYR_0_15
config TOOLCHAIN_ZEPHYR_SUPPORTS_THREAD_LOCAL_STORAGE
def_bool y
select TOOLCHAIN_SUPPORTS_THREAD_LOCAL_STORAGE

config PICOLIBC_SUPPORTED
def_bool y
depends on "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "zephyr"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What effect would this have on other toolchains? For instance, you can add picolibc support to the arm embedded toolkit by downloading the picolibc overlay, you can build native a crosstool-ng toolchain which can have picolibc support included, or you could be using the native Debian arm-none-eabi toolchain, which has picolibc support.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What effect would this have on other toolchains?

None.
This only sets the setting to y when Zephyr SDK is used.
When another toolchain is used, then the setting inside the Zephyr repo is used.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh. How does this detect whether the user is building the picolibc module? Because you could be using the zephyr toolchain but not using the picolibc bits it provides, and that wouldn't work for C++.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't allow Zephyr to restrict picolibc usage for boards that don't work, even if picolibc works for the target architecture (like qemu_x86_tiny). Perhaps this should use a new variable, TOOLCHAIN_PICOLIBC_SUPPORTED, and that variable could be used in the computation of PICOLIBC_SUPPORTED?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't allow Zephyr to restrict picolibc usage for boards that don't work, even if picolibc works for the target architecture (like qemu_x86_tiny).

Correct, so if we do have such boards then we need to consider how to handle them.

What is the reason that a given board would impact the use of picolibc ?
Especially as from your description, the architecture itself is supported.
(and is it really the board, and not the SoC which are restricting picolibc ?)

Do you have some concrete examples ?

Probably this is something which should be handle directly at the board, and the board Kconfig in fact has a possibility to default the TOOLCHAIN_PICOLIBC_SUPPORTED to n if this is needed.

help
Zephyr SDK >=0.16 always supports Picolibc for C and C++ development.
1 change: 1 addition & 0 deletions cmake/zephyr/generic.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,4 @@ endif()
set(CROSS_COMPILE ${one_toolchain_root}/${CROSS_COMPILE_TARGET}/bin/${CROSS_COMPILE_TARGET}-)
set(SYSROOT_DIR ${one_toolchain_root}/${SYSROOT_TARGET}/${SYSROOT_TARGET})
set(TOOLCHAIN_HAS_NEWLIB ON CACHE BOOL "True if toolchain supports newlib")
set(TOOLCHAIN_HAS_PICOLIBC ON CACHE BOOL "True if toolchain supports picolibc")