Files
2026-05-22 12:45:53 -04:00

272 lines
9.3 KiB
Tcl

# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
PortGroup muniversal 1.0
PortGroup mpi 1.0
PortGroup xcode_workaround 1.0
name fftw-3
version 3.3.11
revision 0
checksums rmd160 217efd937f273ed93dc3bec2e897c884da781d26 \
sha256 5630c24cdeb33b131612f7eb4b1a9934234754f9f388ff8617458d0be6f239a1 \
size 4310712
categories math
license GPL-2+
maintainers {mcalhoun @MarcusCalhoun-Lopez} openmaintainer
homepage https://www.fftw.org/
distname fftw-${version}
master_sites \
${homepage} \
ftp://ftp.fftw.org/pub/fftw/ \
ftp://ftp.kusastro.kyoto-u.ac.jp/pub/src/GNU/fftw/
description \
Fast C routines to compute the Discrete Fourier Transform
long_description \
FFTW is a C subroutine library for computing the \
Discrete Fourier Transform (DFT) in one or more \
dimensions, of both real and complex data, and of \
arbitrary input size. We believe that FFTW, which is \
free software, should become the FFT library of choice \
for most applications. Our benchmarks, performed on a \
variety of platforms, show that FFTW's performance is \
typically superior to that of other publicly available \
FFT software. Moreover, FFTW's performance is portable: \
the program will perform well on most architectures \
without modification. \
This port is of fftw version 3.x. It has many \
improvements relative to 2.x, but is not backwardly \
compatible.
compilers.setup default_fortran
# see https://trac.macports.org/ticket/59678
xcode_workaround.fixed_xcode_version 11.2
variant openmp description {Add OpenMP support} {
configure.args-append --enable-openmp
}
variant threads description {Legacy compatibility variant} requires openmp {
}
if {[variant_isset openmp] && ![c_variant_isset]} {
compiler.openmp_version 2.5
}
variant pfft_patches description {Apply patches recommended for use as dependency of pfft port} {
if {![mpi_variant_isset]} {
ui_warn "Variant +pfft_patches has no effect without setting an MPI variant."
}
# Cut from scripts at https://www-user.tu-chemnitz.de/~potts/workgroup/pippig/software.php.en#fftwinstall,
# except that the last hunk of mpi/transpose-pairwise.c has been incorporated into 3.3.5 already.
#Important: Within these scripts we apply the following patches that have been submitted to FFTW but are not yet included in FFTW-3.3.4:
# We add two more global transposition algorithms to the planner.
# We patch file mpi/transpose-pairwise.c in order to fix a double free bug.
patchfiles-append patch-pfft.diff
# mpi/Makefile.am is modified, and effects are complicated to emulate with a patch to mpi/Makefile.in
use_autoreconf yes
}
# don't change configure.cc, etc. since we'll take care of that manually with
# MPICC env var
mpi.setup
# blacklist older versions of clang which do not handle the --enable-avx option (#41622, #41673)
compiler.blacklist-append {clang <= 211.10.1} gcc-4.2
# see https://trac.macports.org/ticket/60145
compiler.blacklist-append *gcc-3.* *gcc-4.*
configure.args \
--enable-threads \
--disable-fortran \
--enable-shared
configure.optflags -O3
configure.cflags-append \
-fno-common \
-fomit-frame-pointer \
-fstrict-aliasing
pre-configure {
if { [avx_compiler_isset] == 1 } {
array set merger_configure_args {
arm64 ""
ppc "--enable-fma"
ppc64 "--enable-fma"
i386 "--enable-sse2 --enable-avx"
x86_64 "--enable-sse2 --enable-avx"
}
} else {
array set merger_configure_args {
arm64 ""
ppc "--enable-fma"
ppc64 "--enable-fma"
i386 "--enable-sse2"
x86_64 "--enable-sse2"
}
}
}
test.run yes
test.target check
platform darwin {
if {${os.major} < 10} {
configure.args-append --with-our-malloc
}
}
subport fftw-3-single {
configure.args-append --enable-float
depends_lib port:fftw-3
pre-configure {
if { [avx_compiler_isset] == 1 } {
array set merger_configure_args {
arm64 "--enable-neon"
ppc "--enable-fma --enable-altivec"
ppc64 "--enable-fma --enable-altivec"
i386 "--enable-sse --enable-avx"
x86_64 "--enable-sse --enable-avx"
}
} else {
array set merger_configure_args {
arm64 "--enable-neon"
ppc "--enable-fma --enable-altivec"
ppc64 "--enable-fma --enable-altivec"
i386 "--enable-sse"
x86_64 "--enable-sse"
}
}
if {![variant_exists universal] || ![variant_isset universal]} {
configure.args-append $merger_configure_args(${configure.build_arch})
}
platform i386 {
if {![variant_exists universal] || ![variant_isset universal]} {
configure.args-delete --enable-sse2
configure.args-append --enable-sse
}
}
}
post-destroot {
file delete ${destroot}${prefix}/include/fftw3.f
file delete ${destroot}${prefix}/include/fftw3.f03
file delete ${destroot}${prefix}/include/fftw3l.f03
file delete ${destroot}${prefix}/include/fftw3q.f03
file delete ${destroot}${prefix}/include/fftw3.h
file delete ${destroot}${prefix}/bin/fftw-wisdom-to-conf
file delete ${destroot}${prefix}/share/man/man1/fftw-wisdom-to-conf.1
file delete ${destroot}${prefix}/share/info/fftw3.info
file delete ${destroot}${prefix}/share/info/fftw3.info-1
file delete ${destroot}${prefix}/share/info/fftw3.info-2
file delete ${destroot}${prefix}/share/info/fftw3.info-3
file delete ${destroot}${prefix}/share/info/fftw3.info-4
file delete ${destroot}${prefix}/share/info/fftw3.info-5
if {[mpi_variant_isset]} {
file delete ${destroot}${prefix}/include/fftw3-mpi.f03
file delete ${destroot}${prefix}/include/fftw3-mpi.h
file delete ${destroot}${prefix}/include/fftw3l-mpi.f03
}
}
}
subport fftw-3-long {
configure.args-append --enable-long-double
depends_lib port:fftw-3
pre-configure {
array set merger_configure_args {
arm64 ""
ppc ""
ppc64 ""
i386 ""
x86_64 ""
}
}
post-destroot {
file delete ${destroot}${prefix}/include/fftw3.f
file delete ${destroot}${prefix}/include/fftw3.f03
file delete ${destroot}${prefix}/include/fftw3l.f03
file delete ${destroot}${prefix}/include/fftw3q.f03
file delete ${destroot}${prefix}/include/fftw3.h
file delete ${destroot}${prefix}/bin/fftw-wisdom-to-conf
file delete ${destroot}${prefix}/share/man/man1/fftw-wisdom-to-conf.1
file delete ${destroot}${prefix}/share/info/fftw3.info
file delete ${destroot}${prefix}/share/info/fftw3.info-1
file delete ${destroot}${prefix}/share/info/fftw3.info-2
file delete ${destroot}${prefix}/share/info/fftw3.info-3
file delete ${destroot}${prefix}/share/info/fftw3.info-4
file delete ${destroot}${prefix}/share/info/fftw3.info-5
if {[mpi_variant_isset]} {
file delete ${destroot}${prefix}/include/fftw3-mpi.f03
file delete ${destroot}${prefix}/include/fftw3-mpi.h
file delete ${destroot}${prefix}/include/fftw3l-mpi.f03
}
}
}
if {${os.arch} eq "i386"} {
lappend merger_configure_args(arm64) "--disable-fortran"
lappend merger_configure_args(ppc) "--disable-fortran"
lappend merger_configure_args(ppc64) "--disable-fortran"
} elseif {${os.arch} eq "powerpc"} {
lappend merger_configure_args(arm64) "--disable-fortran"
lappend merger_configure_args(i386) "--disable-fortran"
lappend merger_configure_args(x86_64) "--disable-fortran"
} else {
lappend merger_configure_args(ppc) "--disable-fortran"
lappend merger_configure_args(ppc64) "--disable-fortran"
lappend merger_configure_args(i386) "--disable-fortran"
lappend merger_configure_args(x86_64) "--disable-fortran"
}
if {[fortran_variant_isset]} {
configure.args-delete --disable-fortran
}
# this is put at the bottom to run last (after the sub-ports have done their own
# logic)
pre-configure {
if {[mpi_variant_isset]} {
# MPIRUN is needed for test phase
configure.env MPICC=${mpi.cc} MPIRUN=${mpi.exec}
configure.args-append --enable-mpi
}
if {![variant_exists universal] || ![variant_isset universal]} {
configure.args-append $merger_configure_args(${configure.build_arch})
# Fix G3 build
platform powerpc {
if {[catch {sysctl hw.vectorunit} result] || $result == 0} {
# Added twice so delete twice
configure.args-delete "--enable-fma --enable-altivec"
configure.args-delete "--enable-fma --enable-altivec"
}
}
}
}
if {${name} eq ${subport}} {
livecheck.type regex
livecheck.url ${homepage}
livecheck.regex {FFTW (\d+(?:\.\d+)*) is the latest}
} else {
livecheck.type none
}