#!/bin/bash
ROOT_DIR=$(dirname $0)
cat > ./mic-config.log << EOF
This file was created by StarPU mic-configure
$ $0 $*
EOF
prefix="/usr/local"
coi_dir="/opt/intel/mic/coi"
scif_dir="/opt/intel/mic/scif"
mic_host="x86_64-k1om-linux"
declare -a host_params
declare -a mic_params
unset host_params
unset mic_params
native_mic=0
mpi=0
for arg in "$@"
do
case $arg in
--prefix=*)
prefix="${arg#--prefix=}"
;;
--with-coi-dir=*)
coi_dir="${arg#--with-coi-dir=}"
;;
--with-scif-dir=*)
scif_dir="${arg#--with-scif-dir=}"
;;
--mic-host=*)
mic_host="${arg#--mic-host=}"
;;
--enable-native-mic)
native_mic=1
;;
--with-compiler=*)
compiler="${arg#--with-compiler=}"
;;
--with-mic-param=*)
mic_params+=("${arg#--with-mic-param=}")
;;
--with-host-param=*)
host_params+=("${arg#--with-host-param=}")
;;
--with-mpi*)
mpi=1
;;
--help)
cat << EOF
mic-configure specific options:
--with-coi-dir=DIR Specify directory that contains
device-linux-release/lib/libcoi_device and
host-linux-release/lib/libcoi_host and
--with-scif-dir=DIR Specify directory that contains
device-linux-release/lib/libscif_device and
host-linux-release/lib/libscif_host and
--mic-host=HOST Specify the precise Phi host to build for
(default: k1om)
--with-compiler=[icc|gcc]
Specify whether to build with icc or with gcc
--enable-native-mic Only build the Phi binaries
--with-mic-param=--OPTION
Pass --OPTION to the Phi configure script
--with-host-param=--OPTION
Pass --OPTION to the host configure script
EOF
;;
esac
done
if [ -z "$compiler" ]
then
# Test gcc compiler
x=$(type -t ${mic_host}-gcc)
if [ -z "$x" ]
then
# Test icc compiler
echo "int main(int argc, char **argv) { return 0; }" > /tmp/icc_$USER_$$.c
icc -mmic /tmp/icc_$USER_$$.c > /dev/null 2>/tmp/icc_$USER_$$.err
l=$(grep -c "invalid argument" /tmp/icc_$USER_$$.err)
if [ "$l" != "0" ]
then
echo "[error] no compiler found. please add path to either ${mic_host}-gcc or to an enabled mic icc compiler in your PATH"
exit 1
else
compiler="icc"
fi
else
compiler="gcc"
fi
fi
dev_list="host mic"
if [ "$native_mic" -eq "1" ]
then
dev_list="mic"
fi
# prepend mic_params with "--with-mpicc=mpicc -mmic", to allow possible override by the user
if [ $mpi = 1 ]
then
mic_params=("--with-mpicc=mpicc -mmic" "${mic_params[@]}")
mic_params=("--with-mpifort=mpifort -mmic" "${mic_params[@]}")
fi
for arch in $dev_list #host mic
do
# We call the configure script from a build directory further in the
# arborescence
case $ROOT_DIR in
/*) command="${ROOT_DIR}/configure";;
*) command="../${ROOT_DIR}/configure";;
esac
declare -a params
params=("--prefix=$prefix/$arch" "--disable-fstack-protector-all")
if [ "$arch" = mic ] ; then
if [ $compiler = "icc" ] ; then
export CC="icc -mmic"
export CXX="icc -mmic"
export LD="icc -mmic"
export CXXLD="icc -mmic"
export F77="ifort -mmic"
export FC="ifort -mmic"
else
# let configure auto-detect GNU cross-building tools
unset CC
unset CXX
unset LD
unset CXXLD
unset F77
unset FC
params+=(--disable-fortran)
fi
fi
if [ "$native_mic" -eq "0" ]
then
params+=(--enable-mic "--with-coi-dir=$coi_dir" "--with-scif-dir=$scif_dir")
fi
if test x$arch = xmic ; then
params+=(--host=$mic_host --disable-build-doc)
if [ "$native_mic" -eq "1" ]
then
params+=(--enable-maxcpus=250)
else
params+=("--with-coi-lib-dir=$coi_dir/device-linux-release/lib" "--with-scif-lib-dir=$scif_dir/device-linux-release/lib")
fi
else
params+=("--with-coi-lib-dir=$coi_dir/host-linux-release/lib" "--with-scif-lib-dir=$scif_dir/host-linux-release/lib")
fi
# If the build directory doesn't exist yet, create it
if [ ! -d "build_${arch}" ] ; then
mkdir "build_${arch}"
fi
cd "build_${arch}"
if test x$arch = xmic ; then
LIBRARY_PATH=$SINK_LIBRARY_PATH \
INCLUDE=$SINK_INCLUDE \
C_INCLUDE_PATH=$SINK_C_INCLUDE_PATH \
CPLUS_INCLUDE_PATH=$SINK_CPLUS_INCLUDE_PATH \
PKG_CONFIG_PATH=$SINK_PKG_CONFIG_PATH \
$command "$@" "${params[@]}" "${mic_params[@]}"
MIC_BUILD_ENV="\
LIBRARY_PATH=$SINK_LIBRARY_PATH \\
INCLUDE=$SINK_INCLUDE \\
C_INCLUDE_PATH=$SINK_C_INCLUDE_PATH \\
CPLUS_INCLUDE_PATH=$SINK_CPLUS_INCLUDE_PATH \\
PKG_CONFIG_PATH=$SINK_PKG_CONFIG_PATH \\\
"
else
$command "$@" "${params[@]}""${host_params[@]}"
fi
if [ "$?" != 0 ]
then
exit $?
fi
cd ..
done
if [ "$native_mic" -eq "1" ]
then
cat > Makefile << EOF
all:
$MIC_BUILD_ENV
\$(MAKE) \$(MFLAGS) -C build_mic
clean:
\$(MAKE) \$(MFLAGS) -C build_mic clean
distclean: clean
rm -f Makefile
check:
$MIC_BUILD_ENV
\$(MAKE) \$(MFLAGS) -C build_mic check
showcheck:
\$(MAKE) \$(MFLAGS) -C build_mic showcheck
install:
$MIC_BUILD_ENV
\$(MAKE) \$(MFLAGS) -C build_mic install
ln -sf "${prefix}/mic/lib/pkgconfig/starpu-1.2.pc" "${prefix}/mic/lib/pkgconfig/starpu-1.2-mic.pc"
EOF
else
cat > Makefile << EOF
all:
\$(MAKE) \$(MFLAGS) -C build_host
$MIC_BUILD_ENV
\$(MAKE) \$(MFLAGS) -C build_mic
clean:
\$(MAKE) \$(MFLAGS) -C build_host clean
\$(MAKE) \$(MFLAGS) -C build_mic clean
distclean: clean
rm -f Makefile
check:
\$(MAKE) \$(MFLAGS) -C build_host check
$MIC_BUILD_ENV
\$(MAKE) \$(MFLAGS) -C build_mic check ; \
RET=\$\$? ; \
STARPU_NCPUS=0 \$(MAKE) \$(MFLAGS) -C build_mic check && [ \$\$RET == 0 ]
showcheck:
\$(MAKE) \$(MFLAGS) -C build_host showcheck
\$(MAKE) \$(MFLAGS) -C build_mic showcheck
install:
\$(MAKE) \$(MFLAGS) -C build_host install
$MIC_BUILD_ENV
\$(MAKE) \$(MFLAGS) -C build_mic install
ln -sf "${prefix}/mic/lib/pkgconfig/starpu-1.2.pc" "${prefix}/mic/lib/pkgconfig/starpu-1.2-mic.pc"
EOF
fi