-
Notifications
You must be signed in to change notification settings - Fork 74
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update memory sanitizer docker image with latest development version
- Loading branch information
Showing
1 changed file
with
71 additions
and
30 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,66 +1,107 @@ | ||
FROM ubuntu:disco | ||
ARG RELEASE=disco | ||
ARG LLVM=8 | ||
FROM ubuntu:eoan | ||
ARG LLVM=9 | ||
ARG NTHREAD=10 | ||
|
||
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ | ||
clang-${LLVM} \ | ||
cmake \ | ||
g++ \ | ||
gfortran \ | ||
git \ | ||
vim \ | ||
lldb-${LLVM} \ | ||
hdf5-tools \ | ||
libblas-dev \ | ||
libboost-all-dev \ | ||
libboost-dev \ | ||
libclang-${LLVM}-dev \ | ||
libfftw3-dev \ | ||
libgfortran3 \ | ||
libgfortran4 \ | ||
libgmp-dev \ | ||
libhdf5-dev \ | ||
intel-mkl \ | ||
libopenmpi-dev \ | ||
openmpi-bin \ | ||
openmpi-common \ | ||
openmpi-doc \ | ||
python-clang-${LLVM} \ | ||
python-dev \ | ||
python-clang-${LLVM} \ | ||
python-h5py \ | ||
python-mako \ | ||
python-matplotlib \ | ||
python-mpi4py \ | ||
python-numpy \ | ||
python-scipy \ | ||
python-sphinx \ | ||
python-nbsphinx | ||
python-pip \ | ||
python-scipy | ||
|
||
ENV CC=clang-${LLVM} CXX=clang++-${LLVM} LLVM_VERSION=${LLVM}.0.0 | ||
ENV PYTHON_VERSION=2.7 \ | ||
CC=clang-${LLVM} CXX=clang++-${LLVM} LLVM_VERSION=${LLVM}.0.1 | ||
RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${LLVM} 60 --slave /usr/bin/clang++ clang++ /usr/bin/clang++-${LLVM} --slave /usr/bin/clang-cpp clang-cpp /usr/bin/clang-cpp-${LLVM} | ||
|
||
ADD http://releases.llvm.org/${LLVM_VERSION}/libcxx-${LLVM_VERSION}.src.tar.xz /tmp/ | ||
ADD http://releases.llvm.org/${LLVM_VERSION}/libcxxabi-${LLVM_VERSION}.src.tar.xz /tmp/ | ||
# Build libcxx with MSAN | ||
ADD https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/libcxx-${LLVM_VERSION}.src.tar.xz /tmp/ | ||
ADD https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/libcxxabi-${LLVM_VERSION}.src.tar.xz /tmp/ | ||
RUN mkdir /tmp/build && cd /tmp/build && \ | ||
tar -C /tmp -xf /tmp/libcxx-${LLVM_VERSION}.src.tar.xz && \ | ||
tar -C /tmp -xf /tmp/libcxxabi-${LLVM_VERSION}.src.tar.xz && \ | ||
cmake /tmp/libcxxabi-${LLVM_VERSION}.src -DLLVM_CONFIG_PATH=/usr/bin/llvm-config-${LLVM} -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-${LLVM} -DLIBCXXABI_LIBCXX_PATH=/tmp/libcxx-${LLVM_VERSION}.src -DLLVM_USE_SANITIZER=Memory && make -j2 && make install && \ | ||
cmake /tmp/libcxxabi-${LLVM_VERSION}.src -DLLVM_CONFIG_PATH=/usr/bin/llvm-config-${LLVM} -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-${LLVM} -DLIBCXXABI_LIBCXX_PATH=/tmp/libcxx-${LLVM_VERSION}.src -DLLVM_USE_SANITIZER=MemoryWithOrigins && make -j${NTHREAD} && make install && \ | ||
rm -rf * && \ | ||
cmake /tmp/libcxx-${LLVM_VERSION}.src -DLLVM_CONFIG_PATH=/usr/bin/llvm-config-${LLVM} -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-${LLVM} -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_CXX_ABI_INCLUDE_PATHS=/tmp/libcxxabi-${LLVM_VERSION}.src/include -DLLVM_USE_SANITIZER=Memory && make -j2 install && \ | ||
cmake /tmp/libcxx-${LLVM_VERSION}.src -DLLVM_CONFIG_PATH=/usr/bin/llvm-config-${LLVM} -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-${LLVM} -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_CXX_ABI_INCLUDE_PATHS=/tmp/libcxxabi-${LLVM_VERSION}.src/include -DLLVM_USE_SANITIZER=MemoryWithOrigins && make -j${NTHREAD} install && \ | ||
rm -rf /tmp/libcxx* /tmp/build | ||
ENV CXXFLAGS="-stdlib=libc++ -fsanitize=memory" CFLAGS="-fsanitize=memory" LD_LIBRARY_PATH=/usr/lib/llvm-${LLVM}/lib LDFLAGS="-fsanitize=memory" | ||
|
||
RUN update-alternatives --set liblapack.so-x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/libmkl_rt.so && \ | ||
update-alternatives --set libblas.so-x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/libmkl_rt.so | ||
# Build Environment using MSAN | ||
ENV CXXFLAGS="-stdlib=libc++ -fsanitize=memory -fno-omit-frame-pointer -fsanitize-recover=all -fsanitize-memory-track-origins -ggdb3" \ | ||
CFLAGS="-fsanitize=memory -fno-omit-frame-pointer -fsanitize-recover=all -fsanitize-memory-track-origins -ggdb3" \ | ||
LD_LIBRARY_PATH=/usr/lib/llvm-${LLVM}/lib \ | ||
LDFLAGS="-fsanitize=memory" \ | ||
MSAN_SYMBOLIZER_PATH=/usr/lib/llvm-${LLVM}/bin/llvm-symbolizer | ||
|
||
# # HDF5 | ||
# ADD https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.0/src/CMake-hdf5-1.12.0.tar.gz /tmp/ | ||
# RUN cd /tmp && tar xf /tmp/CMake-hdf5-1.12.0.tar.gz && chmod 1777 . && \ | ||
# mkdir build && cd build && \ | ||
# cmake /tmp/CMake-hdf5-1.12.0/hdf5-1.12.0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/hdf5 && make -j${NTHREAD} && make install && \ | ||
# cd /tmp && rm -rf /tmp/CMake-hdf5-1.12.0* /tmp/build | ||
# ENV HDF5_ROOT=/opt/hdf5 | ||
|
||
# libevent | ||
ADD https://github.com/libevent/libevent/releases/download/release-2.1.11-stable/libevent-2.1.11-stable.tar.gz /tmp/ | ||
RUN cd /tmp && tar xf /tmp/libevent-2.1.11-stable.tar.gz && cd libevent-2.1.11-stable && \ | ||
./configure --prefix=/opt/openmpi --enable-shared && make -j${NTHREAD} && make install && \ | ||
cd /tmp && rm -rf /tmp/libevent* | ||
|
||
# hwloc | ||
ADD https://download.open-mpi.org/release/hwloc/v2.2/hwloc-2.2.0.tar.bz2 /tmp/ | ||
COPY packaging/hwloc.patch /tmp/ | ||
RUN cd /tmp && tar xf /tmp/hwloc-2.2.0.tar.bz2 && patch -p0 -i hwloc.patch && cd hwloc-2.2.0 && \ | ||
./configure --prefix=/opt/openmpi --enable-shared && make -j${NTHREAD} && make install && \ | ||
cd /tmp && rm -rf /tmp/hwloc* | ||
|
||
# OpenMPI | ||
ADD https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.4.tar.bz2 /tmp/ | ||
RUN cd /tmp && tar xf /tmp/openmpi-4.0.4.tar.bz2 && cd openmpi-4.0.4 && \ | ||
./configure --prefix=/opt/openmpi --enable-shared --disable-mpi-fortran --disable-pty-support --with-hwloc=/opt/openmpi --with-libevent=/opt/openmpi && make -j${NTHREAD} && make install && \ | ||
cd /tmp && rm -rf /tmp/openmpi-4.0.4* | ||
ENV MPI_ROOT=/opt/openmpi \ | ||
MPICC=/opt/openmpi/bin/mpicc | ||
|
||
# Use libflame to provide blas / lapack | ||
RUN git clone https://github.com/Wentzell/libflame /tmp/libflame && cd /tmp/libflame && \ | ||
./configure --prefix=/opt/libflame --enable-lapack2flame --enable-builtin-blas && make -j${NTHREAD} && make install && \ | ||
cd /tmp && rm -rf /tmp/libflame | ||
|
||
# Dockerfile.build with sanitization enabled | ||
COPY requirements.txt /src/triqs/requirements.txt | ||
# Install numpy first to prevent h5py from pulling in a newer version first | ||
RUN pip install `grep numpy /src/triqs/requirements.txt` && \ | ||
pip install -r /src/triqs/requirements.txt | ||
|
||
RUN useradd -m build | ||
|
||
ENV SRC=/src \ | ||
BUILD=/home/build \ | ||
INSTALL=/usr/local \ | ||
PYTHONPATH=/usr/local/lib/python2.7/site-packages:${PYTHONPATH} \ | ||
CMAKE_PREFIX_PATH=/usr/lib/cmake/triqs:${CMAKE_PREFIX_PATH} | ||
PYTHONPATH=/usr/local/lib/python2.7/site-packages \ | ||
CMAKE_PREFIX_PATH=/usr/lib/cmake/triqs | ||
|
||
COPY . ${SRC}/triqs | ||
WORKDIR ${BUILD}/triqs | ||
RUN chown -R build ${SRC}/triqs . | ||
RUN chown -R build . ${SRC}/triqs | ||
USER build | ||
RUN cmake $SRC/triqs -DCMAKE_INSTALL_PREFIX=$INSTALL -DCLANG_OPT="$CXXFLAGS" -DMATHJAX_PATH="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2" -DMSAN=1 | ||
RUN make VERBOSE=1 -j8 | ||
ENV MSAN_SYMBOLIZER_PATH=/usr/lib/llvm-${LLVM}/bin/llvm-symbolizer CTEST_OUTPUT_ON_FAILURE=1 | ||
RUN make test || true | ||
RUN cmake $SRC/triqs -DCMAKE_INSTALL_PREFIX=$INSTALL -DBuild_Deps=Always -DCLANG_OPT="$CXXFLAGS" -DMSAN=ON \ | ||
-DLAPACK_LIBRARIES=/opt/libflame/lib/libflame.a -DBLAS_LIBRARIES=/opt/libflame/lib/libflame.a && \ | ||
make -j${NTHREAD} | ||
RUN make test CTEST_OUTPUT_ON_FAILURE=1 || true |