# Mittelib *Nice C++17 goodies made in Mittelab* [](https://git.mittelab.org/proj/mittelib/-/commits/master) **Repo:** https://git.mittelab.org/proj/mittelib **Documentation:** https://proj.mittelab.dev/mittelib/ **PlatformIO lib:** https://platformio.org/lib/show/12998/mitteLib **EspressIF component:** https://components.espressif.com/components/mittelab/mittelib This library aim at providing some handy, general purpose functionalities to embedded development. The C++ STL is rich but some functionalities (e.g. `std::variant`) require features (e.g. CTTI) that are generally disabled on embedded platforms; other helper classes instead are common patterns when interoperating with C libraries. This was originally developed for ESP-IDF, in C++17, but it can be used on desktop too (functionalities have been ported). Among the added features, binary streams, enum-based variants, observer-pattern helper classes, string helpers, a simple logging facility like IDF's. ## Using the library in your project ### ESP-IDF: CLI ```shell idf.py add-dependency "mittelab/mittelib^1.0.8" ``` or in you `idf_component.yml`: ```yaml dependencies: mittelab/mittelib: "^1.0.8" ``` ### ESP-IDF: directly from the git tree In your `idf_component.yml`: ```yaml dependencies: mittelib: path: mittelib git: https://git.mittelab.org/proj/mittelib.git version: 1.0.8 # or master ``` ### ESP-IDF: as submodule This is somewhat awkward because the library is in the `mittelib` subfolder, and the root `CMakeLists.txt` is for tests and usage on desktop, and IDF expects to find a direct call to `idf_component_register` in the `CMakeLists.txt` file inside the component folder. So we have to create a "mittelib" component that includes the right files. Luckily (or intentionally) Mittelib is just a collection of cpp files, so this is easy. 1. Create a new component subfolder `components/mittelib` 2. Clone this repo in `components/mittelib/thirdparty` (you can choose another name) 3. Insert the following in `components/mittelib/CMakeLists.txt`: ```cmake file(GLOB_RECURSE SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/mittelib/*.cpp") idf_component_register( SRCS ${SOURCES} INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/mittelib/include") ``` ### Linux CMake: fetch library via CMake This uses FetchContent to download the library. In a directory `thirdparty/mittelib` (you can choose a different path), add a `CMakeLists.txt` file that contains ```cmake if (DEFINED ENV{IDF_PATH}) message(SEND_ERROR "This is not supposed to be used by ESP-IDF") endif () include(FetchContent) FetchContent_Declare( mittelib GIT_REPOSITORY https://git.mittelab.org/proj/mittelib.git GIT_TAG 1.0.8 # or master SOURCE_SUBDIR mittelib ) FetchContent_MakeAvailable(mittelib) FetchContent_GetProperties(mittelib) ``` In your project root `CMakeLists.txt`, add ```cmake cmake_minimum_required(VERSION 3.16) project(kaproto) add_subdirectory(thirdparty/mittelib) ``` ### Linux CMake: git submodule Assume you have added this repo as a submodule at `thirdparty/mittelib`. In your project root `CMakeList.txt`, add ```cmake cmake_minimum_required(VERSION 3.16) project(kaproto) add_subdirectory(thirdparty/mittelib/mittelib) ``` This is *correct*, there is one extra "mittelib" subfolder.
idf.py add-dependency "mittelab/mittelib^1.0.8"