From bf7f38150cd2131e87f2f07cf9fe1116b294780c Mon Sep 17 00:00:00 2001 From: miqlas <5569059+extrowerk@users.noreply.github.com> Date: Mon, 17 Dec 2018 20:29:44 +0100 Subject: [PATCH] FFTW: enable threading, long-double, quad, optimalization (#3032) --- sci-libs/fftw/fftw-3.3.8.recipe | 123 ++++++++++++++++++---- sci-libs/fftw/patches/fftw-3.3.8.patchset | 24 ----- 2 files changed, 104 insertions(+), 43 deletions(-) delete mode 100644 sci-libs/fftw/patches/fftw-3.3.8.patchset diff --git a/sci-libs/fftw/fftw-3.3.8.recipe b/sci-libs/fftw/fftw-3.3.8.recipe index a5202c88e..e2ff92c8e 100644 --- a/sci-libs/fftw/fftw-3.3.8.recipe +++ b/sci-libs/fftw/fftw-3.3.8.recipe @@ -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 } diff --git a/sci-libs/fftw/patches/fftw-3.3.8.patchset b/sci-libs/fftw/patches/fftw-3.3.8.patchset deleted file mode 100644 index 9ee884ca1..000000000 --- a/sci-libs/fftw/patches/fftw-3.3.8.patchset +++ /dev/null @@ -1,24 +0,0 @@ -From 4ee5a540f1e7f19940217378031cd4a4360b435a Mon Sep 17 00:00:00 2001 -From: Jerome Duval -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 -