NagyZoltanPeter 3603b838b9
feat: liblogosdelivery FFI library of new API (#3714)
* Initial for liblogosdelivery library (static & dynamic) based on current state of API. 
* nix build support added.
* logosdelivery_example
* Added support for missing logLevel/logFormat in new API create_node
* Added full JSON to NodeConfig support
* Added ctx and ctx.myLib check to avoid uninitialzed calls and crash. Adjusted logosdelivery_example with proper error handling and JSON config format
* target aware install phase
* Fix base64 decode of payload
2026-02-17 10:38:35 +01:00

2.6 KiB

Building liblogosdelivery and Examples

Prerequisites

  • Nim 2.x compiler
  • Rust toolchain (for RLN dependencies)
  • GCC or Clang compiler
  • Make

Building the Library

Dynamic Library

make liblogosdelivery

This creates build/liblogosdelivery.dylib (macOS) or build/liblogosdelivery.so (Linux).

Static Library

nim liblogosdelivery STATIC=1

This creates build/liblogosdelivery.a.

Building Examples

liblogosdelivery Example

Compile the C example that demonstrates all library features:

# Using Make (recommended)
make liblogosdelivery_example

## Running Examples

```bash
./build/liblogosdelivery_example

The example will:

  1. Create a Logos Messaging node
  2. Register event callbacks for message events
  3. Start the node
  4. Subscribe to a content topic
  5. Send a message
  6. Show message delivery events (sent, propagated, or error)
  7. Unsubscribe and cleanup

Build Artifacts

After building, you'll have:

build/
├── liblogosdelivery.dylib        # Dynamic library (34MB)
├── liblogosdelivery.dylib.dSYM/  # Debug symbols
└── liblogosdelivery_example      # Compiled example (34KB)

Library Headers

The main header file is:

  • liblogosdelivery/liblogosdelivery.h - C API declarations

Troubleshooting

Library not found at runtime

If you get "library not found" errors when running the example:

macOS:

export DYLD_LIBRARY_PATH=/path/to/build:$DYLD_LIBRARY_PATH
./build/liblogosdelivery_example

Linux:

export LD_LIBRARY_PATH=/path/to/build:$LD_LIBRARY_PATH
./build/liblogosdelivery_example

Cross-Compilation

For cross-compilation, you need to:

  1. Build the Nim library for the target platform
  2. Use the appropriate cross-compiler
  3. Link against the target platform's liblogosdelivery

Example for Linux from macOS:

# Build library for Linux (requires Docker or cross-compilation setup)
# Then compile with cross-compiler

Integration with Your Project

CMake

find_library(LMAPI_LIBRARY NAMES lmapi PATHS ${PROJECT_SOURCE_DIR}/build)
include_directories(${PROJECT_SOURCE_DIR}/liblogosdelivery)
target_link_libraries(your_target ${LMAPI_LIBRARY})

Makefile

CFLAGS += -I/path/to/liblogosdelivery
LDFLAGS += -L/path/to/build -llmapi -Wl,-rpath,/path/to/build

your_program: your_program.c
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)

API Documentation

See: