338 lines
11 KiB
Bash
338 lines
11 KiB
Bash
#!/bin/bash
|
|
|
|
if [[ "$BASH_SOURCE" == "$0" ]]; then
|
|
echo "This script is the top-level bash file being run."
|
|
echo "Setting up the environment for the cluster."
|
|
BUILD_LOCATION=/avfs/backend
|
|
INSTALL_LOCATION=/avfs/projects/ops
|
|
mkdir -p ${BUILD_LOCATION}
|
|
mkdir -p ${INSTALL_LOCATION}
|
|
echo "Build location: ${BUILD_LOCATION}"
|
|
echo "Install location: ${INSTALL_LOCATION}"
|
|
else
|
|
echo "This script is not the top-level bash file being run."
|
|
fi
|
|
|
|
## INSTALL GCC FROM SOURCE
|
|
GCC_BUILD_DIR=${BUILD_LOCATION}/gcc
|
|
GCC_INSTALL_DIR=${INSTALL_LOCATION}/gcc
|
|
mkdir -p ${GCC_INSTALL_DIR}
|
|
|
|
GCC_VERSION=7.5.0
|
|
cd ${GCC_BUILD_DIR}
|
|
mkdir gcc-${GCC_VERSION}-build
|
|
|
|
wget https://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 --disable-multilib --enable-bootstrap --enable-lto --enable-plugins
|
|
make -j$(nproc)
|
|
make install
|
|
|
|
## INSTALL ENVIRONMENT MODULES FROM SOURCE
|
|
MODULES_BUILD_DIR=${BUILD_LOCATION}
|
|
MODULES_INSTALL_DIR=${INSTALL_LOCATION}/modules
|
|
mkdir -p ${MODULES_INSTALL_DIR}
|
|
|
|
cd ${MODULES_BUILD_DIR}
|
|
MODULES_VERSION=5.3.1
|
|
|
|
curl -LJO https://github.com/cea-hpc/modules/releases/download/v${MODULES_VERSION}/modules-${MODULES_VERSION}.tar.gz
|
|
tar xfz 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
|
|
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
|
|
|
|
## 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}
|
|
|
|
cd ${GIT_BUILD_DIR}
|
|
GIT_VERSION=2.11.3
|
|
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 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
|
|
|
|
module load gcc/${GCC_VERSION} cmake/${CMAKE_VERSION}
|
|
|
|
## INSTALL OPENMPI FROM SOURCE
|
|
|
|
if [ $(command -v srun) ]; then
|
|
echo "Slurm installation found. OpenMPI will be configured with --with-pmi."
|
|
EXTRA_CONFIGURE_FLAGS="--with-pmi"
|
|
else
|
|
EXTRA_CONFIGURE_FLAGS=""
|
|
fi
|
|
|
|
./configure CFLAGS="${CFLAGS}" \
|
|
--prefix=${pkg_install_dir} \
|
|
--libdir="${pkg_install_dir}/lib" \
|
|
--enable-mpi1-compatibility \
|
|
${EXTRA_CONFIGURE_FLAGS}
|
|
|
|
## INSTALL MPICH FROM SOURCE
|
|
|
|
|
|
./configure \
|
|
--prefix="${pkg_install_dir}" \
|
|
MPICC="" \
|
|
FFLAGS="${FCFLAGS} ${compat_flag}" \
|
|
FCFLAGS="${FCFLAGS} ${compat_flag}" \
|
|
--without-x \
|
|
--enable-gl=no \
|
|
--with-device=${MPICH_DEVICE} \
|
|
|
|
make -j$(nproc)
|
|
make install
|
|
|
|
|
|
MPIRUN="${pkg_install_dir}/bin/mpiexec"
|
|
MPICC="${pkg_install_dir}/bin/mpicc"
|
|
MPICXX="${pkg_install_dir}/bin/mpicxx"
|
|
MPIFC="${pkg_install_dir}/bin/mpifort"
|
|
MPIFORT="${MPIFC}"
|
|
MPIF77="${MPIFC}"
|
|
MPICH_CFLAGS="-I'${pkg_install_dir}/include'"
|
|
MPICH_LDFLAGS="-L'${pkg_install_dir}/lib' -Wl,-rpath,'${pkg_install_dir}/lib'"
|
|
|
|
export MPI_MODE="${MPI_MODE}"
|
|
export MPIRUN="${MPIRUN}"
|
|
export MPICC="${MPICC}"
|
|
export MPICXX="${MPICXX}"
|
|
export MPIFC="${MPIFC}"
|
|
export MPIFORT="${MPIFORT}"
|
|
export MPIF77="${MPIF77}"
|
|
export MPICH_CFLAGS="${MPICH_CFLAGS}"
|
|
export MPICH_LDFLAGS="${MPICH_LDFLAGS}"
|
|
export MPICH_LIBS="${MPICH_LIBS}"
|
|
export MPI_CFLAGS="${MPICH_CFLAGS}"
|
|
export MPI_LDFLAGS="${MPICH_LDFLAGS}"
|
|
export MPI_LIBS="${MPICH_LIBS}"
|
|
export CP_DFLAGS="\${CP_DFLAGS} IF_MPI(-D__parallel|)"
|
|
export CP_CFLAGS="\${CP_CFLAGS} IF_MPI(${MPICH_CFLAGS}|)"
|
|
export CP_LDFLAGS="\${CP_LDFLAGS} IF_MPI(${MPICH_LDFLAGS}|)"
|
|
export CP_LIBS="\${CP_LIBS} IF_MPI(${MPICH_LIBS}|)"
|
|
|
|
## INSTALL OPENBLAS FROM SOURCE
|
|
OPENBLAS_BUILD_DIR=${BUILD_LOCATION}/openblas
|
|
OPENBLAS_INSTALL_DIR=${INSTALL_LOCATION}/openblas
|
|
mkdir -p ${OPENBLAS_BUILD_DIR}
|
|
mkdir -p ${OPENBLAS_INSTALL_DIR}
|
|
|
|
OPENBLAS_VERSION=0.3.18
|
|
|
|
cd ${OPENBLAS_BUILD_DIR}
|
|
wget -c openblas
|
|
tar -xf openblas-${OPENBLAS_VERSION}.tar.gz
|
|
cd openblas-${OPENBLAS_VERSION}
|
|
make -j$(nproc)
|
|
make install PREFIX=${OPENBLAS_INSTALL_DIR}/${OPENBLAS_VERSION}
|
|
|
|
## INSTALL LAPACK FROM SOURCE
|
|
LAPACK_BUILD_DIR=${BUILD_LOCATION}/lapack
|
|
LAPACK_INSTALL_DIR=${INSTALL_LOCATION}/lapack
|
|
mkdir -p ${LAPACK_BUILD_DIR}
|
|
mkdir -p ${LAPACK_INSTALL_DIR}
|
|
|
|
LAPACK_VERSION=3.10.0
|
|
|
|
## INSTALL HDF5 FROM SOURCE
|
|
module load gcc/8.1.0 openmpi/4.1.4 cmake/3.21.3
|
|
|
|
# Check if MPI is enabled
|
|
if [ -n "$MPI_ENABLED" ]; then
|
|
MPI_ENABLED=true
|
|
else
|
|
MPI_ENABLED=false
|
|
fi
|
|
|
|
HDF5_BUILD_DIR=${BUILD_LOCATION}/hdf5
|
|
HDF5_VERSION=1.12.1
|
|
|
|
# Use the MPI_ENABLED variable in your script
|
|
if [ "$MPI_ENABLED" = true ]; then
|
|
# MPI is enabled, do something
|
|
echo "MPI is enabled"
|
|
HDF5_INSTALL_DIR=${INSTALL_LOCATION}/hdf5-withmpi/${HDF5_VERSION}/${COMPILER}/${COMPILER_VERSION}/${MPI_NAME}/${MPI_VERSION}
|
|
else
|
|
# MPI is not enabled, do something else
|
|
echo "MPI is not enabled"
|
|
HDF5_INSTALL_DIR=${INSTALL_LOCATION}/hdf5/${HDF5_VERSION}/${COMPILER}/${COMPILER_VERSION}
|
|
fi
|
|
|
|
## INSTALL NETCDF FROM SOURCE
|
|
|
|
## INSTALL OPENMC FROM SOURCE
|
|
module load gcc/8.1.0 cmake/3.21.3 python/3.11.5 git/2.11.3
|
|
|
|
OPENMC_BUILD_DIR=${BUILD_LOCATION}/openmc
|
|
OPENMC_INSTALL_DIR=${INSTALL_LOCATION}/openmc
|
|
|
|
mkdir -p ${OPENMC_BUILD_DIR}
|
|
mkdir -p ${OPENMC_INSTALL_DIR}
|
|
|
|
PROJECT_FOLDER=/avfs/projects/openmc
|
|
cd ${PROJECT_FOLDER}
|
|
python3 -m venv .venv
|
|
|
|
OPENMC_VERSION=0.14.0
|
|
|
|
cd ${OPENMC_BUILD_DIR}
|
|
git clone --recurse-submodules https://github.com/openmc-dev/openmc.git
|
|
cd openmc
|
|
git checkout v${OPENMC_VERSION}
|
|
mkdir build && cd build
|
|
|
|
if [ "$MPI_ENABLED" = true ]; then
|
|
# MPI is enabled, do something
|
|
# HDF5_ROOT=/avfs/projects/hdf5-withmpi/gcc/8.1.0/openmpi/4.1.4 \
|
|
# CC=/avfs/projects/openmpi/4.1.4/gcc/8.1.0/bin/mpicc \
|
|
# CXX=/avfs/projects/openmpi/4.1.4/gcc/8.1.0/bin/mpicxx \
|
|
module load hdf5-withmpi openmpi/4.1.4
|
|
HDF5_ROOT=${HDF5_ROOT} CC=mpicc CXX=mpicxx \
|
|
cmake .. -DCMAKE_INSTALL_PREFIX=${OPENMC_INSTALL_DIR}/${OPENMC_VERSION} -DOPENMC_USE_MPI=ON -DOPENMC_USE_OPENMP=ON -DCMAKE_BUILD_TYPE=Release
|
|
else
|
|
# MPI is not enabled, do something else
|
|
module load hdf5
|
|
HDF5_ROOT=${HDF5_ROOT}
|
|
cmake .. -DCMAKE_INSTALL_PREFIX=${OPENMC_INSTALL_DIR}/${OPENMC_VERSION} -DOPENMC_USE_MPI=OFF -DOPENMC_USE_OPENMP=ON -DCMAKE_BUILD_TYPE=Release
|
|
fi
|
|
|
|
make -j20
|
|
make install
|
|
cd ..
|
|
source ${PROJECT_FOLDER}/.venv/bin/activate
|
|
|
|
if [ "$MPI_ENABLED" = true ]; then
|
|
# MPI is enabled, do something
|
|
MPICC=/avfs/projects/openmpi/4.1.4/gcc/8.1.0/bin/mpicc \
|
|
/avfs/projects/python/3.11.5/bin/python3 -m pip install mpi4py
|
|
CC=/avfs/projects/openmpi/4.1.4/gcc/8.1.0/bin/mpicc HDF5_MPI=ON \
|
|
HDF5_DIR=/avfs/projects/hdf5-withmpi/gcc/8.1.0/openmpi/4.1.4 \
|
|
${PROJECT_FOLDER}/.venv/bin/python3 -m pip install --no-binary=h5py h5py
|
|
${PROJECT_FOLDER}/.venv/bin/python3 -m pip install .
|
|
else
|
|
# MPI is not enabled, do something else
|
|
HDF5_DIR=${HDF5_ROOT}
|
|
${PROJECT_FOLDER}/.venv/bin/python3 -m pip install .
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# HDF5_ROOT=/share/apps/hdf5-withmpi/gcc/8.1.0/openmpi/4.1.4 CC=/share/apps/openmpi/4.1.4/gcc/8.1.0/bin/mpicc CXX=/share/apps/openmpi/4.1.4/gcc/8.1.0/bin/mpicxx cmake .. -DCMAKE_INSTALL_PREFIX=/qfs/people/parl703/openmc -DOPENMC_USE_MPI=ON -DOPENMC_USE_OPENMP=ON -DCMAKE_BUILD_TYPE=Release
|
|
# make -j20
|
|
# make install
|
|
# cd ..
|
|
# MPICC=/share/apps/openmpi/4.1.4/gcc/8.1.0/bin/mpicc /share/apps/python/3.11.5/bin/python3 -m pip install mpi4py
|
|
# CC=/share/apps/openmpi/4.1.4/gcc/8.1.0/bin/mpicc HDF5_MPI=ON HDF5_DIR=/share/apps/hdf5-withmpi/gcc/8.1.0/openmpi/4.1.4 /rcfs/projects/sherlock/openmc/dwnld/.venv/bin/python3 -m pip install --no-binary=h5py h5py
|
|
# /rcfs/projects/sherlock/openmc/dwnld/.venv/bin/python3 -m pip install .
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|