diff --git a/README.md b/README.md new file mode 100644 index 0000000..73ffc80 --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ + + +# Trixy + +A crate to generate a multi-language foreign function interface. + +## Features + +- Support for custom types, derived from a set of [primitive types](./src/types/mod.rs). +- Support for callbacks, thought c function pointers. +- Support for error handling, when checking a functions arguments (NULL pointer and such things). + +## Supported languages: + +- c + +## Dependencies + +Trixy only needs: + +- `clang-format` to format the generated c header files. + +## The Trixy Language + +The API to generate is specified in a Trixy file. The language of these files is an subset +of rust and should thus be easy to learn and pick up. + +A grammar file is provided [here](./docs/grammar.ebnf) encoded in [Extended Backus-Naur Form](https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form). +The grammar file is rendered as railroad diagrams in PDF [here](./docs/grammar.pdf), run [`./docs/generate_docs`](./docs/generate_docs.sh) to regenerate the PDF file. + +## Testing + +Trixy contains integration tests in the `./tests` directory. These are maintained with the +`./scripts/tests.sh` script. Take a look at it's `--help` output for further usage +information. + +Tests are (as of now) only positive, i.e. they can only test successful situations. +Failing test will probably be supported in the future. + +## Contributing + +We have a [nix flake](./flake.nix), which provides the required dependencies to work with Trixy and the associated scripts in the `./scripts` directory. + +Please also make sure to run the `./scripts/renew_copyright_header.sh` after you added a new file, to ensure that every file contains a license header.