Intermediate commit. Transforming single script into individual steps.

This commit is contained in:
Adam Parler 2024-01-05 13:24:37 -08:00
parent 557025fe7a
commit ab909fe236
17 changed files with 493 additions and 134 deletions

1
.gitignore vendored
View file

@ -0,0 +1 @@
.DS_Store

38
install_script.sh Normal file
View file

@ -0,0 +1,38 @@
#!/bin/bash
# ------------------------------------------------------------------------
# PACKAGE LIST: register all new dependent tools and libs here. Order
# is important, the first in the list gets installed first
# ------------------------------------------------------------------------
tool_list="gcc intel cmake"
mpi_list="mpich openmpi intelmpi"
math_list="mkl acml openblas"
lib_list="fftw libint libxc libgrpp libxsmm cosma scalapack elpa cusolvermp plumed \
spfft spla ptscotch superlu pexsi quip gsl spglib hdf5 libvdwxc sirius
libvori libtorch deepmd"
package_list="${tool_list} ${mpi_list} ${math_list} ${lib_list}"
# ------------------------------------------------------------------------
# first set everything to __DONTUSE__
for ii in ${package_list}; do
eval with_${ii}="__DONTUSE__"
done
# ------------------------------------------------------------------------
# Work out default settings
# ------------------------------------------------------------------------
# tools to turn on by default:
with_gcc="__SYSTEM__"
if [ "COMPILER" = intel ]; then
./install_intel.sh
elif [ "COMPILER" = llvm ]; then
./install_llvm.sh
elif [ "COMPILER" = clang]; then
./install_llvm.sh
else
./install_gcc.sh
fi

View file

@ -13,146 +13,19 @@ else
echo "This script is not the top-level bash file being run." echo "This script is not the top-level bash file being run."
fi fi
## INSTALL GCC FROM SOURCE ./scripts/install_gcc.sh
GCC_BUILD_DIR=${BUILD_LOCATION}/gcc
GCC_INSTALL_DIR=${INSTALL_LOCATION}/gcc
mkdir -p ${GCC_INSTALL_DIR}
mkdir gcc-${GCC_VERSION}-build
GCC_VERSION=7.5.0 ./scripts/install_env-modules.sh
cd ${GCC_BUILD_DIR}
wget ftp://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz ./scripts/install_openssl.sh
tar -xf gcc-${GCC_VERSION}.tar.gz
mv gcc-${GCC_VERSION} gcc-${GCC_VERSION}-source
cd gcc-${GCC_VERSION}-source
./contrib/download_prerequisites
cd ../gcc-${GCC_VERSION}-build
${GCC_BUILD_DIR}/gcc-${GCC_VERSION}-source/configure --prefix=${GCC_INSTALL_DIR}/${GCC_VERSION} --enable-languages=c,c++,fortran,go --enable-lto --disable-multilib --enable-checking=release --enable-threads=posix --enable-libstdcxx-debug --enable-__cxa_atexit --enable-plugins --enable-bootstrap
make -j$(nproc)
make -j$(nproc) check
make install
## INSTALL ENVIRONMENT MODULES FROM SOURCE ./scripts/stage0/install_qt.sh
MODULES_BUILD_DIR=${BUILD_LOCATION}
MODULES_INSTALL_DIR=${INSTALL_LOCATION}/modules
mkdir -p ${MODULES_BUILD_DIR}
mkdir -p ${MODULES_INSTALL_DIR}
MODULES_VERSION=5.3.1 ./scripts/stage0/install_cmake.sh
cd ${MODULES_BUILD_DIR} ./scripts/stage0/install_git.sh
curl -LJO https://github.com/cea-hpc/modules/releases/download/v${MODULES_VERSION}/modules-${MODULES_VERSION}.tar.gz
tar -xf modules-${MODULES_VERSION}.tar.gz
cd modules-${MODULES_VERSION}
mkdir build && cd build
./configure --prefix=${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION} --modulefilesdir=${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/modulefiles
make -j$(nproc)
make install
ln -s ${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/init/profile.sh /etc/profile.d/modules.sh
ln -s ${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/init/profile.csh /etc/profile.d/modules.csh
## INSTALL OPENSSL FOR CMAKE ./scripts/stage0/install_llvm.sh
SSL_BUILD_DIR=${BUILD_LOCATION}/openssl
SSL_INSTALL_DIR=${INSTALL_LOCATION}/openssl
mkdir -p ${SSL_BUILD_DIR}
mkdir -p ${SSL_INSTALL_DIR}
SSL_VERSION=1.1.1w
cd ${SSL_BUILD_DIR}
wget -c https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz
tar -xf openssl-${SSL_VERSION}.tar.gz
cd openssl-${SSL_VERSION}
mkdir build && cd build
../config --prefix=${SSL_INSTALL_DIR}/${SSL_VERSION} --openssldir=${SSL_INSTALL_DIR}/${SSL_VERSION}
make -j$(nproc)
make -j$(nproc) test
make install
## INSTALL Qt FOR CMAKE-GUI
QT_BUILD_DIR=${BUILD_LOCATION}/qt
QT_INSTALL_DIR=${INSTALL_LOCATION}/qt
mkdir -p ${QT_BUILD_DIR}
mkdir -p ${QT_INSTALL_DIR}
## SOME COMBINATION WILL INSTALL GL
install build-essential libgl1-mesa-dev libglu1-mesa-dev libglut-dev libgl2-mesa-dev libdrm-dev
QT_VERSION=5.15.12
QT_MAJOR_VERSION=$(echo ${QT_VERSION} | cut -d. -f1-2)
cd ${QT_BUILD_DIR}
wget -c https://download.qt.io/official_releases/qt/${QT_MAJOR_VERSION}/${QT_VERSION}/single/qt-everywhere-opensource-src-${QT_VERSION}.tar.xz
tar -xf qt-everywhere-opensource-src-${QT_VERSION}.tar.xz
cd qt-everywhere-opensource-src-${QT_VERSION}
mkdir build && cd build
../configure -prefix ${QT_INSTALL_DIR}/${QT_VERSION} -make tests -release -opensource -confirm-license
##### THIS COMMAND NEEDS TO BE FINISHED#####
## INSTALL CMAKE FROM SOURCE
CMAKE_BUILD_DIR=${BUILD_LOCATION}/cmake
CMAKE_INSTALL_DIR=${INSTALL_LOCATION}/cmake
mkdir -p ${CMAKE_BUILD_DIR}
mkdir -p ${CMAKE_INSTALL_DIR}
VERSIONS=(3.5.2
3.12.4
3.17.5
3.21.3
3.24.4
3.28.1)
OPENSSL_ROOT_DIR=${SSL_INSTALL_DIR}/${SSL_VERSION}
for CMAKE_VERSION in "${strings[@]}"; do
# CMAKE_VERSION=3.21.3
CMAKE_MAJOR_VERSION=$(echo ${CMAKE_VERSION} | cut -d. -f1-2)
cd ${CMAKE_BUILD_DIR}
wget -c http://www.cmake.org/files/v${CMAKE_MAJOR_VERSION}/cmake-${CMAKE_VERSION}.tar.gz
tar -xf cmake-${CMAKE_VERSION}.tar.gz
mkdir -p cmake-${CMAKE_VERSION}/build && cd cmake-${CMAKE_VERSION}/build
../configure --prefix=${CMAKE_INSTALL_DIR}/${CMAKE_VERSION} --parallel=$(nproc)
make -j$(nproc)
make install
done
## INSTALL GIT FROM SOURCE
GIT_BUILD_DIR=${BUILD_LOCATION}/git
GIT_INSTALL_DIR=${INSTALL_LOCATION}/git
mkdir -p ${GIT_BUILD_DIR}
mkdir -p ${GIT_INSTALL_DIR}
GIT_VERSION=2.11.3
cd ${GIT_BUILD_DIR}
wget -c https://mirrors.edge.kernel.org/pub/software/scm/git/git-${GIT_VERSION}.tar.gz
tar -xzf git-${GIT_VERSION}.tar.gz
cd git-${GIT_VERSION}
make configure
./configure --prefix=${GIT_INSTALL_DIR}/${GIT_VERSION}
make -j$(nproc)
make -j$(nproc) test
make install
## INSTALL LLVM FROM SOURCE
LLVM_BUILD_DIR=${BUILD_LOCATION}/llvm
LLVM_INSTALL_DIR=${INSTALL_LOCATION}/llvm
mkdir -p ${LLVM_BUILD_DIR}
mkdir -p ${LLVM_INSTALL_DIR}
LLVM_VERSION=13.0.0
git clone https://github.com/llvm/llvm-project.git ${LLVM_BUILD_DIR}/llvm-${LLVM_VERSION}
cd ${LLVM_BUILD_DIR}/llvm-${LLVM_VERSION}
git checkout llvmorg-${LLVM_VERSION}
mkdir build && cd build
cmake -S llvm -B build -G "Unix Makefiles" \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld;lldb;openmp;parallel-libs;polly" \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${LLVM_INSTALL_DIR}/${LLVM_VERSION} \
-DLLVM_INSTALL_UTILS=ON llvm
make -j$(nproc)
make install
## INSTALL OPENMPI FROM SOURCE ## INSTALL OPENMPI FROM SOURCE
module load gcc/${GCC_VERSION} cmake/${CMAKE_VERSION} module load gcc/${GCC_VERSION} cmake/${CMAKE_VERSION}

View file

@ -0,0 +1,5 @@
BINUTILS_VERSION=2.35
wget -c https://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.gz
tar -xf binutils-${BINUTILS_VERSION}.tar.gz

View file

@ -0,0 +1,26 @@
## INSTALL CMAKE FROM SOURCE
CMAKE_BUILD_DIR=${BUILD_LOCATION}/cmake
CMAKE_INSTALL_DIR=${INSTALL_LOCATION}/cmake
mkdir -p ${CMAKE_BUILD_DIR}
mkdir -p ${CMAKE_INSTALL_DIR}
VERSIONS=(3.5.2
3.12.4
3.17.5
3.21.3
3.24.4
3.28.1)
OPENSSL_ROOT_DIR=${SSL_INSTALL_DIR}/${SSL_VERSION}
for CMAKE_VERSION in "${strings[@]}"; do
# CMAKE_VERSION=3.21.3
CMAKE_MAJOR_VERSION=$(echo ${CMAKE_VERSION} | cut -d. -f1-2)
cd ${CMAKE_BUILD_DIR}
wget -c http://www.cmake.org/files/v${CMAKE_MAJOR_VERSION}/cmake-${CMAKE_VERSION}.tar.gz
tar -xf cmake-${CMAKE_VERSION}.tar.gz
mkdir -p cmake-${CMAKE_VERSION}/build && cd cmake-${CMAKE_VERSION}/build
../configure --prefix=${CMAKE_INSTALL_DIR}/${CMAKE_VERSION} --parallel=$(nproc)
make -j$(nproc)
make install
done

View file

@ -0,0 +1,17 @@
MODULES_VERSION=5.3.1
MODULES_BUILD_DIR=${BUILD_LOCATION}
MODULES_INSTALL_DIR=${INSTALL_LOCATION}/modules
mkdir -p ${MODULES_BUILD_DIR}
mkdir -p ${MODULES_INSTALL_DIR}
cd ${MODULES_BUILD_DIR}
curl -LJO https://github.com/cea-hpc/modules/releases/download/v${MODULES_VERSION}/modules-${MODULES_VERSION}.tar.gz
tar -xf modules-${MODULES_VERSION}.tar.gz
cd modules-${MODULES_VERSION}
mkdir build && cd build
./configure --prefix=${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION} --modulefilesdir=${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/modulefiles
make -j$(nproc)
make install
ln -s ${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/init/profile.sh /etc/profile.d/modules.sh
ln -s ${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/init/profile.csh /etc/profile.d/modules.csh

View file

@ -0,0 +1,45 @@
#!/bin/bash -e
[ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0
SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_NAME")/.." && pwd -P)"
VERSIONS=(4.4.7
4.6.2
4.8.5
4.9.3
5.1.0
5.2.0
5.4.0
6.1.0
6.3.0
7.1.0
7.5.0
8.4.0
9.1.0
10.2.0
10.3.0
11.2.0
12.3.0
13.1.0)
source "${SCRIPT_DIR}"/common_vars.sh
GCC_VERSION=7.5.0
GCC_BUILD_DIR=${BUILD_LOCATION}/gcc
GCC_INSTALL_DIR=${INSTALL_LOCATION}/gcc
mkdir -p ${GCC_INSTALL_DIR}
mkdir gcc-${GCC_VERSION}-build
cd ${GCC_BUILD_DIR}
wget ftp://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz
tar -xf gcc-${GCC_VERSION}.tar.gz
mv gcc-${GCC_VERSION} gcc-${GCC_VERSION}-source
cd gcc-${GCC_VERSION}-source
./contrib/download_prerequisites
cd ../gcc-${GCC_VERSION}-build
${GCC_BUILD_DIR}/gcc-${GCC_VERSION}-source/configure --prefix=${GCC_INSTALL_DIR}/${GCC_VERSION} --enable-languages=c,c++,fortran,go --enable-lto --disable-multilib --enable-checking=release --enable-threads=posix --enable-libstdcxx-debug --enable-__cxa_atexit --enable-plugins --enable-bootstrap
make -j$(nproc)
make -j$(nproc) check
make install

View file

@ -0,0 +1,17 @@
## INSTALL GIT FROM SOURCE
GIT_BUILD_DIR=${BUILD_LOCATION}/git
GIT_INSTALL_DIR=${INSTALL_LOCATION}/git
mkdir -p ${GIT_BUILD_DIR}
mkdir -p ${GIT_INSTALL_DIR}
GIT_VERSION=2.11.3
cd ${GIT_BUILD_DIR}
wget -c https://mirrors.edge.kernel.org/pub/software/scm/git/git-${GIT_VERSION}.tar.gz
tar -xzf git-${GIT_VERSION}.tar.gz
cd git-${GIT_VERSION}
make configure
./configure --prefix=${GIT_INSTALL_DIR}/${GIT_VERSION}
make -j$(nproc)
make -j$(nproc) test
make install

View file

@ -0,0 +1,44 @@
#!/bin/bash -e
# TODO: Review and if possible fix shellcheck errors.
# shellcheck disable=all
[ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=${0}
SCRIPT_DIR="$(cd "$(dirname "${SCRIPT_NAME}")/.." && pwd -P)"
INTEL_CFLAGS=""
INTEL_LDFLAGS=""
INTEL_LIBS=""
echo "==================== Finding Intel compiler from system paths ===================="
if [ "${intel_classic}" = "yes" ]; then
check_command icc "intel" && CC="$(realpath $(command -v icc))" || exit 1
check_command icpc "intel" && CXX="$(realpath $(command -v icpc))" || exit 1
check_command ifort "intel" && FC="$(realpath $(command -v ifort))" || exit 1
else
check_command icx "intel" && CC="$(realpath $(command -v icx))" || exit 1
check_command icpx "intel" && CXX="$(realpath $(command -v icpx))" || exit 1
check_command ifort "intel" && FC="$(realpath $(command -v ifort))" || exit 1
fi
F90="${FC}"
F77="${FC}"
echo "CC is ${CC}"
echo "CXX is ${CXX}"
echo "FC is ${FC}"
export CC="${CC}"
export CXX="${CXX}"
export FC="${FC}"
export F90="${F90}"
export F77="${F77}"
export PATH=${pkg_install_dir}/bin:${PATH}
export LD_LIBRARY_PATH=${pkg_install_dir}/lib:${LD_LIBRARY_PATH}
export LD_RUN_PATH=${pkg_install_dir}/lib:${LD_RUN_PATH}
export LIBRARY_PATH=${pkg_install_dir}/lib:${LIBRARY_PATH}
export CPATH=${pkg_install_dir}/include:${CPATH}
export INTEL_CFLAGS="${INTEL_CFLAGS}"
export INTEL_LDFLAGS="${INTEL_LDFLAGS}"
export INTEL_LIBS="${INTEL_LIBS}"

View file

@ -0,0 +1,18 @@
## INSTALL LLVM FROM SOURCE
LLVM_BUILD_DIR=${BUILD_LOCATION}/llvm
LLVM_INSTALL_DIR=${INSTALL_LOCATION}/llvm
mkdir -p ${LLVM_BUILD_DIR}
mkdir -p ${LLVM_INSTALL_DIR}
LLVM_VERSION=13.0.0
git clone https://github.com/llvm/llvm-project.git ${LLVM_BUILD_DIR}/llvm-${LLVM_VERSION}
cd ${LLVM_BUILD_DIR}/llvm-${LLVM_VERSION}
git checkout llvmorg-${LLVM_VERSION}
mkdir build && cd build
cmake -S llvm -B build -G "Unix Makefiles" \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld;lldb;openmp;parallel-libs;polly" \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${LLVM_INSTALL_DIR}/${LLVM_VERSION} \
-DLLVM_INSTALL_UTILS=ON llvm
make -j$(nproc)
make install

View file

@ -0,0 +1,16 @@
SSL_VERSION=1.1.1w
SSL_BUILD_DIR=${BUILD_LOCATION}/openssl
SSL_INSTALL_DIR=${INSTALL_LOCATION}/openssl
mkdir -p ${SSL_BUILD_DIR}
mkdir -p ${SSL_INSTALL_DIR}
cd ${SSL_BUILD_DIR}
wget -c https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz
tar -xf openssl-${SSL_VERSION}.tar.gz
cd openssl-${SSL_VERSION}
mkdir build && cd build
../config --prefix=${SSL_INSTALL_DIR}/${SSL_VERSION} --openssldir=${SSL_INSTALL_DIR}/${SSL_VERSION}
make -j$(nproc)
make -j$(nproc) test
make install

View file

@ -0,0 +1,21 @@
## INSTALL Qt FOR CMAKE-GUI
QT_BUILD_DIR=${BUILD_LOCATION}/qt
QT_INSTALL_DIR=${INSTALL_LOCATION}/qt
mkdir -p ${QT_BUILD_DIR}
mkdir -p ${QT_INSTALL_DIR}
## SOME COMBINATION WILL INSTALL GL
# install build-essential libgl1-mesa-dev libglu1-mesa-dev libglut-dev libgl2-mesa-dev libdrm-dev
# wget -c https://qt.mirror.constant.com/archive/online_installers/4.6/qt-unified-linux-x64-4.6.1-online.run
QT_VERSION=5.15.12
QT_MAJOR_VERSION=$(echo ${QT_VERSION} | cut -d. -f1-2)
cd ${QT_BUILD_DIR}
wget -c https://download.qt.io/official_releases/qt/${QT_MAJOR_VERSION}/${QT_VERSION}/single/qt-everywhere-opensource-src-${QT_VERSION}.tar.xz
tar -xf qt-everywhere-opensource-src-${QT_VERSION}.tar.xz
cd qt-everywhere-opensource-src-${QT_VERSION}
mkdir build && cd build
../configure -prefix ${QT_INSTALL_DIR}/${QT_VERSION} -make tests -release -opensource -confirm-license
##### THIS COMMAND NEEDS TO BE FINISHED#####

View file

@ -0,0 +1,17 @@
#!/bin/bash -e
# TODO: Review and if possible fix shellcheck errors.
# shellcheck disable=all
./scripts/stage0/install_env-modules.sh
./scripts/stage0/install_gcc.sh
./scripts/stage0/install_binutils.sh
./scripts/stage0/install_llvm.sh
./scripts/stage0/install_intel.sh
./scripts/stage0/setup_buildtools.sh
./scripts/stage0/install_openssl.sh
./scripts/stage0/install_git.sh
./scripts/stage0/install_qt.sh
./scripts/stage0/install_cmake.sh
#EOF

View file

@ -0,0 +1,72 @@
#!/bin/bash -e
# TODO: Review and if possible fix shellcheck errors.
# shellcheck disable=all
[ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0
SCRIPT_DIR="$(cd "$(dirname "${SCRIPT_NAME}")/.." && pwd -P)"
source ${SCRIPT_DIR}/common_vars.sh
source ${SCRIPT_DIR}/tool_kit.sh
source ${SCRIPT_DIR}/signal_trap.sh
source ${INSTALLDIR}/toolchain.conf
source ${INSTALLDIR}/toolchain.env
for ii in $tool_list; do
load "${BUILDDIR}/setup_${ii}"
done
# ------------------------------------------------------------------------
# Install or compile packages using newly installed tools
# ------------------------------------------------------------------------
# Setup compiler flags, leading to nice stack traces on crashes but still optimised
if [ "${with_intel}" != "__DONTUSE__" ]; then
CFLAGS="-O2 -fPIC -fp-model=precise -funroll-loops -g -qopenmp -qopenmp-simd -traceback"
if [ "${TARGET_CPU}" = "native" ]; then
CFLAGS="${CFLAGS} -xHost"
elif [ "${TARGET_CPU}" = "generic" ]; then
CFLAGS="${CFLAGS} -mtune=${TARGET_CPU}"
else
CFLAGS="${CFLAGS} -march=${TARGET_CPU} -mtune=${TARGET_CPU}"
fi
FFLAGS="${CFLAGS}"
else
CFLAGS="-O2 -fPIC -fno-omit-frame-pointer -fopenmp -g"
if [ "${TARGET_CPU}" = "generic" ]; then
CFLAGS="${CFLAGS} -mtune=generic ${TSANFLAGS}"
else
CFLAGS="${CFLAGS} -march=${TARGET_CPU} -mtune=${TARGET_CPU} ${TSANFLAGS}"
fi
FFLAGS="${CFLAGS} -fbacktrace"
fi
CXXFLAGS="${CFLAGS}"
F77FLAGS="${FFLAGS}"
F90FLAGS="${FFLAGS}"
FCFLAGS="${FFLAGS}"
if [ "${with_intel}" == "__DONTUSE__" ]; then
export CFLAGS="$(allowed_gcc_flags ${CFLAGS})"
export FFLAGS="$(allowed_gfortran_flags ${FFLAGS})"
export F77FLAGS="$(allowed_gfortran_flags ${F77FLAGS})"
export F90FLAGS="$(allowed_gfortran_flags ${F90FLAGS})"
export FCFLAGS="$(allowed_gfortran_flags ${FCFLAGS})"
export CXXFLAGS="$(allowed_gxx_flags ${CXXFLAGS})"
else
# TODO Check functions for allowed Intel compiler flags
export CFLAGS
export FFLAGS
export F77FLAGS
export F90FLAGS
export FCFLAGS
export CXXFLAGS
fi
export LDFLAGS="${TSANFLAGS}"
# get system arch information using OpenBLAS prebuild
${SCRIPTDIR}/get_openblas_arch.sh
load "${BUILDDIR}/openblas_arch"
write_toolchain_env "${INSTALLDIR}"
#EOF

View file

@ -0,0 +1,46 @@
#!/bin/bash
if [[ "$BASH_SOURCE" == "$0" ]]; then
BUILD_LOCATION=${PWD}
INSTALL_LOCATION=/people/parl703
TARGET_CPU="native"
CFLAGS="-O2 -fPIC -fno-omit-frame-pointer -fopenmp -g -march=${TARGET_CPU} -mtune=${TARGET_CPU}"
FFLAGS="${CFLAGS} -fbacktrace"
CXXFLAGS="${CFLAGS}"
F77FLAGS="${FFLAGS}"
F90FLAGS="${FFLAGS}"
FCFLAGS="${FFLAGS}"
LOG_LINES=200
else
source ${BUILD_LOCATION}/build.env
ROOT=${PWD}
fi
MPI_VERSION=4.1.5
OPENMPI_BUILD_DIR=${BUILD_LOCATION}/openmpi
OPENMPI_INSTALL_DIR=${INSTALL_LOCATION}/openmpi/${MPI_VERSION}
mkdir -p ${OPENMPI_BUILD_DIR}
mkdir -p ${OPENMPI_INSTALL_DIR}
cd ${OPENMPI_BUILD_DIR}
wget -c https://www.openmpi.org/openmpi-${MPI_VERSION}.tar.gz
tar -xf openmpi-${MPI_VERSION}.tar.gz
cd openmpi-${MPI_VERSION}
mkdir build && cd build
if [ "MPI_ENABLED" = false ]; then
exit 1
fi
echo ${FFTW_INSTALL_DIR}
./configure --prefix=${FFTW_INSTALL_DIR} ${FFTW_FLAGS}
make -j$(nproc)
make -j$(nproc) check > check.log 2>&1 || tail -n ${LOG_LINES} check.log
make -j$(nproc) install > install.log 2>&1 || tail -n ${LOG_LINES} install.log
if [[ "$BASH_SOURCE" != "$0" ]]; then
cd ${ROOT}
else
echo "Exiting ..."
fi

View file

@ -5,6 +5,7 @@ if [[ "$BASH_SOURCE" == "$0" ]]; then
INSTALL_LOCATION=/avfs/people/parl703 INSTALL_LOCATION=/avfs/people/parl703
LOG_LINES=200 LOG_LINES=200
else else
source ${BUILD_LOCATION}/build.env
ROOT=${PWD} ROOT=${PWD}
fi fi

102
scripts/tool_kit.sh Normal file
View file

@ -0,0 +1,102 @@
find_mpi() {
# for MPI, we try to detect system MPI variant
if (command -v mpiexec > /dev/null 2>&1); then
export MPI_ENABLED = true
# check if we are dealing with openmpi, mpich or intelmpi
if (mpiexec --version 2>&1 | grep -s -q "HYDRA"); then
echo "MPI is detected and it appears to be MPICH"
export MPI_MODE="mpich"
# check openmpi version as reported by mpiexec
export MPI_VERSION=$(mpiexec --version | grep "Version:" | awk '{print $2}')
with_mpich="__SYSTEM__"
elif (mpiexec --version 2>&1 | grep -s -q "OpenRTE"); then
echo "MPI is detected and it appears to be OpenMPI"
export MPI_MODE="openmpi"
# check openmpi version as reported by mpiexec
export MPI_VERSION=$(mpiexec --version 2>&1 | grep "(Open MPI)" | awk '{print $4}')
with_openmpi="__SYSTEM__"
elif (mpiexec --version 2>&1 | grep -s -q "Intel"); then
echo "MPI is detected and it appears to be Intel MPI"
export MPI_MODE="intelmpi"
# check intelmpi version as reported by mpiicc
export MPI_VERSION=$(mpiexec --version | grep "Version" | awk '{print $8"."$10}')
with_intelmpi="__SYSTEM__"
else # default to mpich
echo "MPI is detected and defaults to MPICH"
export MPI_MODE="mpich"
with_mpich="__SYSTEM__"
fi
else
report_warning $LINENO "No MPI installation detected (ignore this message in Cray Linux Environment or when MPI installation was requested)."
export MPI_MODE=""
fi
}
# helper routine to check integrity of downloaded files
checksum() {
local __filename=$1
local __sha256=$2
local __shasum_command='sha256sum'
# check if we have sha256sum command, Mac OS X does not have
# sha256sum, but has an equivalent with shasum -a 256
command -v "$__shasum_command" > /dev/null 2>&1 ||
__shasum_command="shasum -a 256"
if echo "$__sha256 $__filename" | ${__shasum_command} --check; then
echo "Checksum of $__filename Ok"
else
rm -v ${__filename}
report_error "Checksum of $__filename could not be verified, abort."
return 1
fi
}
# verify the checksums inside the given checksum file
verify_checksums() {
local __checksum_file=$1
local __shasum_command='sha256sum'
# check if we have sha256sum command, Mac OS X does not have
# sha256sum, but has an equivalent with shasum -a 256
command -v "$__shasum_command" > /dev/null 2>&1 ||
__shasum_command="shasum -a 256"
${__shasum_command} --check "${__checksum_file}" > /dev/null 2>&1
}
# write a checksum file $1 containing checksums for each given file $2, $3, ... (plus the $VERSION_FILE)
write_checksums() {
local __checksum_file=$1
shift # remove output file from arguments to be able to pass them along properly quoted
local __shasum_command='sha256sum'
# check if we have sha256sum command, Mac OS X does not have
# sha256sum, but has an equivalent with shasum -a 256
command -v "$__shasum_command" > /dev/null 2>&1 ||
__shasum_command="shasum -a 256"
${__shasum_command} "${VERSION_FILE}" "$@" > "${__checksum_file}"
}
# generate a filtered toolchain.env
write_toolchain_env() {
local __installdir=$1
# run the following in a subshell to not affect the currently running shell
# we do not need to achieve complete filtering, it is sufficient to
# remove problematic variables (TERM/TERMCAP/COLORTERM) which may trigger
# 'too many arguments' (since the environment vars are stored in the same memory block as command line arguments)
# or which may not be valid anymore the next time the user runs the toolchain scripts,
# like the proxy vars which may affect fetching tarballs
(
unset COLORTERM DISPLAY EDITOR LESS LESSOPEN LOGNAME LS_COLORS PAGER
unset TERM TERMCAP USER
unset ftp_proxy http_proxy no_proxy
unset GPG_AGENT_INFO SSH_AGENT_PID SSH_AUTH_SOCK SSH_CLIENT SSH_CONNECTION SSH_TTY
unset LS_COLORS LS_OPTIONS
unset STY WINDOW XAUTHORITY
unset XDG_CURRENT_DESKTOP XDG_RUNTIME_DIR XDG_SEAT XDG_SESSION_CLASS XDG_SESSION_DESKTOP XDG_SESSION_ID XDG_SESSION_TYPE XDG_VTNR XDG_CONFIG_DIRS XDG_DATA_DIRS
unset DBUS_SESSION_BUS_ADDRESS
export -p
) > "${__installdir}/toolchain.env"
}