Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gyrovorbis/libgimbal
C17-based extended standard library, cross-language type system, and unit testing framework targeting Sega Dreamcast, Sony PSP and PSVita, Windows, Mac, Linux, Android, iOS, and WebAssembly.
https://github.com/gyrovorbis/libgimbal
algorithms allocators c containers core dreamcast language-interoperability object-oriented-c psp psp-sdk psvita psvita-homebrew standard-library stl-c stl-containers type-system unit-testing utility-library
Last synced: 3 months ago
JSON representation
C17-based extended standard library, cross-language type system, and unit testing framework targeting Sega Dreamcast, Sony PSP and PSVita, Windows, Mac, Linux, Android, iOS, and WebAssembly.
- Host: GitHub
- URL: https://github.com/gyrovorbis/libgimbal
- Owner: gyrovorbis
- License: mit
- Created: 2023-01-26T04:59:27.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-10-21T11:02:40.000Z (3 months ago)
- Last Synced: 2024-10-21T16:02:59.073Z (3 months ago)
- Topics: algorithms, allocators, c, containers, core, dreamcast, language-interoperability, object-oriented-c, psp, psp-sdk, psvita, psvita-homebrew, standard-library, stl-c, stl-containers, type-system, unit-testing, utility-library
- Language: C
- Homepage: http://libgimbal.elysianshadows.com
- Size: 3.38 MB
- Stars: 75
- Watchers: 10
- Forks: 4
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-dreamcast - libGimbal - Extended standard library, unit test framework, and core app utilities for DC and more (Frameworks)
README
libGimbal
C17-Based Extended Standard Library and Object-Oriented Type System
Explore the docs »
Cross-Platform
·
Cross-Language
·
High Performance
# Overview #
libGimbal aims to bring the high-level constructs and niceties of modern languages and their standard libraries to low-level C and C++, where they can be implemented with a focus on performance for embedded devices and game consoles. libGimbal includes features typically found in core application frameworks such as Foundation, QtCore, or GLib, or in languages such as C# or Java. At its core, libGimbal utilizes an object-oriented dynamic type system, which allows C to transcend its own language limitations and provides a flexible avenue for interoperability with other languages. An idiomatic modern C++20-based API built around the core is also currently under development.# Features #
libGimbal is split into a series of APIs, featuring:
- Containers and Data Structures
- Generic Algorithms
- Custom Allocators
- Specialized Strings
- Standard Library Utilities
- Preprocessor Programming
- Dynamic Type System
- Threading and Concurrency
- Unit Test Framework# Platforms #
libGimbal is being actively tested in CI on the following targets:
- Windows
- MacOS
- Linux
- Sega Dreamcast
- Sony PSP
- Sony PSVita
- WebAssembly
- iOS
- Android# Compilers #
libGimbal is being built in CI with the following compilers:
- Microsoft Visual Studio
- GCC
- Clang
- MinGW-w64
- Emscripten# Building #
Building is done with standard CMake, and all generators and mainstream compilers should be supported. You should be able to open CMakeLists.txt directly as a project file in most IDEs such as MSVC, XCode, Qt Creator, CLion, etc if you wish to build from a UI.First, ensure submodules are installed with:
```
git submodule update --init --recursive
```To build the project and its unit tests from the command-line, you can do the following:
```
mkdir build
cd build
cmake -DGBL_ENABLE_TESTS=ON ..
cmake --build .
```To build for Emscripten:
```
mkdir build
cd build
emcmake cmake -DGBL_ENABLE_TESTS=ON ..
cmake --build .
```# Bindings #
LibGimbal was specifically written with language interoperability in mind. As such, we will be happy to support and feature bindings to your favorite language. The following is a list of libraries which offer bindings between libGimbal and other languages:|Library | Language | Status |
|-------------------------------------------------------------------------------------------|-----------|------------------------------------------------------|
|Jimbal |Jai |Complete support for the C API|
|Gimbalsaurus |Objective-C|Just getting off the ground |
|libGimbal |C++ |First-party within source-tree. Just starting, WIP. |# APIs #
The following is a closer look at the contents of each API:
## Core Framework ##
- platform-specific macros and utilities
- error and exception handling
- debug and verification utilities
- structured logging with filtering
- object-oriented threading and concurrency model## Strings ##
- specialized, optimized custom string types
- interned strings
- reference-counted strings
- string builders
- implicitly shared string lists
- pattern matching, regular expressions## Containers ##
- STL-style abstract data types with both C and C++ APIs
- dynamic arrays, lists, ring buffers
- sets, trees, hash tables, byte arrays
- support for custom allocators## Algorithms ##
- hashing algorithms (Murmur, Sip, Fnv1, SuperFast, Jenkins, etc)
- sorting algorithms, searching algorithms
- random data generators and utilities
- CRC, parity, LCM, GCD, prime numbers
- SHA1 and MD5 (semi)cryptographic hashing## Allocators ##
- allocation trackers with leak detection
- paged arena allocators with state rewinding
- stack-based scope allocator with destructor chains
- efficient pool-based, arena-backed allocator## Preprocessor ##
- function overloading support for C
- macro compositon, variadic argument handling
- cross-language C/C++ generic selection
- meta macro programming constructs## Meta Type System ##
- cross-language, extensible object-oriented type system
- generic, polymorphic variant types with type conversions
- virtual functions, inheritance, private members for C
- mixins, interfaces, abstract classes
- generic FFI with cross-language closures and marshals
- property system
- Qt/GTk style signal system
- object hierarchy management, parenting, traversals
- event handling, filtering, propagation
- plugin and module system## Utilities ##
- generic reference-counted types
- command-line option and argument parsing
- version, UUID, date-time utilities
- user-settings management## Unit Testing Framework ##
- cross-platform object-oriented C-based unit test framework
- test scenarios, suites, cases
- generic verification macros with source context capture
- automatic timing and performance measurements
- memory utilization and leak detection
- dynamic/run-time test-plan construction and management# Credits #
## Author ##
Falco Girgis ([email protected])
## Dependencies ##
- GblHashSet and GblTreeSet original back-ends: Josh Baker (tidwall)
- https://github.com/tidwall/hashmap.c
- https://github.com/tidwall/btree.c
- GblThread TinyCThreads back-end: Marcus Geelnard, Evan Nemerson
- https://tinycthread.github.io/
- gblHashSip(..): Jean-Philippe Amasson, Daniel J. Bernstein
- http://creativecommons.org/publicdomain/zero/1.0/
- gblHashMurmur(..): Austin Appleby
- https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp
- GblDateTime_parse(..) strptime back-end: Based on musl C stdlib Implementation
- https://git.musl-libc.org/cgit/musl/tree/src/time/strptime.c
- GblPattern matching engine back-end: tiny-regex-c
- https://github.com/kokke/tiny-regex-c
- GblSha1 SHA1 hashing back-end: Steve Reid (Public Domain)
- https://github.com/clibs/sha1/blob/master/sha1.h
- GblMd5 MD5 hashing back-end: RSA Data Security, Inc.
- https://opensource.apple.com/source/ppp/ppp-37/ppp/pppd/md5.c.auto.html
- gblRandom LRG generator and statistical distributions: Steve Park, Keith Miller
- https://www.cs.wm.edu/~va/software/park/park.html