[Sound-open-firmware] [PATCH 3/3] scripts: Add ability to build in a container

Dylan Reid dgreid at chromium.org
Wed Apr 25 18:48:41 CEST 2018


Having a docker container that contains the cross compiler and host
dependencies eases setup and maintenance of local builds.

The container setup procedure is based of the wiki instruction. A few
more dependencies were added.

In addition to the ct-ng and xtensa-newlib steps, this container builds
top of tree alsa-lib and alsa-utils as distros seem to be slow to update
them with the needed topology features.

The docker-run.sh script is used to automatically bind mount local
soft.git and sof.git directories in to the container. This provides
build artifacts in the same place as a local "make" would.

Use it like the following:

./scripts/docker-run.sh make
./scripts/docker-run.sh ./scripts/xtensa-build-all.sh
etc...

The container only needs to be re-built when the toolchain or alsa
dependencies are modified.

Signed-off-by: Dylan Reid <dgreid at chromium.org>
---
 scripts/README.docker           |  27 +++++++
 scripts/docker-run.sh           |  13 ++++
 scripts/docker_build/Dockerfile | 125 ++++++++++++++++++++++++++++++++
 3 files changed, 165 insertions(+)
 create mode 100644 scripts/README.docker
 create mode 100755 scripts/docker-run.sh
 create mode 100644 scripts/docker_build/Dockerfile

diff --git a/scripts/README.docker b/scripts/README.docker
new file mode 100644
index 0000000..fd390d6
--- /dev/null
+++ b/scripts/README.docker
@@ -0,0 +1,27 @@
+The docker container provided in docker_build sets up a build environment for
+building Sound Open Firmware. A working docker installation is needed to run
+the docker build container.
+
+Note: This script assumes the sof.git/ and soft.git/ directories are siblings.
+
+Quick Start:
+
+First, build the docker container. This step needs to be done initially and
+when the toolchain or alsa dependencies are updated.
+
+cd scripts/docker_build
+docker build --build-arg UID=$(id -u) -t sof .
+
+After the container is built, it can be used to run the scripts.
+
+To build for baytrail:
+./scripts/docker-run.sh ./scripts/xtensa-build-all.sh byt
+
+To rebuild the topology in soft.git:
+./scripts/docker-run.sh ./scripts/build-soft.sh
+
+An incremental sof.git build:
+./scripts/docker-run.sh make
+
+Or enter a shell:
+./scripts/docker-run.sh bash
diff --git a/scripts/docker-run.sh b/scripts/docker-run.sh
new file mode 100755
index 0000000..b1e989c
--- /dev/null
+++ b/scripts/docker-run.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+# Runs a given script in the docker container you can generate from the
+# docker_build directory.
+# Example:
+#  To build sof for baytrail:
+#  ./scripts/docker-run.sh ./scripts/xtensa-build-all.sh byt
+#  To build topology:
+#  ./scripts/docker-run.sh ./scripts/build_soft.sh
+
+docker run -it -v `pwd`:/home/sof/work/sof.git \
+           -v `pwd`/../soft.git:/home/sof/work/soft.git \
+	   --user `id -u` sof $@
diff --git a/scripts/docker_build/Dockerfile b/scripts/docker_build/Dockerfile
new file mode 100644
index 0000000..6b587e2
--- /dev/null
+++ b/scripts/docker_build/Dockerfile
@@ -0,0 +1,125 @@
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# Defines a docker image that can build sound open firmware
+#
+# Usage:
+# check out sof
+# build docker image:
+# docker build --build-arg UID=$(id -u) -t sof .
+# docker run -it  -v <insert sof dir here>:/home/sof/workdir -v <soft git dir>:/home/sof/work/soft.git --user `id -u` sof
+#
+# For incremental builds:
+# docker run -it  -v <insert sof dir here>:/home/sof/work/sof.git -v <soft git dir>:/home/sof/work/soft.git --user `id -u` sof ./incremental.sh
+#
+
+FROM ubuntu
+ARG UID=1000
+
+RUN apt-get -y update && \
+	    apt-get install -y \
+	    	autoconf \
+		bison \
+		build-essential \
+		flex \
+		gawk \
+		gettext \
+		git \
+		gperf \
+		help2man \
+		libncurses5-dev \
+		libncurses5-dev \
+		libssl-dev \
+		libtool \
+		libtool \
+		libtool-bin \
+		pkg-config \
+		software-properties-common \
+		sudo \
+		texinfo \
+		udev \
+		wget
+
+# Use gcc/g++ 7.
+RUN add-apt-repository ppa:ubuntu-toolchain-r/test -y
+RUN apt-get -y update
+RUN apt-get install -y gcc-7 g++-7
+RUN apt-get clean
+RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7
+
+# Use ToT alsa utils for the latest topology patches.
+RUN mkdir -p /root/alsa-build
+RUN cd /root/alsa-build && git clone git://git.alsa-project.org/alsa-lib.git
+RUN cd /root/alsa-build && git clone git://git.alsa-project.org/alsa-utils.git
+RUN cd /root/alsa-build/alsa-lib && ./gitcompile &&  make install
+RUN cd /root/alsa-build/alsa-utils && ./gitcompile &&  make install
+
+RUN useradd --create-home -d /home/sof -u $UID -G sudo sof
+RUN echo "sof:test0000" | chpasswd
+RUN adduser sof sudo
+ENV HOME /home/sof
+
+# pull all sof repositories that are needed
+USER sof
+RUN git clone git://git.alsa-project.org/sound-open-firmware.git /home/sof/sof.git
+RUN git clone git://git.alsa-project.org/sound-open-firmware-tools.git /home/sof/soft.git
+RUN git clone https://github.com/01org/osadsp-crosstool-ng.git /home/sof/ct-ng.git
+RUN git clone https://github.com/jcmvbkbc/newlib-xtensa.git /home/sof/newlib-xtensa.git
+
+USER sof
+RUN mkdir -p /home/sof/bin
+WORKDIR /home/sof/soft.git
+RUN ./autogen.sh
+RUN ./configure --prefix=/home/sof/bin
+RUN make
+RUN make install
+
+ENV PATH="/home/sof/bin/bin:${PATH}"
+
+USER sof
+WORKDIR /home/sof/ct-ng.git
+RUN for arch in byt hsw bxt cnl; do \
+	./bootstrap && \
+	./configure --prefix=`pwd` && \
+	make && \
+	make install && \
+	./ct-ng xtensa-${arch}-elf && \
+	./ct-ng build && \
+	make distclean; \
+done
+
+ENV PATH="/home/sof/ct-ng.git/builds/xtensa-byt-elf/bin:${PATH}"
+ENV PATH="/home/sof/ct-ng.git/builds/xtensa-hsw-elf/bin:${PATH}"
+ENV PATH="/home/sof/ct-ng.git/builds/xtensa-bxt-elf/bin:${PATH}"
+ENV PATH="/home/sof/ct-ng.git/builds/xtensa-cnl-elf/bin:${PATH}"
+
+USER sof
+WORKDIR /home/sof/newlib-xtensa.git
+RUN git checkout -b xtensa origin/xtensa
+RUN for arch in byt hsw bxt cnl; do \
+	./configure --target=xtensa-${arch}-elf \
+		--prefix=/home/sof/work/xtensa-root && \
+	make && \
+	make install && \
+	make distclean; \
+done
+
+USER sof
+WORKDIR /home/sof/sof.git
+RUN ./autogen.sh
+RUN ./configure --enable-rimage
+RUN make
+USER root
+RUN make install
+
+# Create direcroties for the host machines sof/soft directories to be mounted.
+USER sof
+RUN mkdir -p /home/sof/work/sof
+RUN mkdir -p /home/sof/work/soft
+
+USER sof
+WORKDIR /home/sof/work/sof.git/
+
+# Default to building all.
+CMD ./scripts/xtensa-build-all.sh
-- 
2.17.0.484.g0c8726318c-goog



More information about the Sound-open-firmware mailing list