# Xaynet FFI
## Generate C-Header File
`ffi-support` provides some helpful macros to reduce boilerplate code.
However the feature (`--pretty=expanded`) to expand these macros
during the generation of the C-header file is still
unstable. Therefore we need to use the rust nightly.
To generate the header files, install [`cbindgen`] and run:
```
cargo build
RUSTUP_TOOLCHAIN=nightly cbindgen \
--config cbindgen.toml \
--crate xaynet-mobile \
--output xaynet_ffi.h
```
## Run tests
### macOS
```
cc -o tests/ffi_test.o -Wl,-dead_strip -I. tests/ffi_test.c ../target/debug/libxaynet_mobile.a -framework Security -framework Foundation
./tests/ffi_test.o
```
### Linux
```
gcc \
tests/ffi_test.c
-Wall \
-I. \
-lpthread -lm -ldl \
../target/debug/libxaynet_mobile.a \
-o tests/ffi_test.o
./tests/ffi_test.o
```
To check for memory leaks, you can use Valgrind:
```
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all -s ./tests/ffi_test.o
```
[`cbindgen`]: https://github.com/eqrion/cbindgen/