[Sound-open-firmware] [PATCH 3/3] scripts: Add ability to build in a container
Pan, Xiuli
xiuli.pan at linux.intel.com
Wed May 2 08:08:11 CEST 2018
Hi Dylan,
I have tried you scripts behind proxy and solve one of the apt proxy
problem.
But I still got hold by the add-apt-repository.
I see the Dockerfile also contains some git protocol url, and I assume
that this could not be supported by the proxy.
Do you have any better method to set the proxy for the docker?
Thanks
Xiuli
On 4/26/2018 00:48, Dylan Reid wrote:
> 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
More information about the Sound-open-firmware
mailing list