# Maintainer: Bruno Pagani <archange@archlinux.org>
# Maintainer: Jakub Klinkovský <lahwaacz at archlinux dot org>

pkgname=adios2
pkgver=2.11.0
pkgrel=6
pkgdesc="The Adaptable Input/Output System version 2"
arch=(x86_64 aarch64)
url="https://adios2.readthedocs.io/en/latest/"
license=(Apache-2.0)
depends=(
  blosc2
  bzip2 libbz2.so
  glibc
  hdf5
  libfabric
  libgcc
  libgfortran
  libpng libpng16.so
  libsodium libsodium.so
  libstdc++
  mgard
  openmpi libmpi.so
  openssl libssl.so
  openucx libucp.so libucs.so
  paraview-catalyst
  pugixml
  python
  sqlite libsqlite3.so
  sz
  yaml-cpp libyaml-cpp.so
  zeromq libzmq.so
  zfp
  zlib libz.so
)
makedepends=(
  cmake
  cuda
  gcc-fortran
  gtest
  ninja
  nlohmann-json
  pybind11
  python-mpi4py
  python-numpy
)
optdepends=(
  'python-numpy: for Python bindings'
  'python-cupy: for CuPy arrays'
  'python-pytorch: for PyTorch tensors'
)
source=(
  https://github.com/ornladios/ADIOS2/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz
)
b2sums=('d79d833ee42a6097b15341729892dde119b9e157ec5f3078a2a842f412ceca064b619fb5b7b4f95bf8134298e50251acd88f9981426b10c00070b33ad4abc8d5')

build() {
  # In general, we want to list all real archs (sm_XX) and the latest virtual arch (compute_XX) for future PTX compatibility.
  # Valid values can be discovered from nvcc --help
  local cuda_archs="75;80;86;87;88;89;90;100;103;110;120;121;121-virtual"

  local cmake_options=(
    -B build
    -S ${pkgname^^}-${pkgver}
    -G Ninja
    -W no-dev
    -DCMAKE_BUILD_TYPE=None
    -DCMAKE_INSTALL_PREFIX=/usr
    -DCMAKE_CUDA_ARCHITECTURES="$cuda_archs"
    # Compile source code for supported GPU archs in parallel
    -DCMAKE_CUDA_FLAGS="--threads $(nproc)"
    # CUB requires at least C++17 https://github.com/ornladios/ADIOS2/issues/4620
    -DCMAKE_CXX_STANDARD=17
    -DADIOS2_USE_CUDA=ON
    -DADIOS2_USE_EXTERNAL_DEPENDENCIES=ON
    #-DADIOS2_HAVE_HDF5_VOL needs hdf5-openmpi
    -DADIOS2_HAVE_HDF5_VOL=OFF
    -DADIOS2_BUILD_EXAMPLES=OFF
    -DADIOS2_USE_Derived_Variables=ON
  )
  cmake "${cmake_options[@]}"
  cmake --build build
}

package() {
  CMAKE_PREFIX_PATH="$pkgdir"/usr/lib/cmake \
  DESTDIR="$pkgdir" cmake --install build
}
