WIP raylib bindings for owl lisp

api.md imported (and tweaked a bit) from janet-lang/jaylib, it is probably a bit outdated.



Owl lisp supports C extensions via custom sys-prims - basically syscalls, but to C functions, not the system. You define a word prim_custom(int op, word a, word b, word c) in a C file, then call (sys-prim op a b c) from the lisp side, and then compile and link them together.

bootstraping ol-rl

ol-rl is the same thing as ol, but with compiled-in support for raylib sys-prims, so it will be then used to interpret and/or compile Owl lisp programs that depend on raylib.

$ make ol-rl
# make install

compiling stuff

$ ol-rl -o test.c test.scm
$ cc test.c -lraylib -lm -o test
$ ./test


If you're on windows, you can download the pre-compiled ol-rl.exe binary here. If running it as a REPL, remember to use --no-readline.

targetting web with emscripten

$ git clone https://github.com/raysan5/raylib
$ cd raylib/src
$ make clean all PLATFORM=PLATFORM_WEB
$ ol-rl -o test.c test.scm
$ emcc -DPLATFORM_WEB -I/usr/local/include test.c /path/to/libraylib-web.a -o test.html -s USE_GLFW=3 -s ERROR_ON_UNDEFINED_SYMBOLS=0 -s ALLOW_MEMORY_GROWTH=1 -s ASYNCIFY -s ASSERTIONS=0

gotchas and caveats


./raylib.scm: (raylib)

##false Exported values:

./raylib/common.scm: (raylib common)

##false Exported values:

./raylib/window.scm: (raylib window)

##false Exported values:

./raylib/util.scm: (raylib util)

##false Exported values:

./raylib/raymath.scm: (raylib raymath)

##false Exported values:

./raylib/const.scm: (raylib const)

##false Exported values:

./raylib/audio.scm: (raylib audio)

##false Exported values:

./raylib/io.scm: (raylib io)

##false Exported values:

./raylib/draw.scm: (raylib draw)

##false Exported values: