Skip to content

Conversation

@Barto22
Copy link

@Barto22 Barto22 commented Jan 11, 2026

Summary

This PR updates the build environment to use the latest Ubuntu 24.04 LTS base image and upgrades the GNU toolchains to:

  • ARM GCC 15.2.rel1
  • RISC-V GCC 15.2.0

All SIM board configurations that enable LIBCXX are now built with clang, as GCC < 15 lacks required builtin features for C++23 and libc++.

This continues the integration effort for LLVM libc++ and libc++abi (v21.1.8) in NuttX, enabling modern C++23-compatible standard library components including new language features and exception handling.

Impact

  • Modernizes CI and build environment to current LTS
  • Improves ARM/RISC-V toolchain compatibility
  • Ensures SIM + libc++ builds consistently via clang
  • Existing GNU libstdc++ and non-libc++ workflows remain unaffected

Current status:

  • Runtime / ABI: basic C++ exception handling is functional
  • Compatibility: legacy C++ toolchains are unaffected
  • Build systems: validated via make and cmake
  • Forward support: establishes a solid baseline for C++23 and libc++ work

No impact to existing boards or applications unless enabling libc++.

Testing

Host environment:

  • Linux x86_64 (Ubuntu 24.04 LTS Docker image)

Boards / Configurations tested:

  • stm32f4discovery:testlibcxx
  • esp32c3-devkit:testlibcxx

Toolchains:

  • ARM GCC 15.2.rel1
  • RISC-V GCC 15.2.0
  • clang (for SIM + libc++ targets)

Procedure:

  • Built with both make and cmake
  • Verified exception handling
  • Validated libc++ functionality
  • Confirmed non-libc++ builds remain functional

Status:

  • libc++ functionality verified
  • Exception handling working
  • No regressions detected

Logs and additional validation data are available on request.

@github-actions github-actions bot added Area: Build system Arch: arm Issues related to ARM (32-bit) architecture Area: OS Components OS Components issues Board: arm Board: risc-v Board: xtensa Size: L The size of the change in this PR is large labels Jan 11, 2026
This commit adds support for LLVM libcxx and libcxxabi version 21.1.8,
including necessary patches and CMake configuration for building with
NuttX.

Signed-off-by: Bartosz <[email protected]>
Fix exception handling issues in libcxx and libcxxabi to work properly
with NuttX's exception model.

Signed-off-by: Bartosz <[email protected]>
Add necessary changes to support ESP32 RISC-V initialization with
proper C++ constructor handling including code style fixes.

Signed-off-by: Bartosz <[email protected]>
@Barto22 Barto22 force-pushed the feature/add-support-for-latest-libcxx-and-libcxxabi branch from 6522e0c to 0b3dd30 Compare January 12, 2026 06:52
This commit adds support for threads using pthread support.

Signed-off-by: Bartosz <[email protected]>
@jerpelea jerpelea changed the title Add support for latest LLVM LIBCXX and LIBCXXABI version 21.1.8 libs: Add support for latest LLVM LIBCXX and LIBCXXABI version 21.1.8 Jan 12, 2026
jerpelea
jerpelea previously approved these changes Jan 12, 2026
Remove flag for long-calls for arm architecture.

Signed-off-by: Bartosz <[email protected]>
boards/sim/: Change gcc to clang

This commit will update Docker file to latest Ubuntu LTS with update of GCC for ARM and RISCV. Also SIM boards with LIBCXX are build with clang because GCC < 15 have lack of some builtin features.

Signed-off-by: Bartosz <[email protected]>
Fix cmake formatting.

Signed-off-by: Bartosz <[email protected]>
@Barto22 Barto22 requested a review from btashton as a code owner January 12, 2026 13:23
Change mcmodel to large and update bloaty to latest version

Signed-off-by: Bartosz <[email protected]>
Fix patches includes in libcxx.

Signed-off-by: Bartosz <[email protected]>
Update Clang to version 21.

Signed-off-by: Bartosz <[email protected]>
acassis
acassis previously approved these changes Jan 12, 2026
Fix version of Clang-21 for Ubuntu jammy

Signed-off-by: Bartosz <[email protected]>
@xiaoxiang781216
Copy link
Contributor

@Barto22 please move Docker related change to new pr, so we can merge it first and then verify whether this pr can pass ci.

ifneq ($(CONFIG_CXX_RTTI),y)
ARCHCXXFLAGS += -fno-rtti
endif

Copy link
Contributor

Choose a reason for hiding this comment

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

revert

{
#if defined(CONFIG_ARCH_SIM) && defined(CONFIG_HOST_MACOS)
macho_call_saved_init_funcs();
#elif defined(USE_ESP32_XTENSA_INIT_ARRAYS)
Copy link
Contributor

Choose a reason for hiding this comment

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

why add esp32 specific code in the common place? it's better to adjust esp32 riscv ld to conform the requirement.


ARCHPICFLAGS = -fpic

ifeq ($(CONFIG_SIM_TOOLCHAIN_CLANG),y)
Copy link
Contributor

Choose a reason for hiding this comment

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

it's better to split the change not directly related to c++23 upgrade to new pr to boost the review proccess.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Arch: arm Issues related to ARM (32-bit) architecture Area: CI Area: OS Components OS Components issues Area: Tooling Board: arm Board: risc-v Board: simulator Board: xtensa Size: L The size of the change in this PR is large

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants