blob: 114bf07664443676cb9a7248d4b8ffa56d629fbf [file] [log] [blame]
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# (Yizhi) This is mainly inspired by the script in apache/spark.
# I did some modificaiton to get it with our project.
#
set -e
echo "Compiling MXNet Backend, Hang tight!....."
if [[ ($# -ne 2) || ( $1 == "--help") || $1 == "-h" ]]; then
echo "Usage: [-h|--help] <osx-x86_64-cpu/linux-x86_64-cpu/linux-x86_64-gpu> <project.basedir>" 1>&2
exit 1
fi
PLATFORM=$1
MXNETDIR=$2
# below routine shamelessly copied from
# https://github.com/apache/incubator-mxnet/blob/master/setup-utils/install-mxnet-osx-python.sh
# This routine executes a command,
# prints error message on the console on non-zero exit codes and
# returns the exit code to the caller.
chkret() {
cmd=$*
echo "$cmd"
$cmd
ret=$?
if [[ ${ret} != 0 ]]; then
echo " "
echo "ERROR: Return value non-zero for: $cmd"
echo " "
exit 1
fi
} # chkret()
UNAME=`uname -s`
chkret pushd $MXNETDIR
set +e
git submodule update --init --recursive
set -e
# don't want to overwrite an existing config file
cp make/config.mk ./config.mk
if [[ $PLATFORM == "osx-x86_64-cpu" ]];
then
echo "Building MXNet Backend on MAC OS"
echo "ADD_CFLAGS += -I/usr/local/opt/opencv/include" >> ./config.mk
echo "ADD_CFLAGS += -I/usr/local/opt/openblas/include" >> ./config.mk
echo "ADD_LDFLAGS += -L/usr/local/opt/opencv/lib" >> ./config.mk
echo "ADD_LDFLAGS += -L/usr/local/opt/openblas/lib" >> ./config.mk
echo "USE_OPENMP = 0" >> ./config.mk
echo "USE_LAPACK_PATH = /usr/local/opt/lapack/lib" >> ./config.mk
make -j$(sysctl -n hw.ncpu)
elif [[ $PLATFORM == "linux-x86_64-cpu" ]];
then
echo "Building MXNet Backend on Linux CPU"
echo "ADD_CFLAGS += -I/usr/local/include/opencv" >> ./config.mk
echo "ADD_LDFLAGS += -L/usr/local/lib" >> ./config.mk
echo "USE_OPENCV=1" >> ./config.mk
echo "USE_OPENMP=1" >> ./config.mk
echo "USE_BLAS=openblas" >> ./config.mk
echo "USE_LAPACK=1" >> ./config.mk
echo "USE_DIST_KVSTORE=1" >> ./config.mk
echo "USE_S3=1" >> ./config.mk
make -j$(cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1)
elif [[ $PLATFORM == "linux-x86_64-gpu" ]]
then
echo "Building MXNet Backend on Linux GPU"
echo "ADD_CFLAGS += -I/usr/local/include/opencv" >> ./config.mk
echo "ADD_LDFLAGS += -L/usr/local/lib" >> ./config.mk
echo "USE_OPENCV=1" >> ./config.mk
echo "USE_OPENMP=1" >> ./config.mk
echo "USE_BLAS=openblas" >> ./config.mk
echo "USE_LAPACK=1" >> ./config.mk
echo "USE_DIST_KVSTORE=1" >> ./config.mk
echo "USE_S3=1" >> ./config.mk
echo "USE_CUDA=1" >> ./config.mk
echo "USE_CUDNN=1" >> ./config.mk
echo "ADD_CFLAGS += -I/usr/local/cuda/include" >> ./config.mk
echo "ADD_LDFLAGS += -L/usr/local/cuda/lib64/ " >> ./config.mk
#update th nccl version approriately
echo "ADD_LDFLAGS += -L/lib/nccl/cuda-9.0/lib " >> ./config.mk
eval "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib/nccl/cuda-9.0/lib"
eval "export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
make -j$(cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1)
echo "Building MXNet Backend on Linux GPU"
else
echo "MY ALIEN OVERLOADS HAVE NOT TOLD WHAT TO DO FOR INVALID INPUT !!!"
echo "Currently supported platforms: osx-x86_64-cpu or linux-x86_64-cpu or linux-x86_64-gpu"
fi
chkret popd
echo "done building MXNet Backend"
exit 0