build.sh 3.1 KB
Newer Older
Z
zhangjinchao01 已提交
1 2 3
#!/bin/bash

set -e
H
Helin Wang 已提交
4 5

# Set BASE_IMAGE according to env variables
Y
yi.wu 已提交
6
if [ ${WITH_GPU} == "ON" ]; then
L
liaogang 已提交
7
  BASE_IMAGE="nvidia/cuda:8.0-cudnn5-runtime-ubuntu14.04"
Y
yi.wu 已提交
8
  # additional packages to install when building gpu images
Y
yi.wu 已提交
9
  GPU_DOCKER_PKG="python-pip python-dev"
Y
yi.wu 已提交
10 11 12
else
  BASE_IMAGE="python:2.7.13-slim"
fi
13

H
Helin Wang 已提交
14
DOCKERFILE_GPU_ENV=""
L
liaogang 已提交
15
DOCKERFILE_CUDNN_DSO=""
H
Helin Wang 已提交
16 17
if [[ ${WITH_GPU:-OFF} == 'ON' ]]; then
    DOCKERFILE_GPU_ENV="ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH}"
L
liaogang 已提交
18
    DOCKERFILE_CUDNN_DSO="RUN ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so.5 /usr/lib/x86_64-linux-gnu/libcudnn.so"
H
Helin Wang 已提交
19
fi
L
liaogang 已提交
20

H
Helin Wang 已提交
21 22 23 24
mkdir -p /paddle/build
cd /paddle/build

# build script will not fail if *.deb does not exist
H
Helin Wang 已提交
25
rm *.deb 2>/dev/null || true
H
Helin Wang 已提交
26 27 28 29 30 31 32 33 34

cmake .. \
      -DCMAKE_BUILD_TYPE=Release \
      -DWITH_DOC=${WITH_DOC:-OFF} \
      -DWITH_GPU=${WITH_GPU:-OFF} \
      -DWITH_AVX=${WITH_AVX:-OFF} \
      -DWITH_SWIG_PY=ON \
      -DCUDNN_ROOT=/usr/ \
      -DWITH_STYLE_CHECK=${WITH_STYLE_CHECK:-OFF} \
Y
yi.wu 已提交
35
      -DON_COVERALLS=${WITH_TEST:-OFF} \
H
Helin Wang 已提交
36 37
      -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
make -j `nproc`
Y
yi.wu 已提交
38
if [[ ${RUN_TEST:-OFF} == "ON" ]]; then
H
Helin Wang 已提交
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
    make coveralls
fi
make install

# generate deb package for current build
# FIXME(typhoonzero): should we remove paddle/scripts/deb ?
# FIXME: CPACK_DEBIAN_PACKAGE_DEPENDS removes all dev dependencies, must
# install them in docker
cpack -D CPACK_GENERATOR='DEB' -D CPACK_DEBIAN_PACKAGE_DEPENDS="" ..

if [[ ${BUILD_WOBOQ:-OFF} == 'ON' ]]; then
    apt-get install -y clang-3.8 llvm-3.8 libclang-3.8-dev
    # Install woboq_codebrowser.
    git clone https://github.com/woboq/woboq_codebrowser /woboq
    cd /woboq
    cmake -DLLVM_CONFIG_EXECUTABLE=/usr/bin/llvm-config-3.8 \
          -DCMAKE_BUILD_TYPE=Release \
          .
    make

    export WOBOQ_OUT=/usr/share/nginx/html/paddle
    export BUILD_DIR=/paddle/build
    mkdir -p $WOBOQ_OUT
    cp -rv /woboq/data $WOBOQ_OUT/../data
    /woboq/generator/codebrowser_generator \
L
liaogang 已提交
64 65 66 67
        -b /paddle/build \
        -a \
        -o $WOBOQ_OUT \
        -p paddle:/paddle
H
Helin Wang 已提交
68 69 70
    /woboq/indexgenerator/codebrowser_indexgenerator $WOBOQ_OUT
    cd /woboq
    make clean
Z
zhangjinchao01 已提交
71
fi
Y
yuyang18 已提交
72

H
Helin Wang 已提交
73 74
paddle version

Y
yi.wu 已提交
75 76 77 78 79 80 81
# generate production docker image Dockerfile
if [ ${USE_MIRROR} ]; then
  MIRROR_UPDATE="sed 's@http:\/\/archive.ubuntu.com\/ubuntu\/@mirror:\/\/mirrors.ubuntu.com\/mirrors.txt@' -i /etc/apt/sources.list && \\"
else
  MIRROR_UPDATE="\\"
fi

Y
yi.wu 已提交
82
cat > /paddle/build/Dockerfile <<EOF
Y
yi.wu 已提交
83 84 85 86 87 88 89
FROM ${BASE_IMAGE}
MAINTAINER PaddlePaddle Authors <paddle-dev@baidu.com>
ENV HOME /root
ENV LANG en_US.UTF-8
# Use Fix locales to en_US.UTF-8
RUN ${MIRROR_UPDATE}
    apt-get update && \
Y
yi.wu 已提交
90
    apt-get install -y libgfortran3 libpython2.7 ${GPU_DOCKER_PKG} && \
Y
yi.wu 已提交
91 92
    apt-get clean -y && \
    pip install --upgrade pip && \
Y
yi.wu 已提交
93
    pip install -U 'protobuf==3.1.0' requests numpy
Y
yi.wu 已提交
94
# Use different deb file when building different type of images
H
Helin Wang 已提交
95
ADD build/*.deb /usr/local/opt/paddle/deb/
Y
yi.wu 已提交
96
# run paddle version to install python packages first
L
liaogang 已提交
97 98 99 100
RUN dpkg -i /usr/local/opt/paddle/deb/*.deb && \
    rm -f /usr/local/opt/paddle/deb/*.deb && \
    paddle version
${DOCKERFILE_CUDNN_DSO} 
H
Helin Wang 已提交
101
${DOCKERFILE_GPU_ENV}
Y
yi.wu 已提交
102 103 104
# default command shows the paddle version and exit
CMD ["paddle", "version"]
EOF