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
- Host: GitHub
- URL: https://github.com/lethalbit/abyss
- Owner: lethalbit
- License: bsd-3-clause
- Created: 2024-07-26T20:00:40.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-16T14:14:38.000Z (12 months ago)
- Last Synced: 2025-04-10T01:08:15.338Z (10 months ago)
- Topics: bare-metal, cpp, cpp20, embedded, standard-library
- Language: C++
- Homepage:
- Size: 299 KB
- Stars: 12
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
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.