This is an almagamation of the mulle-core, mulle-concurrent, mulle-c projects that need not be forced linked. See the constituting projects for documentation, bug reports, pull requests.
mulle-core is tested to build on the following platforms and compiler matrix:
| OS | Compiler | Flags | Note |
|---|---|---|---|
| Ubuntu | GCC | ย | |
| Ubuntu | GCC | ย | Out of source build |
| Ubuntu | GCC | -O3 | |
| Ubuntu | Clang | ย | |
| Ubuntu | Clang | Debug | |
| Windows | MSVC Win32 | ย | |
| Windows | MSVC Win64 | ย | |
| Windows | GCC | ย | |
| macOS | Clang | ย | |
| macOS | GCC | ย |
The advantages of using mulle-core over the individual projects are:
- compiles faster than two dozens of individual projects
- you only need to link against one library file
#includestatements may remain unchanged or simplify to#include <mulle-core/mulle-core.h>
| Constituent | Description |
|---|---|
| mulle-allocator | ๐ Flexible C memory allocation scheme |
| mulle-buffer | |
| mulle-c11 | ๐ Cross-platform C compiler glue (and some cpp conveniences) |
| mulle-container-debug | ๐ Debugging support for mulle-container |
| mulle-container | ๐ Arrays, hashtables and a queue |
| mulle-data | #๏ธโฃ A collection of hash functions |
| mulle-http | ๐ http URL parser |
| mulle-rbtree | ๐ซ mulle-rbtree organizes data in a red/black tree |
| mulle-regex | ๐ฃ Unicode regex library |
| mulle-slug | ๐ Creates URL slugs |
| mulle-storage | ๐ Memory management for tree nodes |
| mulle-unicode | ๐ Unicode ctype like library |
| mulle-url | ๐ท๏ธ Support for URL parsing |
| mulle-utf | ๐ค UTF8-16-32 analysis and manipulation library |
| mulle-vararg | โช Access variable arguments in struct layout fashion in C |
| mintomic | For more information, see the documentation or the accompanying blog post, Introducing Mintomic. |
| mulle-aba | ๐ฎ A lock-free, cross-platform solution to the ABA problem |
| mulle-concurrent | ๐ถ A lock- and wait-free hashtable (and an array too), written in C |
| mulle-fifo | ๐ mulle-fifo fixed sized producer/consumer FIFOs holding void * |
| mulle-linkedlist | ๐ mulle-linkedlist a wait and lock-free linked list |
| mulle-multififo | ๐ mulle-multififo multi-producer/multi-consumer FIFO holding void * |
| mulle-thread | ๐ Cross-platform thread/mutex/tss/atomic operations in C |
| dlfcn-win32 | =========== |
| mulle-dlfcn | โฟ๏ธ Shared library helper |
| mulle-fprintf | ๐ข mulle-fprintf marries mulle-sprintf to stdio.h |
| mulle-mmap | ๐ง๐ฟ Memory mapped file access |
| mulle-sprintf | ๐ข An extensible sprintf function supporting stdarg and mulle-vararg |
| mulle-stacktrace | ๐ฃ Stracktrace support for various OS |
| mulle-time | ๐ Simple time types with arithmetic on timespec and timeval |
mulle-sde dependency add --amalgamated \ --fetchoptions "clibmode=copy" \ --address src/mulle-container-debug \ clib:mulle-c/mulle-container-debugThen edit
mulle-core.hand add the envelope header to the others.
There are various methods how to get mulle-core into your project.
One common denominator is that you will
#include <mulle-core/mulle-core.h> in your sources and link
with -lmulle-core.
Use mulle-sde to add mulle-core to your project:
mulle-sde add github:mulle-core/mulle-coreThis library does not include mulle-atinit and mulle-atexit and mulle-testallocator. If you add these libraries, it is important that mulle-core is added before them.
git submodule add https://github.com/mulle-core/mulle-core.git stash/mulle-core
git submodule update --init --recursiveAdd this to your CMakeLists.txt:
add_subdirectory( stash/mulle-core)
target_link_libraries( ${PROJECT_NAME} PRIVATE mulle-core)Use mulle-sde to build and install mulle-core and all dependencies:
mulle-sde install --prefix /usr/local \
https://github.com/mulle-core/mulle-core/archive/latest.tar.gzDownload the latest tar or zip archive and unpack it.
Install mulle-core into /usr/local with cmake:
PREFIX_DIR="/usr/local"
cmake -B build \
-DMULLE_SDK_PATH="${PREFIX_DIR}" \
-DCMAKE_INSTALL_PREFIX="${PREFIX_DIR}" \
-DCMAKE_PREFIX_PATH="${PREFIX_DIR}" \
-DCMAKE_BUILD_TYPE=Release &&
cmake --build build --config Release &&
cmake --install build --config ReleaseNat! for Mulle kybernetiK