Using SWIG
SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages. Soufflé uses SWIG as a programming interface such that other languages can interface it. This enables a program written in other languages to read in the Datalog input file through the wrapper files and output the corresponding CSV files. These wrapper files are generated through first generating the C++ file for the Datalog file and then compiling it using SWIG. Swig Interface currently supports Java and Python.
To use the SWIG feature, it must be enabled through configuring Soufflé with the following:
cmake -DSOUFFLE_SWIG_PYTHON=ON
for Python bindings, and cmake -DSOUFFLE_SWIG_JAVA=ON
for Java bindings.
SWIG Command Line Option in Soufflé
To run the SWIG command line option in Soufflé, run:
./souffle -s <language> <.dl file>
Currently, the languages supported are Java and Python. The language given must be all lowercase.
Running Soufflé in Other Languages
Once the wrapper files have been generated, to use them in your program, you need to import the SwigInterface. Then you may run your program to generate the CSV files.
Running it in Java
To use the interface in your Java program, add
System.loadLibrary("SwigInterface")
MAC users may need to add this instead
System.load(System.getProperty("java.library.path")+ "/" + "libSwigInterface.so")
You are now able to use the SwigInterface to create an instance of the input file to be loaded and run.
SWIGSouffleProgram p = SwigInterface.newInstance("<name of .dl file without extension>")
p.loadAll(".");
p.run();
p.printAll(".");
p.finalize();
Compile your program and run it with the -D option to specify the directory of your SwigInterface
java -Djava.library.path=<path of SwigInterface> <.java>
Running it in Python
To use the interface in your Python program, add at the top of the file
import SwigInterface
You are now able to use the SwigInterface to create an instance of the input file to be loaded and run.
p = SwigInterface.newInstance("<name of .dl file without extension>")
p.loadAll('.')
p.run()
p.printAll('.')
Run your program to see the outputted CSV files.
## Supported functions
newInstance("<name of .dl file without extension>")
: creates a new instance from a Datalog file
loadAll("<input directory>")
: loads all input relations
run()
: executes the Datalog program
printAll("<output directory>")
: prints all output relations
dumpInputs()
: prints the input relations to standard output
dumpOutputs()
: prints the output relations to standard output