set -euo pipefail
sudo () {
[[ $EUID = 0 ]] || set -- command sudo "$@"
"$@"
}
USE_INTEL_MKL=${1:-0}
PREFIX="/usr/local"
INCDIR=$PREFIX/include/suitesparse
LIBDIR=$PREFIX/lib/suitesparse
sudo pacman -S --noconfirm cmake curl git make
if [ "${USE_INTEL_MKL}" = "1" ]; then
set +u source /opt/intel/oneapi/setvars.sh set -u
export | grep -i MKLROOT
else
sudo pacman -S --noconfirm clang openblas
fi
if [ "${USE_INTEL_MKL}" = "1" ]; then
COMP_LINK="-DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx"
CMAKE_OPTIONS="${COMP_LINK} -DBLA_VENDOR=Intel10_64lp -DBLA_SIZEOF_INTEGER=4 -DSUITESPARSE_USE_FORTRAN=OFF"
else
COMP_LINK="-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++"
CMAKE_OPTIONS="${COMP_LINK} -DBLA_VENDOR=OpenBLAS -DBLA_SIZEOF_INTEGER=4 -DSUITESPARSE_USE_FORTRAN=OFF"
fi
cd /tmp
if ! [ -d "SuiteSparse" ]; then
git clone https://github.com/DrTimothyAldenDavis/SuiteSparse.git
fi
cd SuiteSparse
action () {
local dir=$1
cd $dir
make clean
CMAKE_OPTIONS=${CMAKE_OPTIONS} make local
CMAKE_OPTIONS=${CMAKE_OPTIONS} make install
cd ..
}
action SuiteSparse_config
action AMD
action CAMD
action CCOLAMD
action COLAMD
action CHOLMOD
action UMFPACK
action BTF
action KLU
sudo mkdir -p $INCDIR/
sudo cp -av include/suitesparse/*.h $INCDIR/
sudo mkdir -p $LIBDIR/
sudo cp -av lib/* $LIBDIR/
echo "${LIBDIR}" | sudo tee /etc/ld.so.conf.d/suitesparse.conf >/dev/null
sudo ldconfig