summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 65e1931057d2e121aa2982f28d1029dcad1afc0e (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
# Submitter: tuxzz <dorazzsoft@gmail.com>
# Maintainer: Jesse Codling <codling@umich.edu>
# Contributor: EntropicEffect <william.grunow93@gmail.com>
pkgname=fftw-amd
_ver=5.0
_fftw=3.3.10
pkgver=${_fftw}amd${_ver}
pkgrel=1
pkgdesc="A library for computing the discrete Fourier transform (DFT) - AMD Ryzen/EPYC Optimized Version"
arch=('x86_64')
license=('GPL2')
url="https://github.com/amd/amd-fftw/"
conflicts=('fftw' 'fftw-openmpi')
provides=(
	fftw=${_fftw}
	fftw-openmpi=${_fftw}
)
provides=(
	libfftw3q_threads.so
	libfftw3q_omp.so
	libfftw3q.so
	libfftw3l_threads.so
	libfftw3l_omp.so
	libfftw3l.so
	libfftw3f_threads.so
	libfftw3f_omp.so
	libfftw3f.so
	libfftw3_threads.so
	libfftw3_omp.so
	libfftw3.so
	libfftw3l_mpi.so
	libfftw3f_mpi.so
	libfftw3_mpi.so
)
depends=(openmpi)

makedepends=(
	cmake
	gcc-fortran
	openmpi
)

source=(
	"https://github.com/amd/amd-fftw/archive/refs/tags/${_ver}.tar.gz"
)
sha512sums=('52ceb6ad146df7a6f54e3a7df779cf83b24b1168674531f4504bf3cbbfe7d3accb5b1b1ecb462d77bf7753de6c7bedcf424ba4938193e094482c713b32cd00b4')

prepare() {
	rm -r "${pkgname}-${pkgver}" || true
	mv -v amd-fftw-${_ver} "${pkgname}-${pkgver}"
	cp -av "${pkgname}-${pkgver}" "${pkgname}-${pkgver}-double"
	cp -av "${pkgname}-${pkgver}" "${pkgname}-${pkgver}-double"
	cp -av "${pkgname}-${pkgver}" "${pkgname}-${pkgver}-long-double"
	cp -av "${pkgname}-${pkgver}" "${pkgname}-${pkgver}-quad"
}

build() {
	export F77='gfortran'
	CFLAGS+=" -ftree-vectorize -fomit-frame-pointer -malign-double -fstrict-aliasing -ffast-math -O3 -Wno-incompatible-pointer-types"
	export CFLAGS=${CFLAGS/-march=x86-64/}
	# don't overwrite CFLAGS, though make sure CPU optimizations can be done
	export FFLAGS="$CFLAGS"
	_default_configure="./configure --prefix=/usr --enable-shared --enable-threads --enable-mpi --enable-openmp --enable-dynamic-dispatcher --enable-amd-opt"

	# configure single precision
	(
		cd "${pkgname}-${pkgver}"
		${_default_configure} --enable-sse2 --enable-avx --enable-avx2 --enable-single --enable-amd-mpifft --enable-amd-fast-planner
	)

	# configure double precision
	(
		cd "${pkgname}-${pkgver}-double"
		${_default_configure} --enable-sse2 --enable-avx --enable-avx2 --enable-amd-mpifft --enable-amd-fast-planner
	)

	# configure long-double precission
	(
		cd "${pkgname}-${pkgver}-long-double"
		${_default_configure} --enable-long-double --enable-amd-mpifft
	)

	# configure quad precision
	(
		cd "${pkgname}-${pkgver}-quad"
		${_default_configure} --disable-mpi --enable-quad-precision
	)

	make -C "${pkgname}-${pkgver}"
	make -C "${pkgname}-${pkgver}-double"
	make -C "${pkgname}-${pkgver}-long-double"
	make -C "${pkgname}-${pkgver}-quad"
}

package() {
	make DESTDIR="${pkgdir}" install -C "${pkgname}-${pkgver}"
	make DESTDIR="${pkgdir}" install -C "${pkgname}-${pkgver}-double"
	make DESTDIR="${pkgdir}" install -C "${pkgname}-${pkgver}-long-double"
	make DESTDIR="${pkgdir}" install -C "${pkgname}-${pkgver}-quad"
	cd "${pkgname}-${pkgver}"
	install -vDm 644 {AUTHORS,ChangeLog,NEWS,TODO,README_AMD.md} -t "${pkgdir}/usr/share/doc/${pkgname}"
}