§ 01Requirements
libevpl targets modern Linux. Other platforms are best-effort.
- OS: Linux ≥ 5.10 recommended (io_uring needs a recent kernel).
- Compiler: GCC ≥ 11 or Clang ≥ 14 — C11 with GNU extensions.
- Build system: CMake ≥ 3.20.
- Toolchain:
pkg-config,git, GNU make or Ninja.
§ 02Optional dependencies
Each acceleration backend brings its own dependency. Missing libraries simply disable that backend at configure time.
Distro install — Ubuntu / Debian
$ sudo apt install -y build-essential cmake git pkg-config \
liburing-dev libnuma-dev \
librdmacm-dev libibverbs-dev rdma-core \
libssl-dev
Distro install — RHEL / Rocky / Fedora
$ sudo dnf install -y gcc gcc-c++ cmake git pkgconfig \
liburing-devel numactl-devel \
librdmacm-devel libibverbs-devel rdma-core-devel \
openssl-devel
§ 03Get the source
$ git clone https://github.com/chimera-nas/libevpl.git $ cd libevpl $ git submodule update --init --recursive
Releases are tagged in the same repository. Until 1.0, we recommend tracking main or pinning to a specific commit you’ve tested against.
§ 04Configure & build
Out-of-tree build, Release configuration:
$ cmake -S . -B build -GNinja \ -DCMAKE_BUILD_TYPE=Release \ -DEVPL_RDMA=ON \ -DEVPL_IO_URING=ON $ cmake --build build -j [100%] Built target evpl [100%] Built target echo_stream [100%] Built target echo_message
If you only need kernel sockets, you can disable every optional backend — the build still produces a useful library.
§ 05Build options
liburing.bench/.§ 06Smoke test
Two echo servers and a self-test exercise the loop, the buffer pool, and the bind layer:
$ ./build/test/evpl_unit [ OK ] evpl.loop.create_destroy [ OK ] evpl.buffer.pool_roundtrip [ OK ] evpl.timer.periodic [ OK ] evpl.doorbell.cross_thread [ OK ] all tests passed $ ./build/examples/echo_stream --listen 0.0.0.0:9000 & $ ./build/examples/echo_stream --connect 127.0.0.1:9000 --rps 200000 echo: rtt p50=14.1µs p99=27.3µs rps=199942
Switching the backend doesn’t change the example code — pass --backend io_uring or --backend rdma to either binary, given the dependencies are present.
§ 07Install
$ sudo cmake --install build --prefix /usr/local -- Installing: /usr/local/lib/libevpl.so -- Installing: /usr/local/include/evpl/evpl.h -- Installing: /usr/local/lib/pkgconfig/evpl.pc
The install lays down a pkg-config file. Most build systems can find libevpl with no further hints.
§ 08Linking against libevpl
Minimal CMake consumer:
find_package(PkgConfig REQUIRED) pkg_check_modules(EVPL REQUIRED evpl) add_executable(myserver main.c) target_include_directories(myserver PRIVATE ${EVPL_INCLUDE_DIRS}) target_link_libraries(myserver PRIVATE ${EVPL_LIBRARIES})
Or plainly:
$ cc main.c -o myserver $(pkg-config --cflags --libs evpl)
From here, head to the API reference ↗ or read the architecture for context.