Build SOF with Docker

This guide will show you how to use a Docker image containing the Sound Open Firmware build environment.

Note

The example uses $SOF_WORKSPACE as the working directory.

Set up the workspace directory

SOF_WORKSPACE=~/work/sof
mkdir "$SOF_WORKSPACE"

Clone the sof repo.

cd "$SOF_WORKSPACE"
git clone --recurse-submodules https://github.com/thesofproject/sof.git

Set up Docker

Docker is a popular container management framework. To install on Ubuntu, visit Get Docker CE for Ubuntu.

Installation instructions for other Linux distributions: About Docker CE.

Set Proxy

Docker must be configured if used behind a proxy. Visit HTTP/HTTPS proxy for the guide.

Set user group

To use Docker without sudo follow these post-install steps. Post-installation steps for Linux

Get Docker image

To easily build SOF binaries, we need a Docker image containing all of the cross-compiler and build environment dependencies. We can either build a Docker image from a DockerFile or pull an image binary from Docker Hub.

Note

Building the container from DockerFile will take more than 2 hours, so we recommend using the pre-built image.

Pull Docker image

Pull the docker image from Docker Hub.

docker pull thesofproject/sof

Note

Since there is not yet an offical Sound Open Firmware presence on Dockerhub, the image is hosted in a personal Docker Hub repo until the official image can go live.

Retag the image with sof for scripts.

docker tag thesofproject/sof sof

Build Docker image

Run the Docker build from the sof repo.

cd "${SOF_WORKSPACE}"/sof/scripts/docker_build/sof_qemu
./docker-build.sh
cd "${SOF_WORKSPACE}"/sof/scripts/docker_build/sof_builder
./docker-build.sh

After building the Docker image you will see:

docker images
#REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
#sof                    latest              c8b0e8913fcb        2 days ago          1.46 GB

Build with Docker

Build firmware binaries

Build with scripts

Build the SOF binaries:

cd "${SOF_WORKSPACE}"/sof/
./scripts/docker-run.sh ./scripts/xtensa-build-all.sh

Note

./scripts/docker-run.sh will mount the sof and directories into Docker container and build them inside the container. The build result can be accessed outside the container after the build.

Build one or more platform binaries.

cd "${SOF_WORKSPACE}"/sof/
# Baytrail
./scripts/docker-run.sh ./scripts/xtensa-build-all.sh byt
# Baytrail and Apollo Lake
./scripts/docker-run.sh ./scripts/xtensa-build-all.sh byt apl

Build inside container

Enter the container bash.

cd "${SOF_WORKSPACE}"/sof/
./scripts/docker-run.sh bash

From inside the container, follow the manual configuration and build steps.

Firmware build results

The firmware binary files are located in src/arch/xtensa/. Copy them to your target machine’s /lib/firmware/intel/sof folder.

sof-apl.ri  sof-bdw.ri  sof-byt.ri  sof-cht.ri  sof-cnl.ri  sof-hsw.ri

Build topology and tools

Build with scripts

Build the sof tools and topology files.

cd "${SOF_WORKSPACE}"/sof/
./scripts/docker-run.sh ./scripts/build-tools.sh

Build inside container

Enter the container bash.

cd "${SOF_WORKSPACE}"/sof/
./scripts/docker-run.sh bash

From inside the container:

cd tools

and follow the manual configuration and build steps.

Topology and tools build results

The topology files are all in the topology folder (“${SOF_WORKSPACE}”/sof/tools/build_tools/topology). Copy them to the target machine’s /lib/firmware/intel/sof-tplg folder.

The sof-logger tool is in the tools/logger folder. Copy it to the target machine’s /usr/bin directory.