Skip to content

Instantly share code, notes, and snippets.

@uilianries
Created May 14, 2019 15:11
Show Gist options
  • Save uilianries/d691e55065791ca3e87172195fe2243f to your computer and use it in GitHub Desktop.
Save uilianries/d691e55065791ca3e87172195fe2243f to your computer and use it in GitHub Desktop.
CDT multistage build
FROM ubuntu:bionic AS base
LABEL maintainer="Luis Martinez de Bartolome <[email protected]>"
ENV PYENV_ROOT=/opt/pyenv \
PATH=/opt/pyenv/shims:${PATH} \
CXX=/usr/bin/g++ \
CC=/usr/bin/gcc
RUN dpkg --add-architecture i386 \
&& apt-get -qq update \
&& apt-get -qq install -y --no-install-recommends \
sudo=1.* \
binutils=2.* \
wget=1.* \
git=1:2.* \
libc6-dev-i386=2.* \
linux-libc-dev:i386=4.* \
g++-8-multilib \
libgmp-dev=2:6.* \
libmpfr-dev=4.* \
libmpc-dev=1.* \
libc6-dev=2.* \
nasm=2.* \
dh-autoreconf=17 \
ninja-build=1.* \
libffi-dev=3.* \
libssl-dev=1.* \
pkg-config=0.* \
subversion=1.* \
zlib1g-dev=1:1.* \
libbz2-dev=1.* \
libsqlite3-dev=3.* \
libreadline-dev=7.* \
xz-utils=5.* \
curl=7.* \
libncurses5-dev=6.* \
libncursesw5-dev=6.* \
liblzma-dev=5.* \
ca-certificates \
autoconf-archive \
&& update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 100 \
&& update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-8 100 \
&& update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 \
&& update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-8 100 \
&& ln -s /usr/include/locale.h /usr/include/xlocale.h \
&& rm -rf /var/lib/apt/lists/* \
&& wget --no-check-certificate --quiet https://cmake.org/files/v3.14/cmake-3.14.3-Linux-x86_64.tar.gz \
&& tar -xzf cmake-3.14.3-Linux-x86_64.tar.gz \
--exclude=bin/cmake-gui \
--exclude=doc/cmake \
--exclude=share/cmake-3.12/Help \
&& cp -fR cmake-3.14.3-Linux-x86_64/* /usr \
&& rm -rf cmake-3.14.3-Linux-x86_64 \
&& rm cmake-3.14.3-Linux-x86_64.tar.gz \
&& groupadd 1001 -g 1001 \
&& groupadd 1000 -g 1000 \
&& groupadd 2000 -g 2000 \
&& groupadd 999 -g 999 \
&& useradd -ms /bin/bash conan -g 1001 -G 1000,2000,999 \
&& printf "conan:conan" | chpasswd \
&& adduser conan sudo \
&& printf "conan ALL= NOPASSWD: ALL\\n" >> /etc/sudoers \
&& wget --no-check-certificate --quiet -O /tmp/pyenv-installer https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer \
&& chmod +x /tmp/pyenv-installer \
&& /tmp/pyenv-installer \
&& rm /tmp/pyenv-installer \
&& update-alternatives --install /usr/bin/pyenv pyenv /opt/pyenv/bin/pyenv 100 \
&& PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.7.1 \
&& pyenv global 3.7.1 \
&& pip install -q --upgrade --no-cache-dir pip \
&& pip install -q --no-cache-dir conan conan-package-tools \
&& chown -R conan:1001 /opt/pyenv \
# remove all __pycache__ directories created by pyenv
&& find /opt/pyenv -iname __pycache__ -print0 | xargs -0 rm -rf \
&& update-alternatives --install /usr/bin/python python /opt/pyenv/shims/python 100 \
&& update-alternatives --install /usr/bin/python3 python3 /opt/pyenv/shims/python3 100 \
&& update-alternatives --install /usr/bin/pip pip /opt/pyenv/shims/pip 100 \
&& update-alternatives --install /usr/bin/pip3 pip3 /opt/pyenv/shims/pip3 100
USER conan
WORKDIR /home/conan
RUN mkdir -p /home/conan/.conan \
&& printf 'eval "$(pyenv init -)"\n' >> ~/.bashrc \
&& printf 'eval "$(pyenv virtualenv-init -)"\n' >> ~/.bashrc
FROM base AS armv7
ENV CC=arm-linux-gnueabi-gcc-8 \
CXX=arm-linux-gnueabi-g++-8 \
CMAKE_C_COMPILER=arm-linux-gnueabi-gcc-8 \
CMAKE_CXX_COMPILER=arm-linux-gnueabi-g++-8 \
STRIP=arm-linux-gnueabi-strip \
RANLIB=arm-linux-gnueabi-ranlib \
AS=arm-linux-gnueabi-as \
AR=arm-linux-gnueabi-ar \
LD=arm-linux-gnueabi-ld \
FC=arm-linux-gnueabi-gfortran-8
RUN sudo apt-get -qq update \
&& sudo apt-get install -y --no-install-recommends \
".*8.*arm-linux-gnueabi.*" \
&& sudo update-alternatives --install /usr/bin/arm-linux-gnueabi-gcc arm-linux-gnueabi-gcc /usr/bin/arm-linux-gnueabi-gcc-8 100 \
&& sudo update-alternatives --install /usr/bin/arm-linux-gnueabi-g++ arm-linux-gnueabi-g++ /usr/bin/arm-linux-gnueabi-g++-8 100 \
&& sudo update-alternatives --install /usr/bin/arm-linux-gnueabi-gcov arm-linux-gnueabi-gcov /usr/bin/arm-linux-gnueabi-gcov-8 100 \
&& sudo update-alternatives --install /usr/bin/arm-linux-gnueabi-gcov-dump arm-linux-gnueabi-gcov-dump /usr/bin/arm-linux-gnueabi-gcov-dump-8 100 \
&& sudo update-alternatives --install /usr/bin/arm-linux-gnueabi-gcov-tool arm-linux-gnueabi-gcov-tool /usr/bin/arm-linux-gnueabi-gcov-tool-8 100 \
&& sudo rm -rf /var/lib/apt/lists/* \
&& pip install -q conan conan-package-tools --upgrade \
&& conan profile new default --detect \
&& conan profile update settings.arch=armv7 default
FROM base AS armv7hf
ENV CC=arm-linux-gnueabihf-gcc-8 \
CXX=arm-linux-gnueabihf-g++-8 \
CMAKE_C_COMPILER=arm-linux-gnueabihf-gcc-8 \
CMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++-8 \
STRIP=arm-linux-gnueabihf-strip \
RANLIB=arm-linux-gnueabihf-ranlib \
AS=arm-linux-gnueabihf-as \
AR=arm-linux-gnueabihf-ar \
LD=arm-linux-gnueabihf-ld \
FC=arm-linux-gnueabihf-gfortran-8
COPY armhf.list /etc/apt/sources.list.d/armhf.list
RUN sudo dpkg --add-architecture armhf \
&& sudo sed -i 's/deb\s/deb \[arch=amd64,i386\] /' /etc/apt/sources.list \
&& sudo apt-get -qq update \
&& sudo apt-get install -y --no-install-recommends \
".*8.*arm-linux-gnueabihf.*" \
&& sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gcc /usr/bin/arm-linux-gnueabihf-gcc-8 100 \
&& sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-g++ arm-linux-gnueabihf-g++ /usr/bin/arm-linux-gnueabihf-g++-8 100 \
&& sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcov arm-linux-gnueabihf-gcov /usr/bin/arm-linux-gnueabihf-gcov-8 100 \
&& sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcov-dump arm-linux-gnueabihf-gcov-dump /usr/bin/arm-linux-gnueabihf-gcov-dump-8 100 \
&& sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcov-tool arm-linux-gnueabihf-gcov-tool /usr/bin/arm-linux-gnueabihf-gcov-tool-8 100 \
&& sudo rm -rf /var/lib/apt/lists/* \
&& pip install -q --no-cache-dir conan conan-package-tools --upgrade \
&& conan profile new default --detect \
&& conan profile update settings.arch=armv7hf default
FROM base AS armv8
LABEL maintainer="Luis Martinez de Bartolome <[email protected]>"
ENV CC=aarch64-linux-gnu-gcc-8 \
CXX=aarch64-linux-gnu-g++-8 \
CMAKE_C_COMPILER=aarch64-linux-gnu-gcc-8 \
CMAKE_CXX_COMPILER=aarch64-linux-gnu-g++-8 \
STRIP=aarch64-linux-gnu-strip \
RANLIB=aarch64-linux-gnu-ranlib \
AS=aarch64-linux-gnu-as \
AR=aarch64-linux-gnu-ar \
LD=aarch64-linux-gnu-ld \
FC=aarch64-linux-gnu-gfortran-8
COPY arm64.list /etc/apt/sources.list.d/arm64.list
RUN sudo dpkg --add-architecture arm64 \
&& sudo sed -i 's/deb\s/deb \[arch=amd64,i386\] /' /etc/apt/sources.list \
&& sudo apt-get -qq update \
&& sudo apt-get install -y --no-install-recommends \
".*8.*aarch64-linux-gnu.*" \
&& sudo update-alternatives --install /usr/bin/aarch64-linux-gnu-gcc aarch64-linux-gnu-gcc /usr/bin/aarch64-linux-gnu-gcc-8 100 \
&& sudo update-alternatives --install /usr/bin/aarch64-linux-gnu-g++ aarch64-linux-gnu-g++ /usr/bin/aarch64-linux-gnu-g++-8 100 \
&& sudo update-alternatives --install /usr/bin/aarch64-linux-gnu-gcov aarch64-linux-gnu-gcov /usr/bin/aarch64-linux-gnu-gcov-8 100 \
&& sudo update-alternatives --install /usr/bin/aarch64-linux-gnu-gcov-dump aarch64-linux-gnu-gcov-dump /usr/bin/aarch64-linux-gnu-gcov-dump-8 100 \
&& sudo update-alternatives --install /usr/bin/aarch64-linux-gnu-gcov-tool aarch64-linux-gnu-gcov-tool /usr/bin/aarch64-linux-gnu-gcov-tool-8 100 \
&& sudo rm -rf /var/lib/apt/lists/* \
&& pip install -q --no-cache-dir conan conan-package-tools --upgrade \
&& conan profile new default --detect \
&& conan profile update settings.arch=armv8 default
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment