FFTW: enable threading, long-double, quad, optimalization (#3032)

This commit is contained in:
miqlas
2018-12-17 20:29:44 +01:00
committed by waddlesplash
parent 97e7ff2c61
commit bf7f38150c
2 changed files with 104 additions and 43 deletions

View File

@@ -15,10 +15,9 @@ HOMEPAGE="http://www.fftw.org/"
COPYRIGHT="2003, 2007-2011 Matteo Frigo
2003, 2007-2011 Massachusetts Institute of Technology"
LICENSE="GNU GPL v2"
REVISION="1"
REVISION="2"
SOURCE_URI="http://www.fftw.org/fftw-$portVersion.tar.gz"
CHECKSUM_SHA256="6113262f6e92c5bd474f2875fa1b01054c4ad5040f6b0da7c03c98821d9ae303"
SOURCE_DIR="fftw-$portVersion"
ARCHITECTURES="x86_gcc2 x86 x86_64"
SECONDARY_ARCHITECTURES="x86_gcc2 x86"
@@ -29,28 +28,60 @@ libVersionCompat="$libVersion compat >= ${libVersion%%.*}"
PROVIDES="
fftw$secondaryArchSuffix = $portVersion compat >= 3
cmd:fftw_wisdom$secondaryArchSuffix
cmd:fftw_wisdom_to_conf$secondaryArchSuffix
cmd:fftwf_wisdom$secondaryArchSuffix
cmd:fftwl_wisdom$secondaryArchSuffix
cmd:fftwq_wisdom$secondaryArchSuffix
cmd:fftw_wisdom_to_conf$secondaryArchSuffix
lib:libfftw3$secondaryArchSuffix = $libVersionCompat
lib:libfftw3_threads$secondaryArchSuffix = $libVersionCompat
lib:libfftw3f$secondaryArchSuffix = $libVersionCompat
lib:libfftw3f_threads$secondaryArchSuffix = $libVersionCompat
lib:libfftw3l$secondaryArchSuffix = $libVersionCompat
lib:libfftw3l_threads$secondaryArchSuffix = $libVersionCompat
"
if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
PROVIDES+="
lib:libfftw3q$secondaryArchSuffix = $libVersionCompat
lib:libfftw3q_threads$secondaryArchSuffix = $libVersionCompat
"
fi
REQUIRES="
haiku$secondaryArchSuffix
"
if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
REQUIRES+="
lib:libquadmath$secondaryArchSuffix
"
fi
PROVIDES_devel="
fftw${secondaryArchSuffix}_devel = $portVersion compat >= 3
devel:libfftw3$secondaryArchSuffix = $libVersionCompat
devel:libfftw3_threads$secondaryArchSuffix = $libVersionCompat
devel:libfftw3f$secondaryArchSuffix = $libVersionCompat
devel:libfftw3f_threads$secondaryArchSuffix = $libVersionCompat
devel:libfftw3l$secondaryArchSuffix = $libVersionCompat
devel:libfftw3l_threads$secondaryArchSuffix = $libVersionCompat
"
if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
PROVIDES_devel+="
devel:libfftw3q$secondaryArchSuffix = $libVersionCompat
devel:libfftw3q_threads$secondaryArchSuffix = $libVersionCompat
"
fi
REQUIRES_devel="
fftw$secondaryArchSuffix == $portVersion base
"
BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
"
if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
BUILD_REQUIRES+="
devel:libgfortran$secondaryArchSuffix
"
fi
BUILD_PREREQUIRES="
cmd:awk
cmd:cmp
@@ -62,42 +93,96 @@ BUILD_PREREQUIRES="
cmd:perl
"
defineDebugInfoPackage fftw$secondaryArchSuffix \
$libDir/libfftw3.so.$libVersion \
$libDir/libfftw3f.so.$libVersion
debugList=(
"$libDir"/libfftw3.so.$libVersion
"$libDir"/libfftw3_threads.so.$libVersion
"$libDir"/libfftw3f.so.$libVersion
"$libDir"/libfftw3f_threads.so.$libVersion
"$libDir"/libfftw3l.so.$libVersion
"$libDir"/libfftw3l_threads.so.$libVersion
)
if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
debugList+=(
"$libDir"/libfftw3q.so.$libVersion
"$libDir"/libfftw3q_threads.so.$libVersion
)
fi
defineDebugInfoPackage fftw$secondaryArchSuffix "${debugList[@]}"
BUILD()
{
make clean && make distclean || true
mkdir -p double long-double quad float
# 32 bit targets NORTHWOOD
# 64 bit targets PRESCOTT
CONFIGURE="--enable-shared --enable-threads"
if [ "$effectiveTargetArchitecture" = x86_64 ]; then
CONFIGURE_X86_64="--enable-sse2"
fi
# build double-precision version
runConfigure ./configure --enable-shared
cd double
runConfigure ../configure \
$CONFIGURE \
$CONFIGURE_X86_64
make $jobArgs
make install
cd ..
make clean && make distclean || true
# build long-double-precision version, can't handle sse2
cd long-double
runConfigure ../configure \
--enable-long-double \
$CONFIGURE
make $jobArgs
cd ..
if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
# build long-quad-precision version, can't handle sse2
cd quad
runConfigure ../configure \
--enable-quad-precision \
$CONFIGURE
make $jobArgs
cd ..
fi
# build float-precision version
runConfigure ./configure --enable-float --enable-shared
cd float
runConfigure ../configure \
--enable-float \
$CONFIGURE \
$CONFIGURE_X86_64
make $jobArgs
make install
cd ..
}
DIRS="double long-double float"
fftwLibs="libfftw3 libfftw3_threads libfftw3f libfftw3f_threads libfftw3l libfftw3l_threads"
if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
DIRS="$DIRS quad"
fftwLibs="$fftwLibs libfftw3q libfftw3q_threads"
fi
INSTALL()
{
rm $libDir/libfftw*.la
for i in $DIRS; do
make -C $i install
done
prepareInstalledDevelLibs \
libfftw3 \
libfftw3f
rm -f "$libDir"/libfftw*.la
prepareInstalledDevelLibs $fftwLibs
fixPkgconfig
packageEntries devel \
$developDir \
$libDir/cmake
"$developDir" \
"$libDir"/cmake
}
TEST()
{
make check
for i in $DIRS; do
make -C $i check
done
}

View File

@@ -1,24 +0,0 @@
From 4ee5a540f1e7f19940217378031cd4a4360b435a Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Tue, 2 Aug 2016 22:25:47 +0200
Subject: gcc2 patch
diff --git a/kernel/stride.c b/kernel/stride.c
index 689fdc8..27b631b 100644
--- a/kernel/stride.c
+++ b/kernel/stride.c
@@ -26,8 +26,9 @@ const INT X(an_INT_guaranteed_to_be_zero) = 0;
stride X(mkstride)(INT n, INT s)
{
int i;
+ INT *p;
A(n >= 0);
- INT *p = (INT *) MALLOC((size_t)n * sizeof(INT), STRIDES);
+ p = (INT *) MALLOC((size_t)n * sizeof(INT), STRIDES);
for (i = 0; i < n; ++i)
p[i] = s * i;
--
2.2.2