An open API service indexing awesome lists of open source software.

https://github.com/lethalbit/abyss

Deeply Embeddable bare-metal C++ standard library
https://github.com/lethalbit/abyss

bare-metal cpp cpp20 embedded standard-library

Last synced: 10 months ago
JSON representation

Deeply Embeddable bare-metal C++ standard library

Awesome Lists containing this project

README

          

# 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](https://itanium-cxx-abi.github.io/cxx-abi/abi.html) we do not guarantee ABI stability to the extent of
> [libstdc++](https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html) or [libc++](https://libcxx.llvm.org/) 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](https://wg21.link/std20), however some portions
> of [C++23](https://wg21.link/std23) 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
:heavy_check_mark:
:heavy_check_mark:
:heavy_check_mark:
:x:
:heavy_check_mark:
:heavy_check_mark:

### 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
:hammer_and_wrench:

memory
:hammer_and_wrench:

clocale
:hammer_and_wrench:



Coroutine Library
memory_resource
:hammer_and_wrench:

codecvt
:hammer_and_wrench:



coroutine
:hammer_and_wrench:

new
:hammer_and_wrench:

locale
:hammer_and_wrench:



Utility Library
scoped_allocator
:hammer_and_wrench:

I/O Library


any
:hammer_and_wrench:

Numeric
cstdio
:hammer_and_wrench:



bitset
:hammer_and_wrench:

cfloat
:white_check_mark:

fstream
:hammer_and_wrench:



chrono
:hammer_and_wrench:

cinttypes
:hammer_and_wrench:

iomanip
:hammer_and_wrench:



compare
:hammer_and_wrench:

climits
:white_check_mark:

ios
:hammer_and_wrench:



csetjump
:x:

cstdint
:white_check_mark:

iosfwd
:hammer_and_wrench:



csignal
:x:

limits
:white_check_mark:

iostream
:hammer_and_wrench:



cstdarg
:hammer_and_wrench:

Error
istream
:hammer_and_wrench:



cstddef
:white_check_mark:

cassert
:hammer_and_wrench:

ostream
:hammer_and_wrench:



cstdlib
:hammer_and_wrench:

cerrno
:hammer_and_wrench:

print
:hammer_and_wrench:



ctime
:hammer_and_wrench:

exception
:hammer_and_wrench:

sstream
:hammer_and_wrench:



expected
:hammer_and_wrench:

stdexcept
:hammer_and_wrench:

streambuf
:hammer_and_wrench:



functional
:hammer_and_wrench:

system_error
:hammer_and_wrench:

strstream
:hammer_and_wrench:



initializer_list
:hammer_and_wrench:

String Library
syncstream
:hammer_and_wrench:



optional
:hammer_and_wrench:

cctype
:hammer_and_wrench:

Filesystem Library


source_location
:white_check_mark:

charconv
:hammer_and_wrench:

filesystem
:x:



tuple
:hammer_and_wrench:

cstring
:hammer_and_wrench:

Regex Library


type_traits
:construction:

cuchar
:hammer_and_wrench:

regex
:x:



typeindex
:hammer_and_wrench:

cwctype
:hammer_and_wrench:

Atomic Library


typeinfo
:hammer_and_wrench:

format
:hammer_and_wrench:

atomic
:hammer_and_wrench:



variant
:hammer_and_wrench:

string
:hammer_and_wrench:

Thread Library


version
:construction:

string_view
:hammer_and_wrench:

thread
:hammer_and_wrench:



Container Library
Iterator Library
stop_token
:hammer_and_wrench:



array
:hammer_and_wrench:

iterator
:hammer_and_wrench:

shared_mutex
:hammer_and_wrench:



deque
:hammer_and_wrench:

Ranges Library
semaphore
:hammer_and_wrench:



flat_map
:hammer_and_wrench:

ranges
:hammer_and_wrench:

mutex
:hammer_and_wrench:



flat_set
:hammer_and_wrench:

Algorithm Library
latch
:hammer_and_wrench:



forward_list
:hammer_and_wrench:

algorithm
:hammer_and_wrench:

future
:hammer_and_wrench:



list
:hammer_and_wrench:

execution
:hammer_and_wrench:

condition_variable
:hammer_and_wrench:



map
:hammer_and_wrench:

Numerics Library
barrier
:hammer_and_wrench:



mdspan
:hammer_and_wrench:

bit
:white_check_mark:






queue
:hammer_and_wrench:

cfenv
:hammer_and_wrench:






set
:hammer_and_wrench:

cmath
:hammer_and_wrench:






span
:hammer_and_wrench:

complex
:hammer_and_wrench:






stack
:hammer_and_wrench:

numbers
:hammer_and_wrench:






unordered_map
:hammer_and_wrench:

numeric
:hammer_and_wrench:






unordered_set
:hammer_and_wrench:

random
:hammer_and_wrench:






vector
:hammer_and_wrench:

ratio
:hammer_and_wrench:









valarray
:hammer_and_wrench:





#### 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:

* :construction: - In progress
* :white_check_mark: - Completed
* :hammer_and_wrench: - Planned, not started
* :x: - Not-planned

## License

Abyss is licensed under the [BSD-3-Clause](https://spdx.org/licenses/BSD-3-Clause.html), the full text of which can be found in the [LICENSE](LICENSE) file.