GitHub - ETLCPP/etl: Embedded Template Library (original) (raw)

Embedded Template Library (ETL)

GitHub release (latest by date) Release date Standard License GitHub contributors GitHub forks GitHub Repo stars

CI Build status

CI CI CI CI CI CI

CI CI CI CI CI CI

Codacy Badge

Project documentation

Motivation

C++ is a powerful language for embedded systems development, with templates offering a great deal of flexibility and type safety. While the C++ Standard Library provides a wealth of well-tested functionality, it’s often not well suited to environments with strict deterministic behavior and limited resources.

In many embedded applications, dynamic memory allocation is discouraged or outright prohibited, making standard STL containers and many other components impractical or unusable.

What’s needed is a template library specifically designed for embedded systems — one that allows developers to define fixed or maximum sizes for containers and other objects at compile time. Additionally, since many embedded toolchains still lack full support for standards beyond C++03, it's valuable to have access to a library that backports select features from later versions of the C++ Standard Library.

About the ETL

The Embedded Template Library (ETL) is not intended as a full replacement for the C++ Standard Template Library (STL), but rather as a complementary solution tailored specifically for embedded systems.

Its design goals include:

The ETL avoids dynamic memory allocation entirely; the heap is never used. All non-intrusive containers have a fixed capacity, allowing memory requirements to be fully determined at compile-time. This makes the ETL ideal for lower-resource embedded applications where predictability, performance, and memory control are essential.

The library is compatible with any compiler that supports C++03 or later.

Help on integrating the ETL with your project may be found here.

Key features of the ETL

Any help porting the library to work under different platforms and compilers would be gratefully received. I am especially interested in people who are using Keil, IAR, Green Hills, TI Code Composer etc, bare metal or RTOS, and DSPs.

See (https://www.etlcpp.com) for up-to-date information.

Installing this library

You can find the setup steps here.

CMake

One way to use this library is to drop it somewhere in your project directory and then make the library available by using add_subdirectory

add_subdirectory(etl) add_executable(foo main.cpp) target_link_libraries(foo PRIVATE etl::etl)

If ETL library is used as a Git submodule it may require additional configuration for proper ETL version resolution by allowing the lookup for Git folder outside of the library root directory.

set(GIT_DIR_LOOKUP_POLICY ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR) add_subdirectory(etl)

If you want to install this library with CMake, you can perform the following steps. On Linux, super user rights might be required to install the library, so it might be necessary to addsudo before the last command:

git clone https://github.com/ETLCPP/etl.git cd etl git checkout cmake -B build . cmake --install build/

After the library has been installed, you can usefind_package to use the library. Replace <majorVersionRequirement> with your desired major version:

find_package(etl ) add_executable(foo main.cpp) target_link_libraries(foo PRIVATE etl::etl)

Alternatively you can use FetchContent, replacing <targetVersion> with the version to install based on a git tag:

Include(FetchContent)

FetchContent_Declare( etl GIT_REPOSITORY https://github.com/ETLCPP/etl GIT_TAG )

FetchContent_MakeAvailable(etl)

add_executable(foo main.cpp) target_link_libraries(foo PRIVATE etl::etl)

Arduino library

The content of this repo is available as a library in the Arduino IDE (search for the "Embedded Template Library" in the IDE library manager). The Arduino library repository is available at https://github.com/ETLCPP/etl-arduino, see there for more details.