https://github.com/Microsoft/CNTK
Revision 2a1d6b6f9b77d7a6bf3ef1fab0c6d963c277771b authored by Ivan Rodriguez on 20 February 2017, 09:32:25 UTC, committed by Ivan Rodriguez on 20 February 2017, 09:32:25 UTC
1 parent de00904
Tip revision: 2a1d6b6f9b77d7a6bf3ef1fab0c6d963c277771b authored by Ivan Rodriguez on 20 February 2017, 09:32:25 UTC
Fixing bug for composite functions which caused v2library unittests to fail in nightly configuration.
Fixing bug for composite functions which caused v2library unittests to fail in nightly configuration.
Tip revision: 2a1d6b6
configure
#!/bin/bash
#
# Copyright (c) Microsoft. All rights reserved.
#
# Licensed under the MIT license. See LICENSE.md file in the project root
# for full license information.
# ==============================================================================
#
configure=$0
build_top=$PWD
cuda_path=
cuda_check=include/cuda.h
enable_cuda=
enable_python=
# NCCL communication library
have_nccl=no
nccl_path=
nccl_check=include/nccl.h
# CNTK Custom MKL Version
cntk_custom_mkl_version=3
have_mkl=no
mkl_path=
mkl_check=$cntk_custom_mkl_version/include/mkl.h
# Experimental OpenBLAS support.
have_openblas=no
openblas_path=
openblas_check=include/openblas_config.h
# Boost library
boost_path=
boost_check=include/boost/test/unit_test.hpp
# Protocol buffers library
protobuf_path=
protobuf_check=lib/libprotobuf.a
# MPI library
mpi_path=
mpi_check=include/mpi.h
have_kaldi=no
kaldi_path=
kaldi_check=src/kaldi.mk
have_buildtype=no
buildtype=
default_buildtype=release
have_gdk_include=no
gdk_include_path=
gdk_include_check=nvml.h
have_gdk_nvml_lib=no
gdk_nvml_lib_path=
gdk_nvml_lib_check=libnvidia-ml.so
have_cub=no
cub_path=
cub_check=cub/cub.cuh
have_cudnn=no
cudnn_path=
cudnn_check=cuda/include/cudnn.h
have_opencv=no
opencv_path=
opencv_check=include/opencv2/opencv.hpp
have_libzip=no
libzip_path=
libzip_check=include/zip.h
have_swig=no
swig_path=
swig_check=bin/swig
swig_required_version=3.0.10
py_check=bin/python
py_versions=
declare -A py_paths
mathlib=
have_mpi=yes
default_use_mpi=$have_mpi
default_use_1bitsgd=no
enable_1bitsgd=$default_use_1bitsgd
default_use_code_coverage=no
enable_code_coverage=$default_use_code_coverage
default_use_asgd=yes
enable_asgd=$default_use_asgd
# List from best to worst choice
default_path_list="/usr /usr/local /opt /opt/local"
# List from best to worst choice
default_mkls="CNTKCustomMKL"
default_openblas=""
default_boost="boost-1.60.0"
default_cudas="cuda-8.0 cuda-7.5"
default_nccls="nccl"
default_kaldis="kaldi-trunk kaldi-c024e8aa"
default_gdk_includes="include/nvidia/gdk"
default_gdk_nvml_libs="src/gdk/nvml/lib"
default_cubs="cub-1.4.1"
default_cudnns="cudnn-5.1 cudnn-5.0"
default_opencvs="opencv-3.1.0 opencv-3.0.0"
default_protobuf="protobuf-3.1.0"
default_libzips="libzip-1.1.2"
default_swig="swig-3.0.10"
default_mpi="mpi"
function default_paths ()
{
echo $build_top $HOME $default_path_list
}
# $1 is directory
# $2 is file that must be present
function check_dir ()
{
if test -e $1/$2
then
echo yes
else
echo no
fi
}
# $1 is the list of tails to search, ordered by preference
# $2 is some file that must exist in $1
function find_dir ()
{
# Loop over list of tails to search, including empty (just default_path + search file)
for tail in $1 ''
do
for head in $(default_paths)
do
[ -n "$tail" ] && search_path="$head/$tail" || search_path=$head
if test x$(check_dir "$search_path" $2) = xyes
then
echo $search_path
return 0
fi
done
done
}
function find_mkl ()
{
find_dir "$default_mkls" "$mkl_check"
}
function find_openblas ()
{
find_dir "$default_openblas" "$openblas_check"
}
function find_boost ()
{
find_dir "$default_boost" "$boost_check"
}
function find_protobuf ()
{
find_dir "$default_protobuf" "$protobuf_check"
}
function find_nccl ()
{
find_dir "$default_nccls" "$nccl_check"
}
function find_cuda ()
{
find_dir "$default_cudas" "$cuda_check"
}
function find_kaldi ()
{
find_dir "$default_kaldis" "$kaldi_check"
}
function find_gdk_include ()
{
find_dir "$default_gdk_includes" "$gdk_include_check"
}
function find_gdk_nvml_lib ()
{
find_dir "$default_gdk_nvml_libs" "$gdk_nvml_lib_check"
}
function find_cub ()
{
find_dir "$default_cubs" "$cub_check"
}
function find_cudnn ()
{
find_dir "$default_cudnns" "$cudnn_check"
}
function find_opencv ()
{
find_dir "$default_opencvs" "$opencv_check"
}
function find_libzip ()
{
find_dir "$default_libzips" "$libzip_check"
}
function find_mpi ()
{
find_dir "$default_mpi" "$mpi_check"
}
function is_hardlinked ()
{
r=no
if test -e $1 && test -e $2
then
r=yes
[ "`stat -c '%i' $1`" != "`stat -c '%i' $2`" ] && r=no
fi
echo $r
}
function check_version ()
{
local expected_version=$1
local actual_version=$2
[ -z "$actual_version" ] && return 1
[ "$( printf "%s\n" $actual_version $expected_version | sort -V | head -1)" = "$expected_version" ]
return $?
}
function default_use_cuda ()
{
if test x$(find_cuda) = x || test x$(find_gdk_include) = x || test x$(find_gdk_nvml_lib) = x || test x$(find_cudnn) = x || test x$(find_cub) = x
then
echo no
else
echo yes
fi
}
enable_cuda=$(default_use_cuda)
# TODO allow to pick up from path?
function check_swig ()
{
local swig_dir="$1"
local swig_bin="$swig_dir/$swig_check"
# Check that binary is executable and we can retrieve the version
test -x "$swig_bin" || return $?
"$swig_bin" -version 2>&1 1>/dev/null || return $?
local actual_version=$("$swig_bin" -version | grep '^SWIG Version ' | head -1 | grep -o '[0-9.]*')
if check_version "$swig_required_version" "$actual_version"
then
echo "$swig_dir"
return 0
else
return 1
fi
}
function find_swig ()
{
check_swig "$(find_dir "$default_swig" "$swig_check")"
}
function check_python ()
{
# Required version: exact match against major and minor version
local required_version="$1"
local py_dir="$2"
local py_bin="$py_dir/$py_check"
[ -x "$py_bin" ] || return 1
local py_version=$("$py_bin" -c "import sys; sys.stdout.write('{0}{1}'.format(sys.version_info.major,sys.version_info.minor))")
[ "$?" = "0" ] && [ -x "$py_bin" ] && [ "$py_version" = "$required_version" ] && {
echo $py_dir
return 0
}
return 1
}
# TODO allow to pick up from path?
function find_python ()
{
local required_version="$1"
local py_dir=$(find_dir "" "$py_check")
check_python "$required_version" "$py_dir"
}
function default_use_python ()
{
# Keeping it default "no" for a little while:
# if test x$(find_swig) = x || test x$(find_python 27)$(find_python 34)$(find_python 35) = x
# then
echo no
# else
# echo yes
# fi
}
enable_python=$(default_use_python)
function show_default ()
{
if test x$1 = x
then
echo "(no default)"
else
echo "(default $1)"
fi
}
function show_help ()
{
echo "Usage: configure [options]"
echo "Options:"
echo " -h|--help this help"
echo " --with-build-top=directory build directory $(show_default $build_top)"
echo " --add directory add directory to library search path"
echo " --1bitsgd[=(yes|no)] use 1Bit SGD $(show_default ${default_use_1bitsgd})"
echo " --asgd[=(yes|no)] use ASGD powered by Multiverso $(show_default $(default_use_asgd))"
echo " --cuda[=(yes|no)] use cuda GPU $(show_default $(default_use_cuda))"
echo " --python[=(yes|no)] with Python bindings $(show_default $(default_use_python))"
echo " --mpi[=(yes|no)] use MPI communication $(show_default ${default_use_mpi})"
echo " --with-cuda[=directory] $(show_default $(find_cuda))"
echo " --with-cub[=directory] $(show_default $(find_cub))"
echo " --with-gdk-include[=directory] $(show_default $(find_gdk_include))"
echo " --with-gdk-nvml-lib[=directory] $(show_default $(find_gdk_nvml_lib))"
echo " --with-cudnn[=directory] $(show_default $(find_cudnn))"
echo " --with-nccl[=directory] $(show_default $(find_nccl))"
echo " --with-mkl[=directory] $(show_default $(find_mkl))"
echo " --with-mkl-sequential[=directory] $(show_default $(find_mkl))"
echo " --with-openblas[=directory] (experimental) $(show_default $(find_openblas))"
echo " --with-buildtype=(debug|release) $(show_default $default_buildtype)"
echo " --with-kaldi[=directory] $(show_default $(find_kaldi))"
echo " --with-opencv[=directory] $(show_default $(find_opencv))"
echo " --with-libzip[=directory] $(show_default $(find_libzip))"
echo " --with-code-coverage[=(yes|no)] $(show_default ${default_use_code_coverage})"
echo " --with-boost[=directory] $(show_default $(find_boost))"
echo " --with-protobuf[=directory] $(show_default $(find_protobuf))"
echo " --with-py-versions=(space-separated list of 27, 34, 35)"
echo " --with-py27-path[=directory] $(show_default $(find_python 27))"
echo " --with-py34-path[=directory] $(show_default $(find_python 34))"
echo " --with-py35-path[=directory] $(show_default $(find_python 35))"
echo " --with-swig[=directory] $(show_default $(find_swig))"
echo " --with-mpi[=directory] $(show_default $(find_mpi))"
echo "Libraries search path:"
for head in $(default_paths)
do
echo " $head"
done
}
while [[ $# > 0 ]]
do
key="$1"
case $key in
*=?*) optarg=`expr "X$key" : '[^=]*=\(.*\)'` ;;
*=) optarg= ;;
*) optarg= ;;
esac
case $key in
-h|--help)
show_help
exit 1
;;
--with-build-top*)
if test x$optarg != x
then
build_top=$optarg
mkdir -p $build_top
fi
;;
--add*)
if test x$optarg = x
then
shift ; optarg=$1
fi
default_path_list="$optarg $default_path_list"
;;
--1bitsgd*)
if test x$optarg = xyes || test x$optarg = xno
then
enable_1bitsgd=$optarg
else
echo "Invalid value for --1bitsgd $optarg"
show_help
exit
fi
;;
--with-code-coverage*)
if test x$optarg = xyes || test x$optarg = xno
then
enable_code_coverage=$optarg
else
echo "Invalid value for --with-code-coverage $optarg"
show_help
exit
fi
;;
--asgd*)
if test x$optarg = xyes || test x$optarg = xno
then
enable_asgd=$optarg
else
echo "Invalid value for --asgd $optarg"
show_help
exit
fi
;;
--cuda*)
if test x$optarg = xyes || test x$optarg = xno
then
enable_cuda=$optarg
else
echo "Invalid value for --cuda $optarg"
show_help
exit
fi
;;
--python*)
if test x$optarg = xyes || test x$optarg = xno
then
enable_python=$optarg
else
echo "Invalid value for --python $optarg"
show_help
exit
fi
;;
--with-py-versions*)
enable_python=yes
if test "x$optarg" = "x"
then
echo "Mandatory parameter for --with-py-versions missing. Use '--python no' to disable Python support completely."
show_help
exit 1
else
for ver in $optarg
do
case $ver in
27 | 34 | 35)
;;
*)
echo "Invalid value for --with-py-versions $optarg: invalid version $ver"
show_help
exit
esac
done
# TODO filter duplicates?
py_versions="$optarg"
fi
;;
--with-py27-path*|--with-py34-path*|--with-py35-path*)
enable_python=yes
py_version=${key:9:2}
if test x$optarg = x
then
py_paths[$py_version]=$(find_python $py_version)
if test x${py_paths[$py_version]} = x
then
echo "Cannot find Python $py_version directory."
echo "Please specify a value for $key"
exit 1
fi
else
if check_python $py_version "$optarg"
then
py_paths[$py_version]=$optarg
else
echo "Invalid Python $py_version directory $optarg"
exit 1
fi
fi
;;
--with-swig*)
have_swig=yes
if test x$optarg = x
then
swig_path=$(find_swig)
if test x$swig_path = x
then
echo "Cannot find SWIG directory."
echo "Please specify a value for --with-swig"
exit 1
fi
else
if check_swig "$optarg"
then
swig_path=$optarg
else
echo "Invalid SWIG directory $optarg"
exit 1
fi
fi
;;
--mpi*)
if test x$optarg = xyes || test x$optarg = xno
then
have_mpi=$optarg
else
echo "Invalid value for --mpi $optarg"
show_help
exit
fi
;;
--with-cuda*)
enable_cuda=yes
if test x$optarg = x
then
cuda_path=$(find_cuda)
if test x$cuda_path = x
then
echo "Cannot find cuda directory."
echo "Please specify a value for --with-cuda"
exit 1
fi
else
if test $(check_dir $optarg $cuda_check) = yes
then
cuda_path=$optarg
else
echo "Invalid cuda directory $optarg"
exit 1
fi
fi
;;
--with-cub*)
have_cub=yes
if test x$optarg = x
then
cub_path=$(find_cub)
if test x$cub_path = x
then
echo "Cannot find NVIDIA CUB directory."
echo "Please specify a value for --with-cub"
echo "NVIDIA CUB can be downloaded from https://github.com/NVlabs/cub/archive/1.4.1.zip, extract the archive to /usr/local"
exit 1
fi
else
if test $(check_dir $optarg $cub_check) = yes
then
cub_path=$optarg
else
echo "Invalid CUB directory $optarg"
exit 1
fi
fi
;;
--with-gdk-include*)
have_gdk_include=yes
if test x$optarg = x
then
gdk_include_path=$(find_gdk_include)
if test x$gdk_include_path = x
then
echo "Cannot find GDK include directory."
echo "Please specify a value for --with-gdk-include"
exit 1
fi
else
if test $(check_dir $optarg $gdk_include_check) = yes
then
gdk_include_path=$optarg
else
echo "Invalid GDK include directory $optarg"
exit 1
fi
fi
;;
--with-gdk-nvml-lib*)
have_gdk_nvml_lib=yes
if test x$optarg = x
then
gdk_nvml_lib_path=$(find_gdk_nvml_lib)
if test x$gdk_nvml_lib_path = x
then
echo "Cannot find GDK NVML library directory."
echo "Please specify a value for --with-gdk-nvml-lib"
exit 1
fi
else
if test $(check_dir $optarg $gdk_nvml_lib_check) = yes
then
gdk_nvml_lib_path=$optarg
else
echo "Invalid GDK NVML library directory $optarg"
exit 1
fi
fi
;;
--with-cudnn*)
have_cudnn=yes
if test x$optarg = x
then
cudnn_path=$(find_cudnn)
if test x$cudnn_path = x
then
echo "Cannot find NVIDIA cuDNN directory."
echo "Please specify a value for --with-cudnn"
exit 1
fi
else
if test $(check_dir $optarg $cudnn_check) = yes
then
cudnn_path=$optarg
else
echo "Invalid cuDNN directory $optarg"
exit 1
fi
fi
;;
--with-nccl*)
have_nccl=yes
if test x$optarg = x
then
nccl_path=$(find_nccl)
if test x$nccl_path = x
then
echo "Cannot find NCCL directory."
echo "Please specify a value for --with-nccl"
echo "NCCL can be downloaded from https://github.com/NVIDIA/nccl"
exit 1
fi
else
if test $(check_dir $optarg $nccl_check) = yes
then
nccl_path=$optarg
else
echo "Invalid NCCL directory $optarg"
exit 1
fi
fi
;;
--with-mkl*)
have_mkl=yes
mathlib=mkl
mkl_threading=parallel
case $key in
--with-mkl-sequential*) mkl_threading=sequential ;;
esac
if test x$optarg = x
then
mkl_path=$(find_mkl)
if test x$mkl_path = x
then
echo "Cannot find CNTK custom MKL directory (version $cntk_custom_mkl_version)"
echo "Please specify a value for --with-mkl"
exit 1
fi
else
if test $(check_dir $optarg $mkl_check) = yes
then
mkl_path=$optarg
else
echo "Invalid CNTK custom MKL directory $optarg"
exit 1
fi
fi
;;
--with-openblas*)
have_openblas=yes
mathlib=openblas
if test x$optarg = x
then
openblas_path=$(find_openblas)
if test x$openblas_path = x
then
echo "Cannot find openblas directory"
echo "Please specify a value for --with-openblas"
exit 1
fi
else
if test $(check_dir $optarg $openblas_check) = yes
then
openblas_path=$optarg
else
echo "Invalid openblas directory $optarg"
exit 1
fi
fi
;;
--with-boost*)
if test x$optarg = x
then
boost_path=$(find_boost)
if test x$boost_path = x
then
echo "Cannot find Boost directory"
echo "Please specify a value for --with-boost"
exit 1
fi
else
if test $(check_dir $optarg $boost_check) = yes
then
boost_path=$optarg
else
echo "Invalid Boost directory $optarg"
exit 1
fi
fi
;;
--with-protobuf*)
if test x$optarg = x
then
protobuf_path=$(find_protobuf)
if test x$protobuf_path = x
then
echo "Cannot find Protocol Buffers directory"
echo "Please specify a value for --with-protobuf"
exit 1
fi
else
if test $(check_dir $optarg $protobuf_check) = yes
then
protobuf_path=$optarg
else
echo "Invalid Protocol Buffers directory $optarg"
exit 1
fi
fi
;;
--with-buildtype*)
have_buildtype=yes
case $optarg in
debug|release)
buildtype=$optarg
;;
*)
echo Invalid buildtype $optarg
echo Must be debug or release
exit 1
esac
;;
--with-kaldi*)
have_kaldi=yes
if test x$optarg = x
then
kaldi_path=$(find_kaldi)
if test x$kaldi_path = x
then
echo "Cannot find kaldi directory"
echo "Please specify a value for --with-kaldi"
exit 1
fi
else
if test $(check_dir $optarg $kaldi_check)
then
kaldi_path=$optarg
else
echo "Invalid kaldi directory $optarg"
exit 1
fi
fi
;;
--with-opencv*)
have_opencv=yes
if test x$optarg = x
then
opencv_path=$(find_opencv)
if test x$opencv_path = x
then
echo "Cannot find OpenCV directory."
echo "Please specify a value for --with-opencv"
echo "OpenCV can be downloaded from http://opencv.org/downloads.html, install instructions http://docs.opencv.org/doc/tutorials/introduction/linux_install/linux_install.html#linux-installation"
exit 1
fi
else
if test $(check_dir $optarg $opencv_check) = yes
then
opencv_path=$optarg
else
echo "Invalid OpenCV directory $optarg"
exit 1
fi
fi
;;
--with-libzip*)
have_libzip=yes
if test x$optarg = x
then
libzip_path=$(find_libzip)
if test x$libzip_path = x
then
echo "Cannot find libzip directory."
echo "Please specify a value for --with-libzip"
echo "libzip (v.1.1.2 or higher) can be downloaded from http://www.nih.at/libzip/"
exit 1
fi
else
if test $(check_dir $optarg $libzip_check) = yes
then
libzip_path=$optarg
else
echo "Invalid libzip directory $optarg"
exit 1
fi
fi
;;
--with-mpi*)
if test x$optarg = x
then
mpi_path=$(find_mpi)
if test x$mpi_path = x
then
echo "Cannot find mpi directory."
exit 1
fi
else
if test $(check_dir $optarg $mpi_check) = yes
then
mpi_path=$optarg
else
echo "Invalid mpi directory $optarg"
exit 1
fi
fi
;;
*)
echo Invalid option $key
show_help
exit 1
esac
shift
done
if test x$buildtype = x
then
buildtype=$default_buildtype
echo Defaulting to --with-buildtype=release
fi
# If no math library was specified, search for mkl
if test x$have_mkl = xno && test x$have_openblas = xno
then
mkl_path=$(find_mkl)
if test x$mkl_path = x
then
echo "Cannot find a CPU math library."
echo "Please specify --with-mkl, --with-mkl-sequential, --with-openblas with a path."
exit 1
else
mathlib=mkl
fi
fi
# If no cuda library specified, search for one
if test x$enable_cuda = xyes && test x$cuda_path = x
then
cuda_path=$(find_cuda)
if test x$cuda_path = x ; then
echo Cannot locate a cuda directory
echo GPU will be disabled
enable_cuda=no
else
echo Found cuda at $cuda_path
fi
fi
if test $enable_cuda = yes && test x$gdk_include_path = x
then
gdk_include_path=$(find_gdk_include)
if test x$gdk_include_path = x ; then
echo Cannot locate a GDK include directory
echo GPU will be disabled
enable_cuda=no
else
echo Found GDK include at $gdk_include_path
fi
fi
if test $enable_cuda = yes && test x$gdk_nvml_lib_path = x
then
gdk_nvml_lib_path=$(find_gdk_nvml_lib)
if test x$gdk_nvml_lib_path = x ; then
echo Cannot locate a GDK NVML library directory
echo GPU will be disabled
enable_cuda=no
else
echo Found GDK NVML library at $gdk_nvml_lib_path
fi
fi
if test $enable_cuda = yes && test x$cub_path = x
then
cub_path=$(find_cub)
if test x$cub_path = x ; then
echo Cannot locate NVIDIA CUB directory
echo GPU will be disabled
echo NVIDIA CUB can be downloaded from https://github.com/NVlabs/cub/archive/1.4.1.zip, extract the archive to /usr/local
enable_cuda=no
else
echo Found CUB at $cub_path
fi
fi
if test $enable_cuda = yes && test x$cudnn_path = x
then
cudnn_path=$(find_cudnn)
if test x$cudnn_path = x ; then
echo Cannot locate NVIDIA cuDNN directory
echo CNTK will use default convolution engine.
else
echo Found cuDNN at $cudnn_path
fi
fi
if test $enable_python = yes && test x$swig_path = x
then
swig_path=$(find_swig)
if test x$swig_path = x
then
echo 'Cannot locate SWIG (>= 3.0.10), which is required Python support.'
echo Check bindings/python/swig_install.sh for build instructions.
exit 1
fi
fi
if test $enable_python = yes
then
# TODO disabled for now. Default Python versions may miss dependencies we do not
# check for here yet, only support explicitly specified paths.
# Fill unfilled default paths
#[ -z "${py_paths[27]}" ] && find_python 27 && py_paths[27]=$(find_python 27)
#[ -z "${py_paths[34]}" ] && find_python 34 && py_paths[34]=$(find_python 34)
#[ -z "${py_paths[35]}" ] && find_python 35 && py_paths[35]=$(find_python 35)
# Unless there's a specified order or restriction, take all configured Python versions (old to new)
[ -z "$py_versions" ] && py_versions=${!py_paths[@]}
py_versions="$py_versions "
# Make sure each requested version is configured, remove other parts
for ver in 27 34 35
do
case $py_versions in
*$ver\ *)
# Build for version is requested, check if configured
if [ -z "${py_paths[$ver]}" ]
then
echo Build for Python version $ver was requested, but is not configured.
exit 1
fi
;;
*)
# Build for version is not requested, unconfigure
unset -v py_paths[$ver]
;;
esac
done
fi
if test $enable_cuda = yes && test x$nccl_path = x
then
nccl_path=$(find_nccl)
if test x$nccl_path != x; then
echo Found NCCL at $nccl_path
fi
fi
if test x$opencv_path = x
then
opencv_path=$(find_opencv)
if test x$opencv_path = x ; then
echo Cannot locate OpenCV 3.0.0 directory
echo ImageReader will NOT be built.
else
echo Found OpenCV at $opencv_path
fi
fi
if test x$libzip_path = x
then
libzip_path=$(find_libzip)
if test x$libzip_path = x ; then
echo Cannot locate libzip files
echo ImageReader will be built without zip container support.
else
echo Found libzip at $libzip_path
fi
fi
if test x$kaldi_path = x
then
kaldi_path=$(find_kaldi)
if test x$kaldi_path = x ; then
echo Cannot locate Kaldi files
echo Kaldi2Reader will NOT be built.
else
echo Found Kaldi at $kaldi_path
fi
fi
if test x$boost_path = x
then
boost_path=$(find_boost)
if test x$boost_path = x
then
echo Cannot locate Boost libraries. See
echo https://github.com/Microsoft/CNTK/wiki/Setup-CNTK-on-Linux#boost-library
echo for installation instructions.
exit 1
else
echo Found Boost at $boost_path
fi
fi
if test x$protobuf_path = x
then
protobuf_path=$(find_protobuf)
if test x$protobuf_path = x
then
echo Cannot locate Protocol Buffers library. See
echo https://github.com/Microsoft/CNTK/wiki/Setup-CNTK-on-Linux#protobuf
echo for installation instructions.
exit 1
else
echo Found Protocol Buffers at $protobuf_path
fi
fi
if test x$mpi_path = x
then
mpi_path=$(find_mpi)
if test x${mpi_path} = x
then
echo Cannot locate MPI library. See
echo https://github.com/Microsoft/CNTK/wiki/Setup-CNTK-on-Linux#open-mpi
echo for installation instructions.
exit 1
else
echo Found MPI at $mpi_path
fi
fi
config=$build_top/Config.make
echo Generating $config
echo "#Configuration file for cntk" > $config
echo BUILDTYPE=$buildtype >> $config
echo MATHLIB=$mathlib >> $config
case $mathlib in
mkl)
echo MKL_PATH=$mkl_path >> $config
echo MKL_THREADING=$mkl_threading >> $config
echo CNTK_CUSTOM_MKL_VERSION=$cntk_custom_mkl_version >> $config
;;
openblas)
echo OPENBLAS_PATH=$openblas_path >> $config
;;
esac
if test $have_mpi = yes ; then
echo HAS_MPI=1 >> $config
else
echo HAS_MPI=0 >> $config
fi
if test $enable_cuda = yes ; then
echo CUDA_PATH=$cuda_path >> $config
echo GDK_INCLUDE_PATH=$gdk_include_path >> $config
echo GDK_NVML_LIB_PATH=$gdk_nvml_lib_path >> $config
echo CUB_PATH=$cub_path >> $config
echo CUDNN_PATH=$cudnn_path >> $config
[ -z "$nccl_path" ] || echo NCCL_PATH=$nccl_path >> $config
fi
if test $enable_python = yes ; then
echo PYTHON_SUPPORT=true >> $config
echo SWIG_PATH=$swig_path/bin >> $config
# N.B. PYTHON_VERSIONS at least needs to be parseable by bash (cf. Tools/generate_build_info)
echo PYTHON_VERSIONS= >> $config
for ver in $py_versions
do
echo PYTHON_VERSIONS+=$ver >> $config
echo PYTHON${ver}_PATH=${py_paths[$ver]}/$py_check >> $config
done
fi
if test x$kaldi_path != x ; then
echo KALDI_PATH=$kaldi_path >> $config
fi
if test x$opencv_path != x ; then
echo OPENCV_PATH=$opencv_path >> $config
fi
if test x$libzip_path != x ; then
echo LIBZIP_PATH=$libzip_path >> $config
fi
if test $enable_1bitsgd = yes ; then
echo CNTK_ENABLE_1BitSGD=true >> $config
fi
if test $enable_code_coverage = yes ; then
echo CNTK_CODE_COVERAGE=true >> $config
fi
if test x$boost_path != x; then
echo BOOST_PATH=$boost_path >> $config
fi
if test x$protobuf_path != x; then
echo PROTOBUF_PATH=$protobuf_path >> $config
fi
if test x$mpi_path != x; then
echo MPI_PATH=$mpi_path >> $config
fi
if test $enable_asgd = yes ; then
echo CNTK_ENABLE_ASGD=true >> $config
fi
# If we are not in the configure directory, generate a trampoline Makefile
makefile=$build_top/Makefile
if test $(is_hardlinked "$configure" "$build_top/configure") = no
then
echo Generating $makefile
realconf=`readlink -f $configure`
dir=`dirname $realconf`
echo "#Generate Makefile" > $makefile
echo dir=$dir >> $makefile
echo BUILD_TOP=$build_top >> $makefile
echo >> $makefile
echo all clean : >> $makefile
printf '\t$(MAKE) -C $(dir) BUILD_TOP=$(BUILD_TOP) $@\n' >> $makefile
fi
echo run
echo '>make -j $(nproc) all'
echo to build
# vim:set expandtab tabstop=4 shiftwidth=4:
Computing file changes ...