blob: ffc68aa49639f8bfc1b5de23d5184c25eedad6c0 [file] [log] [blame]
# 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:18.04
ARG UID=1000
# Set up proxy from host
COPY apt.conf /etc/apt/
ARG host_http_proxy
ARG host_https_proxy
ENV http_proxy $host_http_proxy
ENV https_proxy $host_https_proxy
RUN apt-get -y update && \
apt-get install -y \
autoconf \
bison \
build-essential \
flex \
gawk \
gettext \
git \
gperf \
help2man \
libncurses5-dev \
libssl-dev \
libtool \
libtool-bin \
pkg-config \
software-properties-common \
sudo \
texinfo \
udev \
wget \
unzip
# Use ToT alsa utils for the latest topology patches.
RUN mkdir -p /root/alsa-build && cd /root/alsa-build && \
if [ "x$http_proxy" = "x" ]; then \
git clone git://git.alsa-project.org/alsa-lib.git && \
git clone git://git.alsa-project.org/alsa-utils.git ; \
else \
git clone http://git.alsa-project.org/http/alsa-lib.git && \
git clone http://git.alsa-project.org/http/alsa-utils.git; \
fi && \
cd /root/alsa-build/alsa-lib && ./gitcompile && make install && \
cd /root/alsa-build/alsa-utils && ./gitcompile && make install && \
cd /root/ && rm -rf alsa-build
# Set up sof user
RUN useradd --create-home -d /home/sof -u $UID -G sudo sof && \
echo "sof:test0000" | chpasswd && adduser sof sudo
ENV HOME /home/sof
# build cross compiler
USER sof
RUN cd /home/sof && git clone https://github.com/thesofproject/xtensa-overlay.git && \
cd xtensa-overlay && git checkout sof-gcc8.1 && cd ../ && \
git clone https://github.com/thesofproject/crosstool-ng.git && \
mkdir -p /home/sof/work/ && \
cd crosstool-ng && git checkout sof-gcc8.1 && \
./bootstrap && ./configure --prefix=`pwd` && make && make install && \
for arch in byt hsw apl cnl; do \
cp config-${arch}-gcc8.1-gdb8.1 .config && \
# replace the build dist to save space
sed -i 's#${CT_TOP_DIR}\/builds#\/home\/sof\/work#g' .config && \
# gl_cv_func_getcwd_path_max=yes is used to avoid too-long confdir3/confdir3/...
gl_cv_func_getcwd_path_max=yes ./ct-ng build && \
./ct-ng distclean ; \
done && \
cd /home/sof/ && rm -rf xtensa-overlay && rm -rf crosstool-ng
ENV PATH="/home/sof/work/xtensa-byt-elf/bin:${PATH}"
ENV PATH="/home/sof/work/xtensa-hsw-elf/bin:${PATH}"
ENV PATH="/home/sof/work/xtensa-apl-elf/bin:${PATH}"
ENV PATH="/home/sof/work/xtensa-cnl-elf/bin:${PATH}"
RUN cd /home/sof && git clone https://github.com/jcmvbkbc/newlib-xtensa.git newlib-xtensa.git && \
cd newlib-xtensa.git && git checkout -b xtensa origin/xtensa && \
for arch in byt hsw apl cnl; do \
./configure --target=xtensa-${arch}-elf \
--prefix=/home/sof/work/xtensa-root && \
make && \
make install && \
make distclean; \
done && \
cd /home/sof/ && rm -rf newlib-xtensa.git
# Create direcroties for the host machines sof/soft directories to be mounted.
RUN mkdir -p /home/sof/work/sof.git && \
mkdir -p /home/sof/work/soft.git
USER sof
WORKDIR /home/sof/work/sof.git/