Skip to content
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

Zephyr 3.7 support. Drop older 3.x #54

Merged
merged 1 commit into from
Sep 25, 2024
Merged

Zephyr 3.7 support. Drop older 3.x #54

merged 1 commit into from
Sep 25, 2024

Conversation

tylerwhall
Copy link
Owner

Issues with 3.x prior to 3.7:

picolibc:
I was not able to get Kconfig to build picolibc from source in a way that was compatible with both 3.7 and prior versions of 3.x due to Zephyr changing PICOLIBC_USE_MODULE from a bool to a choice. Setting options in each prj.conf also doesn't work because it generates warnings for undefined symbols in older versions. If there were some way to have version-conditional behavior in Kconfig, that would make it possible to bring back older 3.x compat.

ctors:
zephyr-macros uses ctors to run init code. This required setting CONFIG_CPLUSPLUS. That has been deprecated and removed in 3.7, but there is now a separate option, CONFIG_STATIC_INIT_GNU, that runs ctors. TOOLCHAIN_SUPPORTS_STATIC_INIT_GNU happened to be added in the same commit, so we can use this to distinguish between setting CPLUSPLUS on 2.x and STATIC_INIT_GNU on 3.7. Prior to 3.7, STATIC_INIT_GNU does not exist and CPLUSPLUS conflicts with PICOLIBC_USE_MODULE. It might be possible to avoid this mess by not relying on C++ ctors.

Issues with 3.x prior to 3.7:

picolibc:
I was not able to get Kconfig to build picolibc from source in a way
that was compatible with both 3.7 and prior versions of 3.x due to
Zephyr changing PICOLIBC_USE_MODULE from a bool to a choice. Setting
options in each prj.conf also doesn't work because it generates warnings
for undefined symbols in older versions. If there were some way to have
version-conditional behavior in Kconfig, that would make it possible to
bring back older 3.x compat.

ctors:
zephyr-macros uses ctors to run init code. This required setting
CONFIG_CPLUSPLUS. That has been deprecated and removed in 3.7, but there
is now a separate option, CONFIG_STATIC_INIT_GNU, that runs ctors.
TOOLCHAIN_SUPPORTS_STATIC_INIT_GNU happened to be added in the same
commit, so we can use this to distinguish between setting CPLUSPLUS on
2.x and STATIC_INIT_GNU on 3.7. Prior to 3.7, STATIC_INIT_GNU does not
exist and CPLUSPLUS conflicts with PICOLIBC_USE_MODULE.
It might be possible to avoid this mess by not relying on C++ ctors.
@tylerwhall tylerwhall merged commit a11db2e into master Sep 25, 2024
44 of 46 checks passed
@tylerwhall tylerwhall deleted the 3.7-support branch September 25, 2024 04:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant