# RLIB Collection of frequently used C functions by me. It contains - An advanced benchmark system. - An alternative to printf supporting printing of time between messages for e.g. benchmarking. and colors. - Super fast tree map (much faster than hash table). - Stdout redirection. - Terminal progress bar. - Multi purpose lexer. - Custom malloc for counting allocations and free's. - Simple test library that works like assert that also checks memory if rmalloc is used and creates summary and provides exit code. - Several time functions supporting nano seconds. - Several math functions for if not available by std (on termux for example). - Arena blazing fast memory. ## Extensive tested and benchmarked All files get merged together to one file called `rlib.c` that can be used as a header file. The result is a single header framework. ![Gif of build process](build.gif) ## ENVIRONMENT VARIABLES ### Disabling color Set env RDISABLE_COLORS = 1 to disable color on stdout. stderr will still have colors for gui. ## Compiler and Flags - **`CC = gcc`**: Specifies the C compiler (GCC). - **`CFLAGS = -Wall -Wextra -Ofast`**: Compiler flags: - `-Wall`: Enable all warnings. - `-Wextra`: Enable extra warnings. - `-Ofast`: Optimize for speed. - **`LDFLAGS = -lm`**: Linker flags to link with the math library. ## Main Targets ### `all:` Runs the following steps in sequence: - Testing (`test_*` targets). - Formatting code (`format_all`). - Building the project (`build`). - Installing executables (`install`). ### `format_all:` Runs `clang-format` to format all `.c`, `.h`, and `.cpp` files in the directory. ### `build:` Builds the `rlib` shared library (`librlib.so`) and an executable `rlibso` that uses this library: - Compiles `rlib.c` into `librlib.so`. - Compiles `rlibso.c` linking it with `librlib.so`. - Runs the `rlibso` executable. ### `install:` Installs the `rmerge` and `clean` executables to `/usr/bin` using `sudo`. ## Testing Targets (`test_*`) Each `test_*` target follows these steps: ### `build_*:` Compiles a specific `.c` file into an executable in the `./build` directory. ### `run_*:` Runs the corresponding executable. Example for `rlexer`: - **`build_rlexer:`** Compiles `rlexer.c` to `./build/rlexer`. - **`run_rlexer:`** Runs `./build/rlexer`. ## Backup ### `backup:` Compresses the source files, Makefile, and additional project files into a `rlib.rzip` archive. ## Special Cases ### `test_rbench_cpp:` Builds and runs a C++ benchmark program: - Compiles `rbench.cpp` along with other necessary files. - Runs the resulting executable. ## Other Targets ### `format_rlib_c:` Specifically formats the `rlib.c` file. ### `build_*:` Targets that compile source files into executables. ### `run_*:` Targets that run the compiled executables.