Compile and install FFADO from source

We assume that you have successfully downloaded the FFADO source code, and made sure all the build dependencies are in place.

The first thing you should do is change into the FFADO source directory and read the README file.

If your system already contains a pre-installed FFADO package, you should read about avoiding multiple parallel installations before proceeding.

Quick run-through for the impatient

The actual compilation is strikingly simple:

$ cd /where/you/keep/libffado
$ scons

This will start the build process. Sometimes, scons displays scary-looking error messages. You can usually ignore these.

Afterwards, you need to install FFADO. This requires root privileges. If you have sudo configured for your user, just do

$ sudo scons install

If not,

$ su -c "scons install"

will work.

Now your FFADO is ready to be used.

Warning

FFADO changed its version numbers with the 2.0.0 release. Before the ffado-library was installed as libffado.so(.1(.X)), this is also used by distributions jackd. Now its libffado.so.2(.X), until distributions pick this up, there are only two solutions:

  1. Install jack yourself, preferably overwriting the systems installation.
  2. Remove the libffado.so* files from the installed version and replace them by links to libffado.so.2. This works as the application binary interface (abi) of the lib hasn't changed (yet).

Customized builds

scons has a number of compile-time options that you can use to tweak your build process. Here is a list of the available options as of revision r1372:

$ scons -h
...
BUILDDIR: Path to place the built files in
    default:
    actual:

DEBUG: Toggle debug-build. DEBUG means "-g -Wall" and more, otherwise we will use
  "-O2" to optimise. (yes|no)
    default: True
    actual: True

PROFILE: Build with symbols and other profiling info (yes|no)
    default: False
    actual: False

PREFIX: The prefix where ffado will be installed to. ( /path/to/PREFIX )
    default: /usr/local
    actual: /usr/local

BINDIR: Overwrite the directory where apps are installed to. ( /path/to/BINDIR )
    default: $PREFIX/bin
    actual: /usr/local/bin

LIBDIR: Overwrite the directory where libs are installed to. ( /path/to/LIBDIR )
    default: $PREFIX/lib
    actual: /usr/local/lib

INCLUDEDIR: Overwrite the directory where headers are installed to. ( /path/to/INCLUDEDIR )
    default: $PREFIX/include
    actual: /usr/local/include

SHAREDIR: Overwrite the directory where misc shared files are installed to. ( /path/to/SHAREDIR )
    default: $PREFIX/share/libffado
    actual: /usr/local/share/libffado

ENABLE_BEBOB: Enable/Disable the bebob part. (yes|no)
    default: True
    actual: True

ENABLE_FIREWORKS: Enable/Disable the ECHO Audio FireWorks AV/C part. (yes|no)
    default: True
    actual: True

ENABLE_MOTU: Enable/Disable the MOTU part. (yes|no)
    default: True
    actual: True

ENABLE_DICE: Enable/Disable the DICE part. (yes|no)
    default: False
    actual: False

ENABLE_METRIC_HALO: Enable/Disable the Metric Halo part. (yes|no)
    default: False
    actual: False

ENABLE_RME: Enable/Disable the RME part. (yes|no)
    default: False
    actual: False

ENABLE_GENERICAVC: Enable/Disable the the generic avc part (mainly used by apple).
  Note that disabling this option might be overwritten by other devices needing
  this code. (yes|no)
    default: False
    actual: False

ENABLE_ALL: Enable/Disable support for all devices. (yes|no)
    default: False
    actual: False

SERIALIZE_USE_EXPAT: Use libexpat for XML serialization. (yes|no)
    default: False
    actual: False

BUILD_TESTS: Build the tests in their directory. As some contain quite some functionality,
  this is on by default.
  If you just want to use ffado with jack without the tools, you can disable this. (yes|no)
    default: True
    actual: True

BUILD_STATIC_TOOLS: Build a statically linked version of the FFADO tools. (yes|no)
    default: False
    actual: False

DIST_TARGET: Build target for cross compiling packagers (auto|i386|i686|x86_64|powerpc|powerpc64|none)
    default: auto
    actual: auto

ENABLE_OPTIMIZATIONS: Enable optimizations and the use of processor specific extentions (MMX/SSE/...). (yes|no)
    default: False
    actual: False

You can set options by adding them to the scons command line. For example:

$ scons ENABLE_OPTIMIZATIONS=True PREFIX=/usr ENABLE_METRIC_HALO=True

Note that you only need to specify the options once, scons saves them for further runs.

Tuning FFADO for production

For production systems, it may be advisable to turn on optimization and to turn off debugging. But: the FFADO developers will not be able to help you if you compile without the debugging feature. So if you do run into problems, you will have to recompile with debugging enabled, reproduce your issue and then contact the developers with the full debugging output available.