From Linux/Xtensa
Jump to navigation Jump to search


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.


Build Instructions

Clone the GitHub repository and check out the xtensa branch:

git clone 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

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.

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