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@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