dyncall - A Generic Dynamic FFI package
=======================================

The dyncall software distribution comprises a low-level toolkit for
the implementation of Foreign Function Interfaces.
It comprises abstractions to the Application Binary Interface of a
number of hard- and software platforms.

The software package comprises three C libraries, namely:

 - Library dyncall for making function calls,
 - Library dyncallback or writing generic callback handlers, and
 - Library dynload for loading code.

The dyncall library provides a portable interface for calling 
C functions from within dynamic execution environments, such as
interpreters or application servers. 
The dyncallback library allows to implement a callback handler in C
for handling arbitrary C callbacks from within dynamic execution environments.
The dynload library provides a thin abstraction layer for loading of code
and also allows to enumerate the contents of shared librarys or DLLs.

Typical applications for dyncall are FFI (foreign function interface) packages
for scripting languages to connect with the C/C++ world.

The binary footprint of the whole package is approx. 20 kb.


Building the library
--------------------

Prequisites: 
 - C compiler such as gcc,clang,sunpro or msvc.
 - Assembler such as gas (GNU/apple), fbe or masm.
 
Supported Architectures and ABIs:
---------------------------------
 - x86     32/64-bit (cdecl, fastcall, stdcall, C++ this calls, Syscalls)
 - ARM     AArch32   (ARM/Thumb mode, v4t-v7, oabi/eabi, soft/hardfloat ABIs)
 - MIPS    32/64-bit (o32, n64, eabi)
 - PowerPC 32-bit    (Mac OS X, System V)
 - Sparc   32/64-bit (v7/8 and v9)

Supported Operating Systems:
----------------------------
 - Android
 - *BSD
 - Haiku
 - iOS
 - Linux
 - Mac OS X
 - Microsoft Windows
 - Minix
 - Nintendo DS Homebrew
 - Plan9 / 9front
 - Playstation Portable Homebrew
 - ReactOS
 - Solaris

Building the library
--------------------
Using `homebrewed' configure shell script and GNU/BSD/Sun make system.

$ ./configure
$ make
$ make install

Testing:

$ make tests
$ make run-tests

Out-of-source building:
----------------------

$ cd <build_dir>
$ <src_dir>/configure --prefix=<install_dir>
$ make
$ sudo make install


Building using CMake
--------------------

$ cmake 
$ make
$ sudo make install


Please refer to http://www.dyncall.org, dyncall(3), the dyncall manual and
platform-specific READMEs under doc/ for more information.

