LibFFI is a library that provides an interface to execute low-level functions. It is mostly used by scripting or higher-level languages, such as Python, Dalvik, etc.
- Status: Integrated
- Project Website: http://sourceware.org/libffi/
- Project Repository (web): https://github.com/atgreen/libffi
- Project Repository (git): git clone git://github.com/atgreen/libffi.git
- Development Repository (web): https://github.com/czankel/xtensa-ffi
- Development Repository (git): git://github.com/czankel/xtensa-ffi.git
- Cross toolchain, for example the one created by buildroot. See Buildroot Build Instructions for further details.
Clone the GitHub repository and check out the xtensa branch:
git clone git://github.com/czankel/xtensa-ffi.git cd xtensa-ffi git checkout xtensa
Configure and build the library. Make sure that the compiler is in the 'PATH'
export PATH=$PATH:<path-to-xtensa-linux-gcc> ./configure --host=xtensa-linux make
The resulting libraries are in the .libs directory.
LibFFI comes with an extensive test-suite based on Dejagnu.
Using dejagnu via telnet/ftp
The following instructions are intended to run LibFFI's testsuite on a board running Linux. The distribution running on that board needs to be configured to include support for an ftp and telnet daemon, and these services should be running.
Although the preferred method to use dejagnu is over ssh, it might be necessary to use telnet and ftp, instead, if ssh is not supported or to slow on the particular target. Unfortunately, Dejagnu doesn't fully support telnet/ftp as a remote target out of the box, so it is necessary to patch the telnet.exp file.
The telnet.exp file can usually be found under /usr/share/dejagnu/telnet.exp. http://linux-xtensa.org/pub/patches/dejagnu/dejagnu-telnet.patch.gz
cd /usr/share/dejagnu cp telnet.exp telnet.exp.orig gunzip -c <path-to>/dejagnu-telnet.patch.gz | patch -p0
The next step is to create a board interface file for the target. In this example, we use the name 'lx60', but it can be any name.
load_generic_config "unix"; set_board_info hostname "lx60" set_board_info compiler "<path-to-compiler>/xtensa-linux-gcc" set_board_info connect "telnet" set_board_info file_transfer "ftp" set_board_info shell_prompt "\\$ " set_board_info protocol "telnet" set_board_info telnet_username "test" set_board_info telnet_password "test" set_board_info ftp_username "test" set_board_info ftp_password "test"
Before we can run teh testsuite, we need to tell it what board to use. Create the file site.exp under <path-to-libffi>/testsuite/site.exp with the following content:
lappend boards_dir "<directory-that-includes-lx60.exp>"
Finally, you can run the testsuite:
export RUNTESTFLAGS="--target_board=lx60" make check