https://github.com/ecrc/exageostatR
Tip revision: de7cbf0cd9dd438807eba9fe201f8aa3a900ca09 authored by Sameh Abdulah on 10 September 2020, 10:30:23 UTC
minor fix
minor fix
Tip revision: de7cbf0
configure
#!/usr/bin/env bash
# Configure script for R package generation
#
#
#
#Sys.setenv(PKG_CONFIG_PATH=paste(Sys.getenv("PKG_CONFIG_PATH"),paste(.libPaths(),"exageostat/lib/pkgconfig",sep='/',collapse=':'),sep=':'))
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${R_HOME}/exageostat/lib/pkgconfig
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$R_LIBS_USER/exageostat/lib/pkgconfig
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$R_LIBS/exageostat/lib/pkgconfig
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$R_PACKAGE_DIR/exageostat/lib/pkgconfig # if user uses -l option
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${R_HOME}/exageostat/lib
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$R_LIBS_USER/exageostat/lib
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$R_LIBS/exageostat/lib
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$R_PACKAGE_DIR/exageostat/lib
#export CPATH=$CPATH:$R_INCLUDE_DIR
#export CPATH=$R_INCLUDE_DIR
#export C_INCLUDE_PATH=$R_INCLUDE_DIR
#export CPLUS_INCLUDE_PATH=$R_INCLUDE_DIR
#export GCC_INCLUDE_DIR=$R_INCLUDE_DIR
#STRARPU_HOME=$TMPDIR
echo "==========================================="
echo $TMPDIR
echo $OPENBLAS_ROOT
echo $OPEMBLASROOT
echo $R_PACKAGE_DIR
echo $R_INCLUDE_DIR
echo ${R_HOME}
echo ${TMPDIR}
echo ${TEMPDIR}
echo ${TMPDIR}
echo ${TMP}
echo ${TEMP}
echo "============================================"
#echo -e " \033[38;2;255;0;0m CMake is required and not found!"
#echo -e " \033[0;0;0;0;0m"
#Get the number of CPUs
cpucores=`getconf _NPROCESSORS_ONLN`
#cpucores=1
#VARIABLES
MAKE=${MAKE:-make -j $(cpucores) -l $((cpucores + 1))}
BASEDIR=$(pwd)
TMPDIR=$BASEDIR/_$$
#export STARPU_HOME=~/trash"
#TMPDIR="/tmp/exageostatr"
BUILD_DEPENDENCIES='true'
err=0
CUDAVALUE="OFF"
MPIVALUE="OFF"
mkdir -p $TMPDIR
SETUP_DIR=${R_PACKAGE_DIR:-''}
print_usage() {
echo "usage: $0 [--enable-mpi|--disable-mpi] [--prefix /path/to/install]"
}
while [ -n "$1" ]
do
case "$1" in
--enable-cuda)
CUDAVALUE="ON"
shift
;;
--enable-mpi)
MPIVALUE="ON"
shift
;;
--disable-mpi)
MPIVALUE="OFF"
shift
;;
--build-deps)
BUILD_DEPENDENCIES='true'
shift
;;
--no-build-deps)
BUILD_DEPENDENCIES='false'
shift
;;
--prefix)
shift
SETUP_DIR=$1
# Set this paths as rpath during compilation
rpaths="-Wl,-rpath=$SETUP_DIR/lib -L$SETUP_DIR/lib "
echo "LDFLAGS += $rpaths " >> $BASEDIR/src/Makefile
shift
;;
--help|-h)
print_usage
exit 0
;;
*)
print_usage
exit 1
;;
esac
done
if [ -z "$SETUP_DIR" ]; then
# Use RLIBS for setup dir
arr=(`Rscript -e '.libPaths()' | awk '{Rprintf "%s ",$2}'`)
for i in ${!arr[*]};
do
dir=`echo ${arr[$i]}|tr -d \"`
if [ -d "$dir" ] && [ -w "$dir" ]
then
SETUP_DIR="$dir/exageostat"
break
fi
done
fi
mkdir -p $SETUP_DIR
if [ -z "$SETUP_DIR" ]
then
echo "Check your .libPaths() in R. Could not find a writable directory."
exit 1;
fi
PREFIX=$SETUP_DIR
############################## Check OS
echo "Finding the current os type"
echo
osType=$(uname)
case "$osType" in
"Darwin")
{
echo "Running on Mac OSX."
CURRENT_OS="OSX"
LIBEXT="dylib"
export DYLD_LIBRARY_PATH=$PREFIX/lib:$DYLD_LIBRARY_PATH
} ;;
"Linux")
{
echo "Running on LINUX."
CURRENT_OS="LINUX"
LIBEXT="so"
export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH
} ;;
*)
{
echo "Unsupported OS, exiting"
exit
} ;;
esac
# check submodules just in case
#git submodule update --init --recursive 2>&1 >/dev/null || true
##### check and build dependencies
# prepare environment
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH
if [ -n "$MKLROOT" ] && [ -d "$MKLROOT" ]; then
echo "mkl_dir directory exists!"
echo "Great... continue set-up"
source ${MKLROOT}/bin/mklvars.sh intel64
DEFINE_BLAS_LIBS_CMAKE="-DBLAS_LIBRARIES='-L${MKLROOT}/lib -Wl,-rpath,${MKLROOT}/lib -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl'"
#DEFINE_BLAS_LIBS_CMAKE="-DBLAS_LIBRARIES='-L${MKLROOT}/lib\ -Wl,-rpath,${MKLROOT}/lib\ -lmkl_intel_lp64\ -lmkl_sequential\ -lmkl_core\ -lpthread\ -lm\ -ldl'"
XFLAG="-DBLA_VENDOR=Intel"
else
echo "MKL not found, trying to compile and use OpenBLAS"
XFLAG="-DBLA_VENDOR=Open"
USE_OPENBLAS='true'
fi
#set pkgconfig path including possible installation dir
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$SETUP_DIR/lib/pkgconfig
# openblas
if [ "true" == "$USE_OPENBLAS" ]
then
#obenblas will not be installed.
_OPENBLAS='true'
# _OPENBLAS='false'
if pkg-config --exists openblas
then
#check for lapacke.h
# _LOCATION=`pkg-config --variable=includedir openblas`
# if stat "${_LOCATION}/lapacke.h" >/dev/null 2>&1
# then
_LOCATION=`pkg-config --variable=libdir openblas`
echo "OpenBLAS FOUND in [$_LOCATION]"
_OPENBLAS='true'
# fi
fi
if [ -n "$OPENBLAS_ROOT" ] && [ -d "$OPENBLAS_ROOT" ];
then
echo "OpenBLAS FOUND in [$OPENBLAS_ROOT]"
_OPENBLAS='true'
fi
if [ "false" == "${_OPENBLAS}" ]
then
if [ "$BUILD_DEPENDENCIES" == "true" ]
then
echo "Building OpenBLAS..."
cd $TMPDIR
wget https://github.com/xianyi/OpenBLAS/archive/v0.3.7.tar.gz -O - | tar -zx
cd OpenBLAS-0.3.7
$MAKE -j PREFIX=$PREFIX >/dev/null|| $MAKE PREFIX=$PREFIX || { echo 'OpenBLAS installation failed' ; exit 1; }
$MAKE install PREFIX=$PREFIX
export CPATH=$PREFIX/include:$CPATH
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH
OPENBLAS_CFLAGS=`pkg-config --variable=includedir openblas`
OPENBLAS_LIBS=`pkg-config --variable=libdir openblas`
PKG_CPPFLAGS=`pkg-config --variable=includedir openblas`
PKG_LIBS=-l$PREFIX/lib/libopenblas.so
echo "========================="
echo $PKG_LIBS
echo "+++++++++++++++++++++++++="
#DEFINE_BLAS_LIBS_CMAKE="-DBLAS_DIR='${PREFIX}' -DCBLAS_DIR='${PREFIX}' -DLAPACK_DIR='${PREFIX}' -DLAPACKE_DIR='${PREFIX}' -DTMG='${PREFIX}'"
#export OPENBLAS_CFLAGS=-I$PREFIX/include
#export OPENBLAS_LIBS=-L$PREFIX/lib
#export BLAS_OPENBLAS_CFLAGS=-I{$PREFIX/include
export BLAS_OPENBLAS_LIBS=-l$PREFIX/lib/libopenblas.so
#cp $PREFIX/lib/libopenblas.so $BASEDIR/src
#export BLAS_LIBS=-L{$PREFIX}/lib
else
echo "####################"
echo "OpenBLAS NOT FOUND"
echo "Please download it from: https://github.com/xianyi/OpenBLAS/releases"
echo "After installing it, set the proper PKG_CONFIG_PATH variable"
echo ""
err=1
fi
fi
fi
# gsl
if pkg-config --exists --atleast-version=2 gsl
then
_LOCATION=`pkg-config --variable=prefix gsl`
echo "gsl FOUND in [$_LOCATION]"
else
if [ "$BUILD_DEPENDENCIES" == "true" ]
then
echo "Building GSL..."
cd $TMPDIR
wget https://ftp.gnu.org/gnu/gsl/gsl-2.4.tar.gz -O - | tar -zx
cd gsl-2.4
./configure --prefix=$PREFIX
$MAKE || $MAKE VERBOSE=1 || { echo 'GSL installation failed' ; exit 1; }
$MAKE install
else
echo "####################"
echo "gsl NOT FOUND"
echo "Please download it from: https://ftp.gnu.org/gnu/gsl/gsl-2.4.tar.gz"
echo "After installing it, set the proper PKG_CONFIG_PATH variable"
echo ""
err=1
fi
fi
echo "==========================================="
#EXAGEOSTAT_CONFIG=`Rscript -e '.libPaths()' | awk '{printf "%s/exageostat/lib/pkgconfig:",substr($2,2,length($2)-2)}'`
echo ${R_HOME}
echo "==========================================="
echo $R_LIBS_USER
echo "==========================================="
echo $R_LIBS
echo "==========================================="
#Rscript -e '.libPaths()'
echo $PKG_LIBS
echo "==========================================="
echo $PKG_CXXFLAGS
echo "==========================================="
echo $PKG_CONFIG_PATH
echo "==========================================="
echo $PKG_CPPFLAGS
echo "==========================================="
#nm $PREFIX/lib/libopenblas.so | grep "LAPACKE_slarfb_work"
echo "==========================================="
# nlopt
if pkg-config --exists --atleast-version=2.4 nlopt
then
_LOCATION=`pkg-config --variable=prefix nlopt`
echo "nlopt FOUND in [$_LOCATION]"
else
if [ "$BUILD_DEPENDENCIES" == "true" ]
then
echo "Building NLOPT..."
cd $TMPDIR
wget http://ab-initio.mit.edu/nlopt/nlopt-2.4.2.tar.gz -O - | tar -zx
cd nlopt-2.4.2
./configure --enable-shared --without-guile --prefix=$PREFIX
$MAKE || $MAKE VERBOSE=1 || { echo 'NLOPT installation failed' ; exit 1; }
$MAKE install
else
echo "####################"
echo "nlopt NOT FOUND"
echo "Please download it from: http://ab-initio.mit.edu/nlopt/nlopt-2.4.2.tar.gz"
echo "After installing it, set the proper PKG_CONFIG_PATH variable"
echo ""
err=1
fi
fi
# hwloc
if pkg-config --exists hwloc
then
_LOCATION=`pkg-config --variable=prefix hwloc`
echo "hwloc FOUND in [$_LOCATION]"
else
if [ "$BUILD_DEPENDENCIES" == "true" ]
then
echo "Building Hwloc..."
cd $TMPDIR
wget https://www.open-mpi.org/software/hwloc/v1.11/downloads/hwloc-1.11.5.tar.gz -O - | tar -zx
cd hwloc-1.11.5
./configure --prefix=$PREFIX
$MAKE || $MAKE VERBOSE=1 || { echo 'HWLOC installation failed' ; exit 1; }
$MAKE install
else
echo "####################"
echo "hwloc NOT FOUND"
echo "Please download it from: https://www.open-mpi.org/software/hwloc/v1.11/downloads/hwloc-1.11.5.tar.gz"
echo "After installing it, set the proper PKG_CONFIG_PATH variable"
echo ""
err=1
fi
fi
if pkg-config --exists libstarpu-1.2
then
echo " libstarpu-1.2 exist"
else
echo "libstarpu-1.2 not exist"
fi
if pkg-config --exists starpu-1.2
then
echo " starpu-1.2 exist"
else
echo "starpu-1.2 not exist"
fi
if pkg-config --exists libstarpu-1.3
then
echo " libstarpu-1.3 exist"
else echo "libstarpu-1.3 not exist"
fi
if pkg-config --exists starpu-1.3
then
echo " starpu-1.3 exist"
else
echo "starpu-1.3 not exist"
fi
if pkg-config --exists libstarpu
then
echo " libstarpu exist"
else
echo "libstarpu not exist"
fi
if pkg-config --exists starpu
then
echo " starpu exist"
else
echo "starpu not exist"
fi
# StarPU
if pkg-config --exists starpu-1.2
then
_LOCATION=`pkg-config --variable=prefix libstarpu`
echo "StarPU FOUND in [$_LOCATION]"
else
if [ "$BUILD_DEPENDENCIES" == "true" ]
then
echo "Building StarPU..."
cd $TMPDIR
wget http://starpu.gforge.inria.fr/files/starpu-1.2.9/starpu-1.2.9.tar.gz -O - | tar -zx
cd starpu-1.2.9
#CFLAGS=-Wno-implicit-function-declaration
if [ "$CUDAVALUE" == "ON" ]; then
if [ "$MPIVALUE" == "ON" ]; then
./configure --disable-starpufft --enable-cuda --disable-opencl --prefix=$PREFIX --disable-starpu-top --disable-starpufft --disable-build-doc --disable-starpufft-examples --disable-fortran --with-perf-model-dir=$TMPDIR --disable-fstack-protector-all --disable-gcc-extensions
else
./configure --disable-starpufft --enable-cuda --disable-opencl --prefix=$PREFIX --disable-starpu-top --disable-starpufft --disable-build-doc --disable-starpufft-examples --disable-fortran --with-perf-model-dir=$TMPDIR --disable-fstack-protector-all --disable-gcc-extensions
fi
else
if [ "$MPIVALUE" == "ON" ]; then
./configure --disable-starpufft --disable-cuda --disable-opencl --prefix=$PREFIX --disable-starpu-top --disable-starpufft --disable-build-doc --disable-starpufft-examples --disable-fortran --with-perf-model-dir=$TMPDIR --disable-fstack-protector-all --disable-gcc-extensions
else
./configure --disable-starpufft --disable-cuda --disable-opencl --prefix=$PREFIX --disable-starpu-top --disable-starpufft --disable-build-doc --disable-starpufft-examples --disable-fortran --disable-glpk --with-perf-model-dir=$TMPDIR --disable-fstack-protector-all --disable-gcc-extensions
fi
fi
$MAKE || $MAKE VERBOSE=1 || { echo 'STARPU installation failed' ; exit 1; }
$MAKE install
else
echo "####################"
echo "StarPU NOT FOUND"
echo "Please download it from: http://starpu.gforge.inria.fr/files/"
echo "After installing it, set the proper PKG_CONFIG_PATH variable"
echo ""
err=1
fi
fi
#echo "???????????????"
#cp $BASEDIR/src/libs/libudev.so.1 $PREFIX/lib
#cp $BASEDIR/src/libs/libudev.so $PREFIX/lib
#echo "????????????"
echo "============STARPU======================"
echo "$(ls $PREFIX/lib)"
echo "======================================"
#echo "Sameh ======================================"
#echo "$(ls $PREFIX/lib)"
#echo "======================================"
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PREFIX/lib
cd $BASEDIR
set -x
# CHAMELEON
#if pkg-config --exists chameleon
#then
# _LOCATION=`pkg-config --variable=prefix chameleon`
# echo "CHAMELEON FOUND in [$_LOCATION]"
#else
if [ "$BUILD_DEPENDENCIES" == "true" ]
then
echo "Building CHAMELEON..."
cd $TMPDIR
rm -rf h
git clone https://github.com/ecrc/hicma h
cd h
git submodule update --init --recursive 2>&1 >/dev/null || true
cd chameleon
git checkout 2803719fc79986242d17f79c7bb706b499adef23
#cp -r $BASEDIR/src/hicma $TMPDIR/h
#cd $TMPDIR/h/chameleon
mkdir -p build && cd build
rm -rf ./CMake*
LDFLAGS="-L$PREFIX/lib" cmake -DCMAKE_C_FLAGS=-fPIC -DCHAMELEON_USE_MPI=$MPIVALUE -DCMAKE_BUILD_TYPE="Release" -DCMAKE_C_FLAGS_RELEASE="-O3 -Ofast -w" -DCHAMELEON_USE_CUDA=$CUDAVALUE -DCHAMELEON_ENABLE_EXAMPLE=OFF -DCHAMELEON_ENABLE_TESTING=OFF -DCHAMELEON_ENABLE_TIMING=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=$PREFIX "$DEFINE_BLAS_LIBS_CMAKE" ..
echo "======================================"
echo "$(cat ./runtime/starpu/CMakeFiles/runtime_starpu_include.dir/build.make)"
echo "$(cat ./build.make)"
echo "======================================"
$MAKE || $MAKE VERBOSE=1 || { echo 'CHAMELEON installation failed' ; exit 1; }
$MAKE install
else
echo "####################"
echo "CHAMELEON NOT FOUND"
echo "Please download it from: https://gitlab.inria.fr/solverstack/chameleon.git"
echo "After installing it, set the proper PKG_CONFIG_PATH variable"
echo ""
err=1
fi
#fi
echo "============CHAMELEON======================"
echo "$(ls $PREFIX/lib)"
echo "======================================"
# starsh
#if pkg-config --exists --atleast-version=0.1.1 starsh
#then
# _LOCATION=`pkg-config --variable=prefix starsh`
# echo "starsh FOUND in [$_LOCATION]"
#else
if [ "$BUILD_DEPENDENCIES" == "true" ]
then
echo "Building STARS-H..."
#cd $BASEDIR/src/stars-h
cd $TMPDIR
rm -rf stars-h
git clone https://github.com/ecrc/stars-h stars-h
cd stars-h
git checkout 687c2dc6df085655959439c38a40ccbe7cb57f82
git submodule update --init --recursive 2>&1 >/dev/null || true
mkdir -p build && cd build
rm -rf ./CMake*
cmake -DCMAKE_C_FLAGS=-fPIC -DCMAKE_BUILD_TYPE="Release" -DCMAKE_C_FLAGS_RELEASE="-O3 -Ofast -w" -DOPENMP=OFF -DSTARPU=OFF -DEXAMPLES=OFF -DTESTING=OFF -DMPI=$MPIVALUE -DCMAKE_INSTALL_PREFIX=$PREFIX "$XFLAG" "$DEFINE_BLAS_LIBS_CMAKE" ..
$MAKE || $MAKE VERBOSE=1 || { echo 'STARS-H installation failed' ; exit 1; }
$MAKE install
else
echo "####################"
echo "starsh NOT FOUND"
echo "Please download it from: https://github.com/ecrc/stars-h"
echo "After installing it, set the proper PKG_CONFIG_PATH variable"
echo ""
err=1
fi
#fi
echo "============STARSH======================"
echo "$(ls $PREFIX/lib)"
echo "======================================"
# hicma
#if pkg-config --exists hicma
#then
# _LOCATION=`pkg-config --variable=prefix hicma`
# echo "hicma FOUND in [$_LOCATION]"
#else
if [ "$BUILD_DEPENDENCIES" == "true" ]
then
echo "Building HiCMA..."
cd $TMPDIR
cd h
git checkout c8287eed9ea9a803fc88ab067426ac6baacaa534
mkdir -p build && cd build
rm -rf ./CMake*
cmake -DHICMA_USE_MPI=$MPIVALUE -DCMAKE_BUILD_TYPE="Release" -DCMAKE_C_FLAGS_RELEASE="-O3 -Ofast -w" -DBUILD_SHARED_LIBS=ON -DHICMA_ENABLE_TESTING=OFF -DHICMA_ENABLE_TIMING=OFF -DCMAKE_INSTALL_PREFIX=$PREFIX "$XFLAG" "$DEFINE_BLAS_LIBS_CMAKE" ..
$MAKE || $MAKE VERBOSE=1 || { echo 'HICMA installation failed' ; exit 1; }
$MAKE install
else
echo "####################"
echo "hicma NOT FOUND"
echo "Please download it from: https://github.com/ecrc/hicma"
echo "After installing it, set the proper PKG_CONFIG_PATH variable"
echo ""
err=1
fi
#fi
echo "============HICMA======================"
echo "$(ls $PREFIX/lib)"
echo "======================================"
# use rpaths in makefile
# TODO use a R defined value for PREFIX and have this directly in the Makefile
#Dummy makefile in src to trigger real one from cmake.
cd $BASEDIR/
rm -rf ./CMakeFiles ./CMakeCache.txt
cmake -DCMAKE_BUILD_TYPE="Release" -DCMAKE_C_FLAGS_RELEASE="-O3 -Ofast -w" -DBUILD_SHARED_LIBS=ON -DEXAGEOSTAT_EXAMPLES=OFF "$XFLAG" "$DEFINE_BLAS_LIBS_CMAKE" -DEXAGEOSTAT_USE_MPI=$MPIVALUE -DEXAGEOSTAT_USE_HICMA=ON ./src
echo "============EXAGEOSTAT======================"
echo "$(ls $PREFIX/lib)"
echo "======================================"
echo "$(ls ./src)"
echo "======================================"
echo "$(ls ../)"
echo "======================================"
echo "$(ls ../src)"
echo "======================================"
echo "$(ls ../exageostatr)"
echo "======================================"
echo "$(find ../ -name exageostat.so)"
echo "======================================"
echo "$(find ../ -name "exageostat.so")"
echo "======================================"
cat > src/Makefile << EOF
.PHONY: all clean
all:
(cd .. && make VERBOSE=1 && cp ./lib*.${LIBEXT} ./src/exageostat.so)
EOF
exit $err