@@ -7,7 +7,32 @@ function abort(){
7
7
8
8
trap ' abort' 0
9
9
set -e
10
-
10
+ mkdir -p /paddle/dist/cpu
11
+ mkdir -p /paddle/dist/gpu
12
+ mkdir -p /paddle/dist/cpu-noavx
13
+ mkdir -p /paddle/dist/gpu-noavx
14
+ # Set BASE_IMAGE and DEB_PATH according to env variables
15
+ if [ ${WITH_GPU} == " ON" ]; then
16
+ BASE_IMAGE=" nvidia/cuda:7.5-cudnn5-runtime-ubuntu14.04"
17
+ # additional packages to install when building gpu images
18
+ GPU_DOCKER_PKG=" python-pip"
19
+ if [ ${WITH_AVX} == " ON" ]; then
20
+ DEB_PATH=" dist/gpu/"
21
+ DOCKER_SUFFIX=" gpu"
22
+ else
23
+ DEB_PATH=" dist/gpu-noavx/"
24
+ DOCKER_SUFFIX=" gpu-noavx"
25
+ fi
26
+ else
27
+ BASE_IMAGE=" python:2.7.13-slim"
28
+ if [ ${WITH_AVX} == " ON" ]; then
29
+ DEB_PATH=" dist/cpu/"
30
+ DOCKER_SUFFIX=" cpu"
31
+ else
32
+ DEB_PATH=" dist/cpu-noavx/"
33
+ DOCKER_SUFFIX=" noavx"
34
+ fi
35
+ fi
11
36
# If Dockerfile.* sets BUILD_AND_INSTALL to 'ON', it would have copied
12
37
# source tree to /paddle, and this scripts should build it into
13
38
# /paddle/build.
@@ -17,8 +42,11 @@ if [[ ${BUILD_AND_INSTALL:-OFF} == 'ON' ]]; then
17
42
fi
18
43
19
44
mkdir -p /paddle/build # -p means no error if exists
45
+ cd /paddle/build
20
46
# clean local cmake and third_party cache
21
- cd /paddle/build && rm -rf * && rm -rf ../third_party
47
+ if [ ${DELETE_BUILD_CACHE} == ' ON' ]; then
48
+ rm -rf * && rm -rf ../third_party
49
+ fi
22
50
cmake .. \
23
51
-DWITH_DOC=${WITH_DOC:- OFF} \
24
52
-DWITH_GPU=${WITH_GPU:- OFF} \
@@ -29,9 +57,15 @@ if [[ ${BUILD_AND_INSTALL:-OFF} == 'ON' ]]; then
29
57
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
30
58
make -j ` nproc`
31
59
make install
60
+ # generate deb package for current build
61
+ # FIXME(typhoonzero): should we remove paddle/scripts/deb ?
62
+ # FIXME: CPACK_DEBIAN_PACKAGE_DEPENDS removes all dev dependencies, must
63
+ # install them in docker
64
+ cpack -D CPACK_GENERATOR=' DEB' -D CPACK_DEBIAN_PACKAGE_DEPENDS=" " ..
65
+ mv /paddle/build/* .deb /paddle/${DEB_PATH}
32
66
33
67
if [[ ${BUILD_WOBOQ:- OFF} == ' ON' ]]; then
34
- apt-get install -y clang-3.8 llvm-3.8 libclang-3.8-dev
68
+ apt-get install -y clang-3.8 llvm-3.8 libclang-3.8-dev
35
69
# Install woboq_codebrowser.
36
70
git clone https://github.com/woboq/woboq_codebrowser /woboq
37
71
cd /woboq
@@ -65,4 +99,46 @@ if [[ ${BUILD_AND_INSTALL:-OFF} == 'ON' ]]; then
65
99
fi
66
100
fi
67
101
102
+ # generate production docker image Dockerfile
103
+ if [ ${USE_MIRROR} ]; then
104
+ MIRROR_UPDATE=" sed 's@http:\/\/archive.ubuntu.com\/ubuntu\/@mirror:\/\/mirrors.ubuntu.com\/mirrors.txt@' -i /etc/apt/sources.list && \\ "
105
+ else
106
+ MIRROR_UPDATE=" \\ "
107
+ fi
108
+
109
+ cat > /paddle/build/Dockerfile.${DOCKER_SUFFIX} << EOF
110
+ FROM ${BASE_IMAGE}
111
+ MAINTAINER PaddlePaddle Authors <[email protected] >
112
+
113
+ # ENV variables
114
+ ARG WITH_AVX
115
+ ARG WITH_DOC
116
+ ARG WITH_STYLE_CHECK
117
+
118
+ ENV WITH_GPU=${WITH_GPU}
119
+ ENV WITH_AVX=\$ {WITH_AVX:-ON}
120
+ ENV WITH_DOC=\$ {WITH_DOC:-OFF}
121
+ ENV WITH_STYLE_CHECK=\$ {WITH_STYLE_CHECK:-OFF}
122
+
123
+ ENV HOME /root
124
+ ENV LANG en_US.UTF-8
125
+
126
+ # Use Fix locales to en_US.UTF-8
127
+
128
+ RUN ${MIRROR_UPDATE}
129
+ apt-get update && \
130
+ apt-get install -y libgfortran3 ${GPU_DOCKER_PKG} && \
131
+ apt-get clean -y && \
132
+ pip install --upgrade pip && \
133
+ pip install -U 'protobuf==3.1.0' requests
134
+ RUN pip install numpy
135
+ # Use different deb file when building different type of images
136
+ ADD \$ PWD/${DEB_PATH} *.deb /usr/local/opt/paddle/deb/
137
+ RUN dpkg --force-all -i /usr/local/opt/paddle/deb/*.deb && rm -f /usr/local/opt/paddle/deb/*.deb
138
+
139
+ ENV PATH="/usr/local/opt/paddle/bin/:${PATH} "
140
+ # default command shows the paddle version and exit
141
+ CMD ["paddle", "version"]
142
+ EOF
143
+
68
144
trap : 0
0 commit comments