|
| 1 | +# Note: Run `docker build -f .devcontainer/Dockerfile -t pdc:latest .` from the root directory of the repository to build the docker image. |
| 2 | + |
| 3 | +# Use Ubuntu Jammy (latest LTS) as the base image |
| 4 | +FROM ubuntu:jammy |
| 5 | + |
| 6 | + |
| 7 | + |
| 8 | +# Install necessary tools, MPICH, UUID library and developer files |
| 9 | +RUN apt-get update && apt-get install -y \ |
| 10 | + build-essential \ |
| 11 | + git \ |
| 12 | + mpich \ |
| 13 | + libmpich-dev \ |
| 14 | + uuid \ |
| 15 | + uuid-dev \ |
| 16 | + autoconf \ |
| 17 | + libtool \ |
| 18 | + cmake \ |
| 19 | + cmake-curses-gui \ |
| 20 | + wget \ |
| 21 | + axel \ |
| 22 | + curl \ |
| 23 | + vim \ |
| 24 | + nano \ |
| 25 | + gdb \ |
| 26 | + cgdb \ |
| 27 | + curl \ |
| 28 | + valgrind |
| 29 | + |
| 30 | +# Set WORK_SPACE environment variable and create necessary directories |
| 31 | +RUN mkdir -p /workspaces |
| 32 | +ENV WORK_SPACE=/workspaces |
| 33 | + |
| 34 | + |
| 35 | +# Clone the repositories |
| 36 | +WORKDIR $WORK_SPACE/source |
| 37 | +RUN git clone https://github.com/ofiwg/libfabric.git && \ |
| 38 | + git clone https://github.com/mercury-hpc/mercury.git --recursive |
| 39 | + |
| 40 | +COPY ./ ${WORK_SPACE}/source/pdc |
| 41 | + |
| 42 | +ENV LIBFABRIC_SRC_DIR=$WORK_SPACE/source/libfabric |
| 43 | +ENV MERCURY_SRC_DIR=$WORK_SPACE/source/mercury |
| 44 | +ENV PDC_SRC_DIR=$WORK_SPACE/source/pdc |
| 45 | +ENV LIBFABRIC_DIR=$WORK_SPACE/install/libfabric |
| 46 | +ENV MERCURY_DIR=$WORK_SPACE/install/mercury |
| 47 | +ENV PDC_DIR=$WORK_SPACE/install/pdc |
| 48 | + |
| 49 | +RUN mkdir -p $LIBFABRIC_SRC_DIR && \ |
| 50 | + mkdir -p $MERCURY_SRC_DIR && \ |
| 51 | + mkdir -p $LIBFABRIC_DIR && \ |
| 52 | + mkdir -p $MERCURY_DIR && \ |
| 53 | + mkdir -p $PDC_DIR |
| 54 | + |
| 55 | + |
| 56 | +# Save the environment variables to a file |
| 57 | +RUN echo "export LIBFABRIC_SRC_DIR=$WORK_SPACE/source/libfabric" > $WORK_SPACE/pdc_env.sh && \ |
| 58 | + echo "export MERCURY_SRC_DIR=$WORK_SPACE/source/mercury" >> $WORK_SPACE/pdc_env.sh && \ |
| 59 | + echo "export PDC_SRC_DIR=$WORK_SPACE/source/pdc" >> $WORK_SPACE/pdc_env.sh && \ |
| 60 | + echo "export LIBFABRIC_DIR=$WORK_SPACE/install/libfabric" >> $WORK_SPACE/pdc_env.sh && \ |
| 61 | + echo "export MERCURY_DIR=$WORK_SPACE/install/mercury" >> $WORK_SPACE/pdc_env.sh && \ |
| 62 | + echo "export PDC_DIR=$WORK_SPACE/install/pdc" >> $WORK_SPACE/pdc_env.sh |
| 63 | + |
| 64 | + |
| 65 | +# Build and install libfabric |
| 66 | +WORKDIR $LIBFABRIC_SRC_DIR |
| 67 | +RUN git checkout v1.18.0 && \ |
| 68 | + ./autogen.sh && \ |
| 69 | + ./configure --prefix=$LIBFABRIC_DIR CC=mpicc CFLAG="-O2" && \ |
| 70 | + make clean && \ |
| 71 | + make -j && make install && \ |
| 72 | + make check |
| 73 | + |
| 74 | +ENV LD_LIBRARY_PATH="$LIBFABRIC_DIR/lib:$LD_LIBRARY_PATH" |
| 75 | +ENV PATH="$LIBFABRIC_DIR/include:$LIBFABRIC_DIR/lib:$PATH" |
| 76 | +RUN echo 'export LD_LIBRARY_PATH=$LIBFABRIC_DIR/lib:$LD_LIBRARY_PATH' >> $WORK_SPACE/pdc_env.sh && \ |
| 77 | + echo 'export PATH=$LIBFABRIC_DIR/include:$LIBFABRIC_DIR/lib:$PATH' >> $WORK_SPACE/pdc_env.sh |
| 78 | + |
| 79 | + |
| 80 | +# Build and install Mercury |
| 81 | +WORKDIR $MERCURY_SRC_DIR |
| 82 | +ENV MERCURY_CMAKE_FLAGS="-DCMAKE_INSTALL_PREFIX=$MERCURY_DIR -DCMAKE_C_COMPILER=mpicc -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DNA_USE_OFI=ON -DNA_USE_SM=OFF -DNA_OFI_TESTING_PROTOCOL=tcp " |
| 83 | +RUN git checkout v2.2.0 \ |
| 84 | + mkdir -p build |
| 85 | +WORKDIR ${MERCURY_SRC_DIR}/build |
| 86 | +RUN cmake $MERCURY_CMAKE_FLAGS ../ && \ |
| 87 | + make -j && make install && \ |
| 88 | + ctest |
| 89 | + |
| 90 | +# Set the environment variables |
| 91 | +ENV LD_LIBRARY_PATH="$MERCURY_DIR/lib:$LD_LIBRARY_PATH" |
| 92 | +ENV PATH="$MERCURY_DIR/include:$MERCURY_DIR/lib:$PATH" |
| 93 | +RUN echo 'export LD_LIBRARY_PATH=$MERCURY_DIR/lib:$LD_LIBRARY_PATH' >> $WORK_SPACE/pdc_env.sh \ |
| 94 | + echo 'export PATH=$MERCURY_DIR/include:$MERCURY_DIR/lib:$PATH' >> $WORK_SPACE/pdc_env.sh |
| 95 | + |
0 commit comments