8000 GitHub - lethalbit/abyss: Deeply Embeddable bare-metal C++ standard library
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

lethalbit/abyss

Repository files navigation

Abyss - Deeply Embeddable bare-metal C++ standard library

Caution

This is a very young, and very experimental, don't rely on it for anything of importance or that's critical in nature.

Abyss is C++ standard library targeting embedded bare-metal applications. As such, it is not fully standards compliant due to missing a large chunk of runtime functionality. However, much effort has been made to try to make it as complete as possible.

There are also some non-standards compliant enhancements, such as making things [[nodiscard]] where they really should be, but were not done so by the standard.

Documentation / Building

Warning

There is currently little to no documentation for Abyss, that will change soon once implementation is further along.

Runtime/ABI Support

Not everything in the C++ standard library can be done without some runtime or ABI support, due to this Abyss is segmented into the fully standalone/freestanding environment and then has several levels of feature flags depending on what is needed. They are as follows:

  • runtime_components - Only the most basic runtime stubs and implementation.
  • threading_support - Thread stubs and support.
  • rtti_support - Run-Time Type Identification support
  • exception_support - Support for exceptions
  • virtual_support - Support for virtual classes / dynamic_cast etc

When enabled, these will build static libraries for the target platform that contain the runtime components requested, however, due to not being able to implement closer to the metal features for unknown platforms, there will be a collection of needed stubs to be implemented in the freestanding environment to satisfy them.

Caution

The abyss ABI, while mostly compliant with the Itanium C++ ABI we do not guarantee ABI stability to the extent of libstdc++ or libc++ would Nor are we ABI compatible with said C++ libraries, therefore intermixing code linked with libstdc++, libc++, or other versions of Abyss is highly advised against.

Supported Compilers

Important

Due to the nature of the library, there is only a single version of the C++ standard that has been targeted, that being C++20, however some portions of C++23 have been backported where possible, as such a compiler with core language support for at lest C++20 is required.

Compiler G++ Clang++
Version 12 13 14 16 17 18
Supported ✔️ ✔️ ✔️ ✔️ ✔️

Implementation Status

Abyss is still a very young library, so not much is implemented yet, and everything might not be.

Concepts Library Dynamic Memory Localization Library
concepts 🛠️ memory 🛠️ clocale 🛠️
Coroutine Library memory_resource 🛠️ codecvt 🛠️
coroutine 🛠️ new 🛠️ locale 🛠️
Utility Library scoped_allocator 🛠️ I/O Library
any 🛠️ Numeric cstdio 🛠️
bitset 🛠️ cfloat fstream 🛠️
chrono 🛠️ cinttypes 🛠️ iomanip 🛠️
compare 🛠️ climits ios 🛠️
csetjump cstdint iosfwd 🛠️
csignal limits iostream 🛠️
cstdarg 🛠️ Error istream 🛠️
cstddef cassert 🛠️ ostream 🛠️
cstdlib 🛠️ cerrno 🛠️ print 🛠️
ctime 🛠️ exception 🛠️ sstream 🛠️
expected 🛠️ stdexcept 🛠️ streambuf 🛠️
functional 🛠️ system_error 🛠️ strstream 🛠️
initializer_list 🛠️ String Library syncstream 🛠️
optional 🛠️ cctype 🛠️ Filesystem Library
source_location charconv 🛠️ filesystem
tuple 🛠️ cstring 🛠️ Regex Library
type_traits 🚧 cuchar 🛠️ regex
typeindex 🛠️ cwctype 🛠️ Atomic Library
typeinfo 🛠️ format 🛠️ atomic 🛠️
variant 🛠️ string 🛠️ Thread Library
version 🚧 string_view 🛠️ thread 🛠️
Container Library Iterator Library stop_token 🛠️
array 🛠️ iterator 🛠️ shared_mutex 🛠️
deque 🛠️ Ranges Library semaphore 🛠️
flat_map 🛠️ ranges 🛠️ mutex 🛠️
flat_set 🛠️ Algorithm Library latch 🛠️
forward_list 🛠️ algorithm 🛠️ future 🛠️
list 🛠️ execution 🛠️ condition_variable 🛠️
map 🛠️ Numerics Library barrier 🛠️
mdspan 🛠️ bit
queue 🛠️ cfenv 🛠️
set 🛠️ cmath 🛠️
span 🛠️ complex 🛠️
stack 🛠️ numbers 🛠️
unordered_map 🛠️ numeric 🛠️
unordered_set 🛠️ random 🛠️
vector 🛠️ ratio 🛠️
valarray 🛠️

Icon Key

Each header has two sections in it, the first is the status of that header, and the second are any note references that detail conditions or other important details.

The key for the first section is as follows:

  • 🚧 - In progress
  • ✅ - Completed
  • 🛠️ - Planned, not started
  • ❌ - Not-planned

License

Abyss is licensed under the BSD-3-Clause, the full text of which can be found in the LICENSE file.

0