This repository has been archived by the owner on Nov 17, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6.8k
/
Copy pathmake_pip_package.sh
executable file
·161 lines (146 loc) · 5.32 KB
/
make_pip_package.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#!/usr/bin/env bash
# Assuming the script is run at mxnet/tools/pip_package
# This script builds from scratch the dependencies of mxnet into static
# librareis and statically links them to produce a (mostly) standalone
# libmxnet.so, then packages it into the python wheel.
# It assumes the build environment to be a sandbox that doesn't have the .so
# objects for the dependencies, i.e. zlib, openblas, libjpeg, libpng, libtiff
# and opencv.
# Install necessary build tools
if [ -n "$(command -v apt-get)" ]; then
sudo apt-get update;
sudo apt-get install -y build-essential git python-pip zip pkg-config cmake
elif [ -n "$(command -v yum)" ]; then
sudo yum install -y cmake
sudo yum groupinstall -y "Development Tools"
sudo yum install -y python27 python27-setuptools python27-tools python-pip
else
echo "Need a package manager to install build tools, e.g. apt/yum"
exit 1
fi
sudo pip install -U pip setuptools wheel
# Set up path as temporary working directory
DEPS_PATH=$PWD/../../deps
mkdir $DEPS_PATH
# Dependencies can be updated here. Be sure to verify the download link before
# changing. The dependencies are:
ZLIB_VERSION=1.2.6
OPENBLAS_VERSION=0.2.19
JPEG_VERSION=8.4.0
PNG_VERSION=1.5.10
TIFF_VERSION=3.8.2
OPENCV_VERSION=2.4.13
# Setup path to dependencies
export PKG_CONFIG_PATH=$DEPS_PATH/lib/pkgconfig:$DEPS_PATH/lib64/pkgconfig:$PKG_CONFIG_PATH
export CPATH=$DEPS_PATH/include:$CPATH
# Position Independent code must be turned on for statically linking .a
export CC="gcc -fPIC"
export CXX="g++ -fPIC"
# Download and build zlib
curl -L https://github.com/LuaDist/zlib/archive/$ZLIB_VERSION.zip -o $DEPS_PATH/zlib.zip
unzip $DEPS_PATH/zlib.zip -d $DEPS_PATH
mkdir $DEPS_PATH/zlib-$ZLIB_VERSION/build
cd $DEPS_PATH/zlib-$ZLIB_VERSION/build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=$DEPS_PATH \
-D BUILD_SHARED_LIBS=OFF ..
make -j$(nproc)
make install
cd -
# download and build openblas
curl -L https://github.com/xianyi/OpenBLAS/archive/v$OPENBLAS_VERSION.zip -o $DEPS_PATH/openblas.zip
unzip $DEPS_PATH/openblas.zip -d $DEPS_PATH
cd $DEPS_PATH/OpenBLAS-$OPENBLAS_VERSION
make FC=gfortran -j $(($(nproc) + 1))
make PREFIX=$DEPS_PATH install
cd -
ln -s $DEPS_PATH/lib/libopenblas_haswellp-r0.2.19.a $DEPS_PATH/lib/libcblas.a
# download and build libjpeg
curl -L https://github.com/LuaDist/libjpeg/archive/$JPEG_VERSION.zip -o $DEPS_PATH/libjpeg.zip
unzip $DEPS_PATH/libjpeg.zip -d $DEPS_PATH
cd $DEPS_PATH/libjpeg-$JPEG_VERSION
./configure --disable-shared --prefix=$DEPS_PATH
make -j$(nproc)
make test
make install
cd -
# download and build libpng
curl -L https://github.com/LuaDist/libpng/archive/$PNG_VERSION.zip -o $DEPS_PATH/libpng.zip
unzip $DEPS_PATH/libpng.zip -d $DEPS_PATH
mkdir $DEPS_PATH/libpng-$PNG_VERSION/build
cd $DEPS_PATH/libpng-$PNG_VERSION/build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=$DEPS_PATH \
-D PNG_CONFIGURE_LIBPNG=-fPIC \
-D BUILD_SHARED_LIBS=OFF ..
make -j$(nproc)
make install
cd -
# download and build libtiff
curl -L https://github.com/LuaDist/libtiff/archive/$TIFF_VERSION.zip -o $DEPS_PATH/libtiff.zip
unzip $DEPS_PATH/libtiff.zip -d $DEPS_PATH
cd $DEPS_PATH/libtiff-$TIFF_VERSION
./configure --disable-shared --prefix=$DEPS_PATH
make -j$(nproc)
make install
cd -
# download and build opencv since we need the static library
curl -L https://github.com/Itseez/opencv/archive/$OPENCV_VERSION.zip -o $DEPS_PATH/opencv.zip
unzip $DEPS_PATH/opencv.zip -d $DEPS_PATH
mkdir $DEPS_PATH/opencv-$OPENCV_VERSION/build
cd $DEPS_PATH/opencv-$OPENCV_VERSION/build
cmake -D WITH_1394=OFF \
-D WITH_AVFOUNDATION=OFF \
-D WITH_CUDA=OFF \
-D WITH_VTK=OFF \
-D WITH_CUFFT=OFF \
-D WITH_CUBLAS=OFF \
-D WITH_NVCUVID=OFF \
-D WITH_EIGEN=ON \
-D WITH_VFW=OFF \
-D WITH_FFMPEG=OFF \
-D WITH_GSTREAMER=OFF \
-D WITH_GTK=OFF \
-D WITH_JASPER=OFF \
-D WITH_JPEG=ON \
-D WITH_PNG=ON \
-D WITH_QUICKTIME=OFF \
-D WITH_TBB=ON \
-D WITH_TIFF=OFF \
-D WITH_V4L=OFF \
-D WITH_LIBV4L=OFF \
-D WITH_DSHOW=OFF \
-D WITH_MSMF=OFF \
-D WITH_OPENCL=OFF \
-D WITH_OPENCLAMDFFT=OFF \
-D WITH_OPENCLAMDBLAS=OFF \
-D BUILD_SHARED_LIBS=OFF \
-D BUILD_opencv_apps=OFF \
-D BUILD_opencv_gpu=OFF \
-D BUILD_opencv_video=OFF \
-D BUILD_opencv_contrib=OFF \
-D BUILD_opencv_nonfree=OFF \
-D BUILD_opencv_flann=OFF \
-D BUILD_opencv_features2d=OFF \
-D BUILD_opencv_calib3d=OFF \
-D BUILD_opencv_objdetect=OFF \
-D BUILD_opencv_ml=OFF \
-D BUILD_opencv_photo=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_PACKAGE=OFF \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=$DEPS_PATH ..
make -j $(nproc)
make install # user will always have access to home, so no sudo needed
cd -
# Although .so building is explicitly turned off for most libraries, sometimes
# they still get created. So, remove them just to make sure they don't
# interfere, or otherwise we might get libmxnet.so that is not self-contained.
rm $DEPS_PATH/{lib,lib64}/*.{so,so.0}
# Go to the parent path and build mxnet
cd ../../
cp make/pip_$(uname | tr '[:upper:]' '[:lower:]')_cpu.mk config.mk
make -j $(nproc)
# Generate wheel. The output is in the mxnet/tools/pip_package/dist path.
cd tools/pip_package
python setup.py bdist_wheel