summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 6ed4cb041a9337af46adc10fdd1dcfc6ffc86cee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# Maintainer: Jakub Klinkovský <lahwaacz at archlinux dot org>

_pkgname=ginkgo
pkgbase=ginkgo-hpc-git
pkgname=(ginkgo-hpc{,-docs,-cuda,-hip}-git)
pkgver=r7470.b22b8592e2
pkgrel=1
pkgdesc="Numerical linear algebra software package"
arch=(x86_64)
url=https://ginkgo-project.github.io/
license=(BSD-3-Clause)
depends=(
  gcc-libs
  glibc
  hwloc
  openmpi
)
# FIXME: system 'rapidjson' does not work due to some C++ issues
# (see the 'declared protected here' error in https://github.com/Tencent/rapidjson/issues/1338#issuecomment-449849215 )
makedepends=(
  git
  cmake
  ninja
  nlohmann-json
  gflags  # for benchmarks (not installed yet)
  gtest
  numactl
  doxygen
  graphviz
  texlive-bin
  texlive-latexextra
  # -cuda
  cuda
  # -hip
  hip-runtime-amd
  hipblas
  hipfft
  hiprand
  hipsparse
  rocthrust
  roctracer
)
source=("git+https://github.com/ginkgo-project/$_pkgname.git")
sha256sums=('SKIP')

pkgver() {
  cd $_pkgname
  printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}

build() {
  local common_cmake_flags=(
    -S $_pkgname -G Ninja
    -DCMAKE_BUILD_TYPE=None
    -DCMAKE_INSTALL_PREFIX=/usr
    -DGINKGO_BUILD_REFERENCE=ON
    -DGINKGO_BUILD_OMP=ON
    -DGINKGO_BUILD_MPI=ON
    -DGINKGO_HAVE_GPU_AWARE_MPI=ON
    -DGINKGO_BUILD_BENCHMARKS=ON
    -DGINKGO_BUILD_EXAMPLES=ON
    -DGINKGO_BUILD_DOC=ON
    -DGINKGO_BUILD_TESTS=ON
  )
  local _cuda_archs="All"
  # archs gfx1010;gfx1012;gfx1030;gfx1100;gfx1101;gfx1102 are not supported: https://github.com/ginkgo-project/ginkgo/issues/1429
  local _amdgpu_archs="gfx906;gfx908;gfx90a;gfx940;gfx941;gfx942"

  # base package
  cmake -B build "${common_cmake_flags[@]}" \
    -DGINKGO_BUILD_CUDA=OFF \
    -DGINKGO_BUILD_HIP=OFF \
    -DGINKGO_BUILD_SYCL=OFF
  cmake --build build

  # -cuda package
  cmake -B build-cuda "${common_cmake_flags[@]}" \
    -DGINKGO_CUDA_ARCHITECTURES="$_cuda_archs" \
    -DGINKGO_BUILD_CUDA=ON \
    -DGINKGO_BUILD_HIP=OFF \
    -DGINKGO_BUILD_SYCL=OFF
  cmake --build build-cuda

  # -hip package
  # ginkgo has insufficient auto-detection for HIP_PATH https://github.com/ginkgo-project/ginkgo/issues/1529#issuecomment-2053598746
  export ROCM_PATH=/opt/rocm
  export HIP_PATH="$ROCM_PATH"
  # LTO does not work with HIP
  local _hip_flags="${CXXFLAGS/-flto=auto/}"
  local _cxx_flags="${CXXFLAGS/-flto=auto/}"
  # HIP does not support -fcf-protection
  _hip_flags="${_hip_flags/-fcf-protection/}"
  # Ginkgo does not support _GLIBCXX_ASSERTIONS for device builds https://github.com/ginkgo-project/ginkgo/issues/1143#issuecomment-2036957897
  _hip_flags="${_hip_flags/-Wp,-D_GLIBCXX_ASSERTIONS/}"
  cmake -B build-hip "${common_cmake_flags[@]}" \
    -DCMAKE_CXX_FLAGS="$_cxx_flags" \
    -DCMAKE_HIP_FLAGS="$_hip_flags" \
    -DCMAKE_HIP_ARCHITECTURES="$_amdgpu_archs" \
    -DGINKGO_BUILD_CUDA=OFF \
    -DGINKGO_BUILD_HIP=ON \
    -DGINKGO_BUILD_SYCL=OFF
  cmake --build build-hip
  unset ROCM_PATH
  unset HIP_PATH
}

check() {
  # some tests fail due to capturing stderr and getting different number of mpirun warnings
  # see https://github.com/ginkgo-project/ginkgo/issues/1567
  local excluded_tests="benchmark_.*_distributed"

  # limit parallel execution of tests to 4 threads and 8 processes
  # note that without a GPU we cannot run tests for -cuda and -hip
  (
    export OMP_NUM_THREADS=4
    export CTEST_PARALLEL_LEVEL=8
    export CTEST_OUTPUT_ON_FAILURE=1
    ctest --test-dir build --exclude-regex "$excluded_tests"
  )
}

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

  # install the license
  install -vDm 644 $_pkgname/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname/"

  # TODO: install the benchmarks and examples: https://github.com/ginkgo-project/ginkgo/issues/1144
}

package_ginkgo-hpc-git() {
  optdepends=(
    'ginkgo-hpc-docs: for documentation'
  )
  conflicts=(ginkgo-hpc)
  provides=(ginkgo-hpc)

  _package ""
}

package_ginkgo-hpc-docs-git() {
  pkgdesc+=" - documentation"
  depends=()
  conflicts=(ginkgo-hpc-docs)
  provides=(ginkgo-hpc-docs)

  # install the documentation
  install -vdm755 "$pkgdir/usr/share/doc/$pkgbase"
  cp -r build/doc/usr "$pkgdir/usr/share/doc/$pkgbase/html"

  # install the license
  install -vDm 644 $_pkgname/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname/"
}

package_ginkgo-hpc-cuda-git() {
  pkgdesc+=" (with CUDA)"
  depends+=(cuda)
  optdepends=(
    'ginkgo-hpc-docs: for documentation'
  )
  conflicts=(ginkgo-hpc)
  provides=(ginkgo-hpc)

  _package -cuda
}

package_ginkgo-hpc-hip-git() {
  pkgdesc+=" (with ROCm/HIP)"
  depends+=(
    hip-runtime-amd
    hipblas
    hipfft
    hiprand
    hipsparse
    roctracer
  )
  optdepends=(
    'ginkgo-hpc-docs: for documentation'
  )
  conflicts=(ginkgo-hpc)
  provides=(ginkgo-hpc)

  _package -hip
}

# vim:set ts=2 sw=2 et: