# Maintainer: Torsten Keßler <tpkessler at archlinux dot org>
# Maintainer: Christian Heusel <gromit@archlinux.org>
# Contributor: Markus Näther <naetherm@informatik.uni-freiburg.de>

pkgname=rocalution
pkgver=6.4.4
pkgrel=1
pkgdesc='Next generation library for iterative sparse solvers for ROCm platform'
arch=('x86_64' 'aarch64')
url='https://rocm.docs.amd.com/projects/rocALUTION/en/latest/index.html'
license=('MIT')
depends=('rocm-core' 'hip-runtime-amd' 'glibc' 'gcc-libs'
         'rocsparse' 'rocblas' 'rocsolver' 'rocprim' 'rocrand')
makedepends=('rocm-cmake' 'rocm-toolchain' 'openmp' 'openmpi')
optdepends=('openmp: Multithreaded CPU applications'
            'openmpi: Distributed CPU and multi GPU applications')
_git='https://github.com/ROCm/rocALUTION'
source=("$pkgname-$pkgver.tar.gz::$_git/archive/rocm-$pkgver.tar.gz")
sha256sums=('46b58fea86d576bfa158f48a58c53b5216727fe39cf7278543116ff535ed8297')
options=(!lto)
_dirname="$(basename "$_git")-$(basename "${source[0]}" ".tar.gz")"

build() {
  # Compile source code for supported GPU archs in parallel
  export HIPCC_COMPILE_FLAGS_APPEND="-parallel-jobs=$(nproc)"
  export HIPCC_LINK_FLAGS_APPEND="-parallel-jobs=$(nproc)"
  # -fcf-protection is not supported by HIP, see
  # https://rocm.docs.amd.com/projects/llvm-project/en/latest/reference/rocmcc.html#support-status-of-other-clang-options
  CXXFLAGS+=" -fcf-protection=none"
  export CC=/opt/rocm/llvm/bin/amdclang
  export CXX=/opt/rocm/llvm/bin/amdclang++
  local cmake_args=(
    -Wno-dev
    -S "$_dirname"
    -B build
    -D CMAKE_BUILD_TYPE=None
    -D CMAKE_TOOLCHAIN_FILE="$srcdir/$_dirname/toolchain-linux.cmake"
    -D CMAKE_INSTALL_PREFIX=/opt/rocm
    -D ROCM_PATH=/opt/rocm
    -D SUPPORT_HIP=ON
    -D SUPPORT_OMP=ON
    -D SUPPORT_MPI=ON
    -D BUILD_SHARED_LIBS=ON
    -D GPU_TARGETS=$(rocm-supported-gfx -e gfx950)
  )
  cmake "${cmake_args[@]}"
  cmake --build build
}

package() {
  DESTDIR="$pkgdir" cmake --install build

  install -Dm644 "$_dirname/LICENSE.md" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
