Created
May 14, 2019 15:11
-
-
Save uilianries/d691e55065791ca3e87172195fe2243f to your computer and use it in GitHub Desktop.
CDT multistage build
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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