From 2bf65278588d3a1e72970658984f87b421578a34 Mon Sep 17 00:00:00 2001 From: Thiago Alves Date: Tue, 14 Apr 2026 23:01:48 -0400 Subject: [PATCH] fix: add AVR/Arduino compatibility for C++ standard library headers AVR libc (used by Arduino) doesn't ship C++ standard library wrappers like , , etc. Add iec_platform.hpp as a compatibility shim that maps to C headers on AVR and C++ headers elsewhere. All runtime headers now include this instead of the C++ wrappers directly. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/runtime/include/iec_array.hpp | 3 ++- src/runtime/include/iec_char.hpp | 3 ++- src/runtime/include/iec_date.hpp | 3 ++- src/runtime/include/iec_dt.hpp | 3 ++- src/runtime/include/iec_enum.hpp | 3 ++- src/runtime/include/iec_located.hpp | 3 ++- src/runtime/include/iec_memory.hpp | 4 ++-- src/runtime/include/iec_platform.hpp | 30 ++++++++++++++++++++++++++++ src/runtime/include/iec_pointer.hpp | 3 ++- src/runtime/include/iec_ptr.hpp | 4 ++-- src/runtime/include/iec_retain.hpp | 4 ++-- src/runtime/include/iec_std_lib.hpp | 5 ++--- src/runtime/include/iec_string.hpp | 5 ++--- src/runtime/include/iec_subrange.hpp | 3 ++- src/runtime/include/iec_time.hpp | 4 ++-- src/runtime/include/iec_tod.hpp | 3 ++- src/runtime/include/iec_traits.hpp | 4 ++-- src/runtime/include/iec_types.hpp | 4 ++-- src/runtime/include/iec_wstring.hpp | 4 ++-- 19 files changed, 66 insertions(+), 29 deletions(-) create mode 100644 src/runtime/include/iec_platform.hpp diff --git a/src/runtime/include/iec_array.hpp b/src/runtime/include/iec_array.hpp index ddee3cb..af28cf4 100644 --- a/src/runtime/include/iec_array.hpp +++ b/src/runtime/include/iec_array.hpp @@ -12,8 +12,9 @@ #pragma once +#include "iec_platform.hpp" + #include -#include #include #include "iec_var.hpp" diff --git a/src/runtime/include/iec_char.hpp b/src/runtime/include/iec_char.hpp index cf26bb0..9b47369 100644 --- a/src/runtime/include/iec_char.hpp +++ b/src/runtime/include/iec_char.hpp @@ -12,7 +12,8 @@ #pragma once -#include +#include "iec_platform.hpp" + #include "iec_types.hpp" namespace strucpp { diff --git a/src/runtime/include/iec_date.hpp b/src/runtime/include/iec_date.hpp index 9e3024d..70a68ef 100644 --- a/src/runtime/include/iec_date.hpp +++ b/src/runtime/include/iec_date.hpp @@ -12,7 +12,8 @@ #pragma once -#include +#include "iec_platform.hpp" + #include "iec_types.hpp" namespace strucpp { diff --git a/src/runtime/include/iec_dt.hpp b/src/runtime/include/iec_dt.hpp index 199c416..76e0fb0 100644 --- a/src/runtime/include/iec_dt.hpp +++ b/src/runtime/include/iec_dt.hpp @@ -12,7 +12,8 @@ #pragma once -#include +#include "iec_platform.hpp" + #include "iec_types.hpp" #include "iec_date.hpp" #include "iec_tod.hpp" diff --git a/src/runtime/include/iec_enum.hpp b/src/runtime/include/iec_enum.hpp index c51354e..0e8a91d 100644 --- a/src/runtime/include/iec_enum.hpp +++ b/src/runtime/include/iec_enum.hpp @@ -12,7 +12,8 @@ #pragma once -#include +#include "iec_platform.hpp" + #include #include #include "iec_var.hpp" diff --git a/src/runtime/include/iec_located.hpp b/src/runtime/include/iec_located.hpp index 842d628..c194055 100644 --- a/src/runtime/include/iec_located.hpp +++ b/src/runtime/include/iec_located.hpp @@ -15,7 +15,8 @@ #pragma once -#include +#include "iec_platform.hpp" + #include namespace strucpp { diff --git a/src/runtime/include/iec_memory.hpp b/src/runtime/include/iec_memory.hpp index caea52b..907104a 100644 --- a/src/runtime/include/iec_memory.hpp +++ b/src/runtime/include/iec_memory.hpp @@ -14,8 +14,8 @@ #pragma once -#include -#include +#include "iec_platform.hpp" + #include #include "iec_ptr.hpp" diff --git a/src/runtime/include/iec_platform.hpp b/src/runtime/include/iec_platform.hpp new file mode 100644 index 0000000..9486048 --- /dev/null +++ b/src/runtime/include/iec_platform.hpp @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: GPL-3.0-or-later WITH STruCpp-runtime-exception +// Copyright (C) 2025 Autonomy / OpenPLC Project +// This file is part of the STruC++ Runtime Library and is covered by the +// STruC++ Runtime Library Exception. See COPYING.RUNTIME for details. +/** + * STruC++ Runtime - Platform Compatibility Header + * + * AVR (Arduino) toolchains don't ship C++ standard library wrappers like + * , , etc. This header provides a single compatibility + * shim that maps to the correct C headers on AVR and C++ headers elsewhere. + * + * All other runtime headers should include this instead of etc. + */ + +#pragma once + +#if defined(__AVR__) || defined(ARDUINO) + // AVR libc provides C headers only, not C++ wrappers + #include + #include + #include + #include + #include +#else + #include + #include + #include + #include + #include +#endif diff --git a/src/runtime/include/iec_pointer.hpp b/src/runtime/include/iec_pointer.hpp index 879c430..fb29ccb 100644 --- a/src/runtime/include/iec_pointer.hpp +++ b/src/runtime/include/iec_pointer.hpp @@ -45,7 +45,8 @@ #pragma once -#include +#include "iec_platform.hpp" + #include #include #include "iec_var.hpp" diff --git a/src/runtime/include/iec_ptr.hpp b/src/runtime/include/iec_ptr.hpp index f3228ad..0c78b23 100644 --- a/src/runtime/include/iec_ptr.hpp +++ b/src/runtime/include/iec_ptr.hpp @@ -21,8 +21,8 @@ #pragma once -#include -#include +#include "iec_platform.hpp" + #include namespace strucpp { diff --git a/src/runtime/include/iec_retain.hpp b/src/runtime/include/iec_retain.hpp index c8c636d..f8f98e9 100644 --- a/src/runtime/include/iec_retain.hpp +++ b/src/runtime/include/iec_retain.hpp @@ -15,8 +15,8 @@ #pragma once -#include -#include +#include "iec_platform.hpp" + namespace strucpp { diff --git a/src/runtime/include/iec_std_lib.hpp b/src/runtime/include/iec_std_lib.hpp index 7198848..64549c7 100644 --- a/src/runtime/include/iec_std_lib.hpp +++ b/src/runtime/include/iec_std_lib.hpp @@ -20,14 +20,13 @@ #pragma once +#include "iec_platform.hpp" + #include "iec_var.hpp" #include "iec_traits.hpp" #include "iec_retain.hpp" #include "iec_ptr.hpp" -#include #include -#include -#include #include namespace strucpp { diff --git a/src/runtime/include/iec_string.hpp b/src/runtime/include/iec_string.hpp index 69938cc..fb3dbe8 100644 --- a/src/runtime/include/iec_string.hpp +++ b/src/runtime/include/iec_string.hpp @@ -12,10 +12,9 @@ #pragma once -#include +#include "iec_platform.hpp" + #include -#include -#include #include #include #include "iec_types.hpp" diff --git a/src/runtime/include/iec_subrange.hpp b/src/runtime/include/iec_subrange.hpp index c784cd0..343db4e 100644 --- a/src/runtime/include/iec_subrange.hpp +++ b/src/runtime/include/iec_subrange.hpp @@ -12,7 +12,8 @@ #pragma once -#include +#include "iec_platform.hpp" + #include "iec_var.hpp" namespace strucpp { diff --git a/src/runtime/include/iec_time.hpp b/src/runtime/include/iec_time.hpp index a05ca50..5205120 100644 --- a/src/runtime/include/iec_time.hpp +++ b/src/runtime/include/iec_time.hpp @@ -12,8 +12,8 @@ #pragma once -#include -#include +#include "iec_platform.hpp" + #include "iec_types.hpp" namespace strucpp { diff --git a/src/runtime/include/iec_tod.hpp b/src/runtime/include/iec_tod.hpp index f5d6456..5e9835c 100644 --- a/src/runtime/include/iec_tod.hpp +++ b/src/runtime/include/iec_tod.hpp @@ -12,7 +12,8 @@ #pragma once -#include +#include "iec_platform.hpp" + #include "iec_types.hpp" namespace strucpp { diff --git a/src/runtime/include/iec_traits.hpp b/src/runtime/include/iec_traits.hpp index 588b338..2101350 100644 --- a/src/runtime/include/iec_traits.hpp +++ b/src/runtime/include/iec_traits.hpp @@ -12,9 +12,9 @@ #pragma once +#include "iec_platform.hpp" + #include -#include -#include #include "iec_types.hpp" namespace strucpp { diff --git a/src/runtime/include/iec_types.hpp b/src/runtime/include/iec_types.hpp index 6742652..c37a014 100644 --- a/src/runtime/include/iec_types.hpp +++ b/src/runtime/include/iec_types.hpp @@ -12,8 +12,8 @@ #pragma once -#include -#include +#include "iec_platform.hpp" + namespace strucpp { diff --git a/src/runtime/include/iec_wstring.hpp b/src/runtime/include/iec_wstring.hpp index 2af9e6c..d5ff7b0 100644 --- a/src/runtime/include/iec_wstring.hpp +++ b/src/runtime/include/iec_wstring.hpp @@ -13,8 +13,8 @@ #pragma once -#include -#include +#include "iec_platform.hpp" + #include #include "iec_types.hpp"