class Fftw < Formula desc "C routines to compute the Discrete Fourier Transform" homepage "http://www.fftw.org" url "http://www.fftw.org/fftw-3.3.10.tar.gz" sha256 "56c932549852cddcfafdab3820b0200c7742675be92179e59e6215b340e26467" bottle do sha256 "7bae5c73283c14c0b8a10ea46aadd6a7c572e012e729971242fa9686de650dbf" => :tiger_altivec end # Update autoconf m4 components - fixes configure with GCC 4.0.1 on Tiger # https://github.com/FFTW/fftw3/commit/d0ce926f1523d95daed48cd7c69572e068dbbfb3 # Skip running configure script as part of the bootstrap process. patch :DATA option "with-fortran", "Enable Fortran bindings" option :universal option "with-mpi", "Enable MPI parallel transforms" option "with-openmp", "Enable OpenMP parallel transforms" depends_on "autoconf" => :build depends_on "automake" => :build depends_on "libtool" => :build depends_on :fortran => :optional depends_on :mpi => [:cc, :optional] needs :openmp if build.with? "openmp" def install # Build sets its own optimisation at -O3 ENV.no_optimization args = ["--enable-shared", "--disable-debug", "--prefix=#{prefix}", "--enable-threads", "--disable-dependency-tracking"] simd_args = ["--enable-sse2"] simd_args << "--enable-avx" if ENV.compiler == :clang && Hardware::CPU.avx? && !build.bottle? args << "--disable-fortran" if build.without? "fortran" args << "--enable-mpi" if build.with? "mpi" args << "--enable-openmp" if build.with? "openmp" # Decide which SIMD options we need simd_single = [] simd_double = [] if Hardware.cpu_type == :intel # enable-sse2 and enable-avx works for both single and double precision simd_single = ["--enable-sse2"] simd_single << "--enable-avx" if ENV.compiler == :clang && Hardware::CPU.avx? && !build.bottle? simd_double = simd_single elsif Hardware::CPU.altivec? && !(build.bottle? && ARGV.bottle_arch == :g3) simd_single << "--enable-altivec" # altivec seems to only work with single precision end ENV.universal_binary if build.universal? # re-bootstrap since we made changes to build infra system "./bootstrap.sh" # single precision # enable-sse only works with single # similarly altivec only works with single precision system "./configure", "--enable-single", *(simd_single + args) system "make", "install" # clean up so we can compile the double precision variant system "make", "clean" # double precision # enable-sse2 only works with double precision (default) system "./configure", *(simd_double + args) system "make", "install" # clean up so we can compile the long-double precision variant system "make", "clean" # long-double precision # no SIMD optimization available system "./configure", "--enable-long-double", *args system "make", "install" end test do # Adapted from the sample usage provided in the documentation: # http://www.fftw.org/fftw3_doc/Complex-One_002dDimensional-DFTs.html (testpath/"fftw.c").write <<-TEST_SCRIPT.undent #include int main(int argc, char* *argv) { fftw_complex *in, *out; fftw_plan p; long N = 1; in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE); fftw_execute(p); /* repeat as needed */ fftw_destroy_plan(p); fftw_free(in); fftw_free(out); return 0; } TEST_SCRIPT system ENV.cc, "-o", "fftw", "fftw.c", "-lfftw3", *ENV.cflags.to_s.split system "./fftw" end end __END__ diff --git a/m4/Makefile.am b/m4/Makefile.am index 860dcf25e..dc4ddfff0 100644 --- a/m4/Makefile.am +++ b/m4/Makefile.am @@ -1,6 +1,7 @@ EXTRA_DIST = acx_mpi.m4 acx_pthread.m4 ax_cc_maxopt.m4 \ -ax_check_compiler_flags.m4 ax_compiler_vendor.m4 \ -ax_gcc_aligns_stack.m4 ax_gcc_version.m4 ax_openmp.m4 +ax_check_compile_flag.m4 ax_compiler_vendor.m4 \ +ax_gcc_aligns_stack.m4 ax_gcc_version.m4 ax_openmp.m4 \ +ax_check_link_flag.m4 # libtool sticks a bunch of extra .m4 files in this directory, # but they don't seem to be needed for the distributed tarball diff --git a/m4/ax_cc_maxopt.m4 b/m4/ax_cc_maxopt.m4 index ca514bdf5..bdb98588b 100644 --- a/m4/ax_cc_maxopt.m4 +++ b/m4/ax_cc_maxopt.m4 @@ -14,9 +14,9 @@ dnl Note also that the flags assume that ANSI C aliasing rules are dnl followed by the code (e.g. for gcc's -fstrict-aliasing), and that dnl floating-point computations can be re-ordered as needed. dnl -dnl Requires macros: AX_CHECK_COMPILER_FLAGS, AX_COMPILER_VENDOR, +dnl Requires macros: AX_CHECK_COMPILE_FLAG, AX_COMPILER_VENDOR, dnl -dnl @version 2011-06-22 +dnl @version 2023-05-14 dnl @license GPLWithACException dnl @author Steven G. Johnson and Matteo Frigo. AC_DEFUN([AX_CC_MAXOPT], @@ -39,7 +39,7 @@ if test "x$ac_test_CFLAGS" != "xset" -a "x$ac_test_CFLAGS" != "xy"; then ;; ibm) xlc_opt="-qarch=auto -qtune=auto" - AX_CHECK_COMPILER_FLAGS($xlc_opt, + AX_CHECK_COMPILE_FLAG($xlc_opt, CFLAGS="-O3 -qalias=ansi -w $xlc_opt", [CFLAGS="-O3 -qalias=ansi -w"]) ;; @@ -48,12 +48,12 @@ if test "x$ac_test_CFLAGS" != "xset" -a "x$ac_test_CFLAGS" != "xy"; then # Intel seems to have changed the spelling of this flag recently icc_ansi_alias="unknown" for flag in -ansi-alias -ansi_alias; do - AX_CHECK_COMPILER_FLAGS($flag, [icc_ansi_alias=$flag; break]) + AX_CHECK_COMPILE_FLAG($flag, [icc_ansi_alias=$flag; break]) done if test "x$icc_ansi_alias" != xunknown; then CFLAGS="$CFLAGS $icc_ansi_alias" fi - AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double") + AX_CHECK_COMPILE_FLAG(-malign-double, CFLAGS="$CFLAGS -malign-double") # We used to check for architecture flags here, e.g. -xHost etc., # but these flags are problematic. On icc-12.0.0, "-mavx -xHost" # overrides -mavx with -xHost, generating SSE2 code instead of AVX @@ -63,8 +63,8 @@ if test "x$ac_test_CFLAGS" != "xset" -a "x$ac_test_CFLAGS" != "xy"; then clang) CFLAGS="-O3 -fomit-frame-pointer" - AX_CHECK_COMPILER_FLAGS(-mtune=native, CFLAGS="$CFLAGS -mtune=native") - AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing,CFLAGS="$CFLAGS -fstrict-aliasing") + AX_CHECK_COMPILE_FLAG(-mtune=native, CFLAGS="$CFLAGS -mtune=native") + AX_CHECK_COMPILE_FLAG(-fstrict-aliasing,CFLAGS="$CFLAGS -fstrict-aliasing") ;; gnu) @@ -73,13 +73,13 @@ if test "x$ac_test_CFLAGS" != "xset" -a "x$ac_test_CFLAGS" != "xy"; then CFLAGS="-O3 -fomit-frame-pointer" # tune for the host by default - AX_CHECK_COMPILER_FLAGS(-mtune=native, CFLAGS="$CFLAGS -mtune=native") + AX_CHECK_COMPILE_FLAG(-mtune=native, CFLAGS="$CFLAGS -mtune=native") # -malign-double for x86 systems - AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double") + AX_CHECK_COMPILE_FLAG(-malign-double, CFLAGS="$CFLAGS -malign-double") # -fstrict-aliasing for gcc-2.95+ - AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing, + AX_CHECK_COMPILE_FLAG(-fstrict-aliasing, CFLAGS="$CFLAGS -fstrict-aliasing") # -fno-schedule-insns is pretty much required on all risc @@ -90,14 +90,14 @@ if test "x$ac_test_CFLAGS" != "xset" -a "x$ac_test_CFLAGS" != "xy"; then # scheduling. The first pass reorders instructions in a way that # is pretty much the worst possible for the purposes of register # allocation. We disable the first pass. - AX_CHECK_COMPILER_FLAGS(-fno-schedule-insns, CFLAGS="$CFLAGS -fno-schedule-insns") + AX_CHECK_COMPILE_FLAG(-fno-schedule-insns, CFLAGS="$CFLAGS -fno-schedule-insns") # flags to enable power ISA 2.07 instructions with gcc (always true with vsx) if test "$have_vsx" = "yes"; then - AX_CHECK_COMPILER_FLAGS(-mcpu=power8, CFLAGS="$CFLAGS -mcpu=power8") - AX_CHECK_COMPILER_FLAGS(-mpower8-fusion, CFLAGS="$CFLAGS -mpower8-fusion") - AX_CHECK_COMPILER_FLAGS(-mpower8-vector, CFLAGS="$CFLAGS -mpower8-vector") - AX_CHECK_COMPILER_FLAGS(-mdirect-move, CFLAGS="$CFLAGS -mdirect-move") + AX_CHECK_COMPILE_FLAG(-mcpu=power8, CFLAGS="$CFLAGS -mcpu=power8") + AX_CHECK_COMPILE_FLAG(-mpower8-fusion, CFLAGS="$CFLAGS -mpower8-fusion") + AX_CHECK_COMPILE_FLAG(-mpower8-vector, CFLAGS="$CFLAGS -mpower8-vector") + AX_CHECK_COMPILE_FLAG(-mdirect-move, CFLAGS="$CFLAGS -mdirect-move") fi ;; esac @@ -113,7 +113,7 @@ if test "x$ac_test_CFLAGS" != "xset" -a "x$ac_test_CFLAGS" != "xy"; then CFLAGS="-O3" fi - AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [ + AX_CHECK_COMPILE_FLAG($CFLAGS, [], [ echo "" echo "********************************************************" echo "* WARNING: The guessed CFLAGS don't seem to work with *" diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4 new file mode 100644 index 000000000..bd753b34d --- /dev/null +++ b/m4/ax_check_compile_flag.m4 @@ -0,0 +1,53 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 6 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS diff --git a/m4/ax_check_compiler_flags.m4 b/m4/ax_check_compiler_flags.m4 deleted file mode 100644 index 86eaf15ef..000000000 --- a/m4/ax_check_compiler_flags.m4 +++ /dev/null @@ -1,40 +0,0 @@ -dnl @synopsis AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE]) -dnl @summary check whether FLAGS are accepted by the compiler -dnl @category Misc -dnl -dnl Check whether the given compiler FLAGS work with the current language's -dnl compiler, or whether they give an error. (Warnings, however, are -dnl ignored.) -dnl -dnl ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on -dnl success/failure. -dnl -dnl @version 2005-05-30 -dnl @license GPLWithACException -dnl @author Steven G. Johnson and Matteo Frigo. -AC_DEFUN([AX_CHECK_COMPILER_FLAGS], -[AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX -AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1]) -dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: -AS_LITERAL_IF([$1], - [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1), [ - ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], - [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) -eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1) -AC_MSG_RESULT($ax_check_compiler_flags) -if test "x$ax_check_compiler_flags" = xyes; then - m4_default([$2], :) -else - m4_default([$3], :) -fi -])dnl AX_CHECK_COMPILER_FLAGS diff --git a/m4/ax_check_link_flag.m4 b/m4/ax_check_link_flag.m4 new file mode 100644 index 000000000..03a30ce4c --- /dev/null +++ b/m4/ax_check_link_flag.m4 @@ -0,0 +1,53 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the linker or gives an error. +# (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the linker's default flags +# when the check is done. The check is thus made with the flags: "LDFLAGS +# EXTRA-FLAGS FLAG". This can for example be used to force the linker to +# issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_LINK_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 6 + +AC_DEFUN([AX_CHECK_LINK_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl +AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [ + ax_check_save_flags=$LDFLAGS + LDFLAGS="$LDFLAGS $4 $1" + AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + LDFLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_LINK_FLAGS diff --git a/m4/ax_gcc_aligns_stack.m4 b/m4/ax_gcc_aligns_stack.m4 index 5188f6df6..d1562372c 100644 --- a/m4/ax_gcc_aligns_stack.m4 +++ b/m4/ax_gcc_aligns_stack.m4 @@ -11,9 +11,9 @@ dnl dnl ACTION-IF-YES/ACTION-IF-NO are shell commands to execute if we are dnl using gcc and the stack is/isn't aligned, respectively. dnl -dnl Requires macro: AX_CHECK_COMPILER_FLAGS, AX_GCC_VERSION +dnl Requires macro: AX_CHECK_COMPILE_FLAG, AX_GCC_VERSION dnl -dnl @version 2005-05-30 +dnl @version 2023-05-14 dnl @license GPLWithACException dnl @author Steven G. Johnson AC_DEFUN([AX_GCC_ALIGNS_STACK], @@ -21,11 +21,11 @@ AC_DEFUN([AX_GCC_ALIGNS_STACK], AC_REQUIRE([AC_PROG_CC]) ax_gcc_aligns_stack=no if test "$GCC" = "yes"; then -AX_CHECK_COMPILER_FLAGS(-mpreferred-stack-boundary=4, [ +AX_CHECK_COMPILE_FLAG(-mpreferred-stack-boundary=4, [ AC_MSG_CHECKING([whether the stack is at least 8-byte aligned by gcc]) save_CFLAGS="$CFLAGS" CFLAGS="-O" - AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double") + AX_CHECK_COMPILE_FLAG(-malign-double, CFLAGS="$CFLAGS -malign-double") AC_TRY_RUN([#include # include struct yuck { int blechh; }; --- a/configure.ac +++ b/configure.ac @@ -9,7 +9,7 @@ define(FFTW_MINOR_VERSION, 10)dnl dnl Version number of the FFTW source package. -AC_INIT(fftw, FFTW_MAJOR_VERSION.FFTW_MINOR_VERSION, fftw@fftw.org) +AC_INIT([fftw],[FFTW_MAJOR_VERSION.FFTW_MINOR_VERSION],[fftw@fftw.org]) AC_CONFIG_SRCDIR(kernel/ifftw.h) dnl Version number for libtool shared libraries. Libtool wants a string @@ -45,27 +45,27 @@ *) arch_prefers_fma=no;; esac -AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug],[compile fftw with extra runtime checks for debugging])], ok=$enableval, ok=no) +AC_ARG_ENABLE(debug, [AS_HELP_STRING([--enable-debug],[compile fftw with extra runtime checks for debugging])], ok=$enableval, ok=no) if test "$ok" = "yes"; then AC_DEFINE(FFTW_DEBUG,1,[Define to enable extra FFTW debugging code.]) fi -AC_ARG_ENABLE(doc, [AC_HELP_STRING([--disable-doc],[disable building the documentation])], build_doc=$enableval, build_doc=yes) +AC_ARG_ENABLE(doc, [AS_HELP_STRING([--disable-doc],[disable building the documentation])], build_doc=$enableval, build_doc=yes) AM_CONDITIONAL(BUILD_DOC, test x"$build_doc" = xyes) -AC_ARG_ENABLE(random-estimator, [AC_HELP_STRING([--enable-random-estimator],[enable pseudorandom estimator (debugging hack)])], ok=$enableval, ok=no) +AC_ARG_ENABLE(random-estimator, [AS_HELP_STRING([--enable-random-estimator],[enable pseudorandom estimator (debugging hack)])], ok=$enableval, ok=no) if test "$ok" = "yes"; then AC_DEFINE(FFTW_RANDOM_ESTIMATOR,1,[Define to enable pseudorandom estimate planning for debugging.]) CHECK_PL_OPTS="--estimate" fi -AC_ARG_ENABLE(alloca, [AC_HELP_STRING([--disable-alloca],[disable use of the alloca() function (may be broken on mingw64)])], ok=$enableval, ok=yes) +AC_ARG_ENABLE(alloca, [AS_HELP_STRING([--disable-alloca],[disable use of the alloca() function (may be broken on mingw64)])], ok=$enableval, ok=yes) if test "$ok" = "yes"; then AC_DEFINE(FFTW_ENABLE_ALLOCA,1,[Define to enable the use of alloca().]) fi -AC_ARG_ENABLE(single, [AC_HELP_STRING([--enable-single],[compile fftw in single precision])], ok=$enableval, ok=no) -AC_ARG_ENABLE(float, [AC_HELP_STRING([--enable-float],[synonym for --enable-single])], ok=$enableval) +AC_ARG_ENABLE(single, [AS_HELP_STRING([--enable-single],[compile fftw in single precision])], ok=$enableval, ok=no) +AC_ARG_ENABLE(float, [AS_HELP_STRING([--enable-float],[synonym for --enable-single])], ok=$enableval) if test "$ok" = "yes"; then AC_DEFINE(FFTW_SINGLE,1,[Define to compile in single precision.]) AC_DEFINE(BENCHFFT_SINGLE,1,[Define to compile in single precision.]) @@ -75,7 +75,7 @@ fi AM_CONDITIONAL(SINGLE, test "$ok" = "yes") -AC_ARG_ENABLE(long-double, [AC_HELP_STRING([--enable-long-double],[compile fftw in long-double precision])], ok=$enableval, ok=no) +AC_ARG_ENABLE(long-double, [AS_HELP_STRING([--enable-long-double],[compile fftw in long-double precision])], ok=$enableval, ok=no) if test "$ok" = "yes"; then if test "$PRECISION" = "s"; then AC_MSG_ERROR([--enable-single/--enable-long-double conflict]) @@ -86,7 +86,7 @@ fi AM_CONDITIONAL(LDOUBLE, test "$ok" = "yes") -AC_ARG_ENABLE(quad-precision, [AC_HELP_STRING([--enable-quad-precision],[compile fftw in quadruple precision if available])], ok=$enableval, ok=no) +AC_ARG_ENABLE(quad-precision, [AS_HELP_STRING([--enable-quad-precision],[compile fftw in quadruple precision if available])], ok=$enableval, ok=no) if test "$ok" = "yes"; then if test "$PRECISION" != "d"; then AC_MSG_ERROR([conflicting precisions specified]) @@ -108,14 +108,14 @@ dnl This behavior is pointless in 2016. --enable-sse2 now works in both precisions, dnl and is interpreted as --enable-sse in single precision. The old flag --enable--se dnl is still supported in single-precision only. -AC_ARG_ENABLE(sse, [AC_HELP_STRING([--enable-sse],[enable SSE optimizations])], have_sse=$enableval, have_sse=no) +AC_ARG_ENABLE(sse, [AS_HELP_STRING([--enable-sse],[enable SSE optimizations])], have_sse=$enableval, have_sse=no) if test "$have_sse" = "yes"; then if test "$PRECISION" != "s"; then AC_MSG_ERROR([SSE requires single precision]) fi fi -AC_ARG_ENABLE(sse2, [AC_HELP_STRING([--enable-sse2],[enable SSE/SSE2 optimizations])], have_sse2=$enableval, have_sse2=no) +AC_ARG_ENABLE(sse2, [AS_HELP_STRING([--enable-sse2],[enable SSE/SSE2 optimizations])], have_sse2=$enableval, have_sse2=no) if test "$have_sse" = "yes"; then have_sse2=yes; fi if test "$have_sse2" = "yes"; then AC_DEFINE(HAVE_SSE2,1,[Define to enable SSE/SSE2 optimizations.]) @@ -125,7 +125,7 @@ fi AM_CONDITIONAL(HAVE_SSE2, test "$have_sse2" = "yes") -AC_ARG_ENABLE(avx, [AC_HELP_STRING([--enable-avx],[enable AVX optimizations])], have_avx=$enableval, have_avx=no) +AC_ARG_ENABLE(avx, [AS_HELP_STRING([--enable-avx],[enable AVX optimizations])], have_avx=$enableval, have_avx=no) if test "$have_avx" = "yes"; then AC_DEFINE(HAVE_AVX,1,[Define to enable AVX optimizations.]) if test "$PRECISION" != "d" -a "$PRECISION" != "s"; then @@ -134,7 +134,7 @@ fi AM_CONDITIONAL(HAVE_AVX, test "$have_avx" = "yes") -AC_ARG_ENABLE(avx2, [AC_HELP_STRING([--enable-avx2],[enable AVX2 optimizations])], have_avx2=$enableval, have_avx2=no) +AC_ARG_ENABLE(avx2, [AS_HELP_STRING([--enable-avx2],[enable AVX2 optimizations])], have_avx2=$enableval, have_avx2=no) if test "$have_avx2" = "yes"; then AC_DEFINE(HAVE_AVX2,1,[Define to enable AVX2 optimizations.]) if test "$PRECISION" != "d" -a "$PRECISION" != "s"; then @@ -143,7 +143,7 @@ fi AM_CONDITIONAL(HAVE_AVX2, test "$have_avx2" = "yes") -AC_ARG_ENABLE(avx512, [AC_HELP_STRING([--enable-avx512],[enable AVX512 optimizations])], have_avx512=$enableval, have_avx512=no) +AC_ARG_ENABLE(avx512, [AS_HELP_STRING([--enable-avx512],[enable AVX512 optimizations])], have_avx512=$enableval, have_avx512=no) if test "$have_avx512" = "yes"; then AC_DEFINE(HAVE_AVX512,1,[Define to enable AVX512 optimizations.]) if test "$PRECISION" != "d" -a "$PRECISION" != "s"; then @@ -156,7 +156,7 @@ dnl since SSE2 is just as fast. However, on AMD processors we can both use dnl FMA4, and 128-bit SIMD is better than 256-bit since core pairs in a dnl compute unit can execute two 128-bit instructions independently. -AC_ARG_ENABLE(avx-128-fma, [AC_HELP_STRING([--enable-avx-128-fma],[enable AVX128/FMA optimizations])], have_avx_128_fma=$enableval, have_avx_128_fma=no) +AC_ARG_ENABLE(avx-128-fma, [AS_HELP_STRING([--enable-avx-128-fma],[enable AVX128/FMA optimizations])], have_avx_128_fma=$enableval, have_avx_128_fma=no) if test "$have_avx_128_fma" = "yes"; then AC_DEFINE(HAVE_AVX_128_FMA,1,[Define to enable 128-bit FMA AVX optimization]) AVX_128_FMA_CFLAGS="${AVX_CFLAGS} -mfma4" @@ -164,7 +164,7 @@ fi AM_CONDITIONAL(HAVE_AVX_128_FMA, test "$have_avx_128_fma" = "yes") -AC_ARG_ENABLE(kcvi, [AC_HELP_STRING([--enable-kcvi],[enable Knights Corner vector instructions optimizations])], have_kcvi=$enableval, have_kcvi=no) +AC_ARG_ENABLE(kcvi, [AS_HELP_STRING([--enable-kcvi],[enable Knights Corner vector instructions optimizations])], have_kcvi=$enableval, have_kcvi=no) if test "$have_kcvi" = "yes"; then AC_DEFINE(HAVE_KCVI,1,[Define to enable KCVI optimizations.]) if test "$PRECISION" != "d" -a "$PRECISION" != "s"; then @@ -173,7 +173,7 @@ fi AM_CONDITIONAL(HAVE_KCVI, test "$have_kcvi" = "yes") -AC_ARG_ENABLE(altivec, [AC_HELP_STRING([--enable-altivec],[enable Altivec optimizations])], have_altivec=$enableval, have_altivec=no) +AC_ARG_ENABLE(altivec, [AS_HELP_STRING([--enable-altivec],[enable Altivec optimizations])], have_altivec=$enableval, have_altivec=no) if test "$have_altivec" = "yes"; then AC_DEFINE(HAVE_ALTIVEC,1,[Define to enable Altivec optimizations.]) if test "$PRECISION" != "s"; then @@ -182,13 +182,13 @@ fi AM_CONDITIONAL(HAVE_ALTIVEC, test "$have_altivec" = "yes") -AC_ARG_ENABLE(vsx, [AC_HELP_STRING([--enable-vsx],[enable IBM VSX optimizations])], have_vsx=$enableval, have_vsx=no) +AC_ARG_ENABLE(vsx, [AS_HELP_STRING([--enable-vsx],[enable IBM VSX optimizations])], have_vsx=$enableval, have_vsx=no) if test "$have_vsx" = "yes"; then AC_DEFINE(HAVE_VSX,1,[Define to enable IBM VSX optimizations.]) fi AM_CONDITIONAL(HAVE_VSX, test "$have_vsx" = "yes") -AC_ARG_ENABLE(neon, [AC_HELP_STRING([--enable-neon],[enable ARM NEON optimizations])], have_neon=$enableval, have_neon=no) +AC_ARG_ENABLE(neon, [AS_HELP_STRING([--enable-neon],[enable ARM NEON optimizations])], have_neon=$enableval, have_neon=no) if test "$have_neon" = "yes"; then AC_DEFINE(HAVE_NEON,1,[Define to enable ARM NEON optimizations.]) case "${host_cpu}" in @@ -203,33 +203,33 @@ fi AM_CONDITIONAL(HAVE_NEON, test "$have_neon" = "yes") -AC_ARG_ENABLE(armv8-pmccntr-el0, [AC_HELP_STRING([--enable-armv8-pmccntr-el0],[enable the cycle counter on ARMv8 via the PMCCNTR_EL0 register (see README-perfcounters for details and mandatory instructions)])], have_armv8pmccntrel0=$enableval) +AC_ARG_ENABLE(armv8-pmccntr-el0, [AS_HELP_STRING([--enable-armv8-pmccntr-el0],[enable the cycle counter on ARMv8 via the PMCCNTR_EL0 register (see README-perfcounters for details and mandatory instructions)])], have_armv8pmccntrel0=$enableval) if test "$have_armv8pmccntrel0"x = "yes"x; then AC_DEFINE(HAVE_ARMV8_PMCCNTR_EL0,1,[Define if you have enabled the PMCCNTR_EL0 cycle counter on ARMv8]) fi -AC_ARG_ENABLE(armv8-cntvct-el0, [AC_HELP_STRING([--enable-armv8-cntvct-el0],[enable the cycle counter on ARMv8 via the CNTVCT_EL0 register (see README-perfcounters for details and mandatory instructions)])], have_armv8cntvctel0=$enableval) +AC_ARG_ENABLE(armv8-cntvct-el0, [AS_HELP_STRING([--enable-armv8-cntvct-el0],[enable the cycle counter on ARMv8 via the CNTVCT_EL0 register (see README-perfcounters for details and mandatory instructions)])], have_armv8cntvctel0=$enableval) if test "$have_armv8cntvctel0"x = "yes"x; then AC_DEFINE(HAVE_ARMV8_CNTVCT_EL0,1,[Define if you have enabled the CNTVCT_EL0 cycle counter on ARMv8]) fi -AC_ARG_ENABLE(armv7a-cntvct, [AC_HELP_STRING([--enable-armv7a-cntvct],[enable the cycle counter on Armv7a via the CNTVCT register (see README-perfcounters for details and mandatory instructions)])], have_armv7acntvct=$enableval) +AC_ARG_ENABLE(armv7a-cntvct, [AS_HELP_STRING([--enable-armv7a-cntvct],[enable the cycle counter on Armv7a via the CNTVCT register (see README-perfcounters for details and mandatory instructions)])], have_armv7acntvct=$enableval) if test "$have_armv7acntvct"x = "yes"x; then AC_DEFINE(HAVE_ARMV7A_CNTVCT,1,[Define if you have enabled the CNTVCT cycle counter on ARMv7a]) fi -AC_ARG_ENABLE(armv7a-pmccntr, [AC_HELP_STRING([--enable-armv7a-pmccntr],[enable the cycle counter on Armv7a via the PMCCNTR register (see README-perfcounters for details and mandatory instructions)])], have_armv7apmccntr=$enableval) +AC_ARG_ENABLE(armv7a-pmccntr, [AS_HELP_STRING([--enable-armv7a-pmccntr],[enable the cycle counter on Armv7a via the PMCCNTR register (see README-perfcounters for details and mandatory instructions)])], have_armv7apmccntr=$enableval) if test "$have_armv7apmccntr"x = "yes"x; then AC_DEFINE(HAVE_ARMV7A_PMCCNTR,1,[Define if you have enabled the PMCCNTR cycle counter on ARMv7a]) fi -AC_ARG_ENABLE(generic-simd128, [AC_HELP_STRING([--enable-generic-simd128],[enable generic (gcc) 128-bit SIMD optimizations])], have_generic_simd128=$enableval, have_generic_simd128=no) +AC_ARG_ENABLE(generic-simd128, [AS_HELP_STRING([--enable-generic-simd128],[enable generic (gcc) 128-bit SIMD optimizations])], have_generic_simd128=$enableval, have_generic_simd128=no) if test "$have_generic_simd128" = "yes"; then AC_DEFINE(HAVE_GENERIC_SIMD128,1,[Define to enable generic (gcc) 128-bit SIMD optimizations.]) fi AM_CONDITIONAL(HAVE_GENERIC_SIMD128, test "$have_generic_simd128" = "yes") -AC_ARG_ENABLE(generic-simd256, [AC_HELP_STRING([--enable-generic-simd256],[enable generic (gcc) 256-bit SIMD optimizations])], have_generic_simd256=$enableval, have_generic_simd256=no) +AC_ARG_ENABLE(generic-simd256, [AS_HELP_STRING([--enable-generic-simd256],[enable generic (gcc) 256-bit SIMD optimizations])], have_generic_simd256=$enableval, have_generic_simd256=no) if test "$have_generic_simd256" = "yes"; then AC_DEFINE(HAVE_GENERIC_SIMD256,1,[Define to enable generic (gcc) 256-bit SIMD optimizations.]) fi @@ -237,7 +237,7 @@ dnl FIXME: -dnl AC_ARG_ENABLE(mips-ps, [AC_HELP_STRING([--enable-mips-ps],[enable MIPS pair-single optimizations])], have_mips_ps=$enableval, have_mips_ps=no) +dnl AC_ARG_ENABLE(mips-ps, [AS_HELP_STRING([--enable-mips-ps],[enable MIPS pair-single optimizations])], have_mips_ps=$enableval, have_mips_ps=no) dnl if test "$have_mips_ps" = "yes"; then dnl AC_DEFINE(HAVE_MIPS_PS,1,[Define to enable MIPS paired-single optimizations.]) dnl if test "$PRECISION" != "s"; then @@ -246,31 +246,31 @@ dnl fi dnl AM_CONDITIONAL(HAVE_MIPS_PS, test "$have_mips_ps" = "yes") -AC_ARG_WITH(slow-timer, [AC_HELP_STRING([--with-slow-timer],[use low-precision timers (SLOW)])], with_slow_timer=$withval, with_slow_timer=no) +AC_ARG_WITH(slow-timer, [AS_HELP_STRING([--with-slow-timer],[use low-precision timers (SLOW)])], with_slow_timer=$withval, with_slow_timer=no) if test "$with_slow_timer" = "yes"; then AC_DEFINE(WITH_SLOW_TIMER,1,[Use low-precision timers, making planner very slow]) fi -AC_ARG_ENABLE(mips_zbus_timer, [AC_HELP_STRING([--enable-mips-zbus-timer],[use MIPS ZBus cycle-counter])], have_mips_zbus_timer=$enableval, have_mips_zbus_timer=no) +AC_ARG_ENABLE(mips_zbus_timer, [AS_HELP_STRING([--enable-mips-zbus-timer],[use MIPS ZBus cycle-counter])], have_mips_zbus_timer=$enableval, have_mips_zbus_timer=no) if test "$have_mips_zbus_timer" = "yes"; then AC_DEFINE(HAVE_MIPS_ZBUS_TIMER,1,[Define to enable use of MIPS ZBus cycle-counter.]) fi -AC_ARG_WITH(our-malloc, [AC_HELP_STRING([--with-our-malloc],[use our aligned malloc (helpful for Win32)])], with_our_malloc=$withval, with_our_malloc=no) -AC_ARG_WITH(our-malloc16, [AC_HELP_STRING([--with-our-malloc16],[Obsolete alias for --with-our-malloc16])], with_our_malloc=$withval) +AC_ARG_WITH(our-malloc, [AS_HELP_STRING([--with-our-malloc],[use our aligned malloc (helpful for Win32)])], with_our_malloc=$withval, with_our_malloc=no) +AC_ARG_WITH(our-malloc16, [AS_HELP_STRING([--with-our-malloc16],[Obsolete alias for --with-our-malloc16])], with_our_malloc=$withval) if test "$with_our_malloc" = "yes"; then AC_DEFINE(WITH_OUR_MALLOC,1,[Use our own aligned malloc routine; mainly helpful for Windows systems lacking aligned allocation system-library routines.]) fi -AC_ARG_WITH(windows-f77-mangling, [AC_HELP_STRING([--with-windows-f77-mangling],[use common Win32 Fortran interface styles])], with_windows_f77_mangling=$withval, with_windows_f77_mangling=no) +AC_ARG_WITH(windows-f77-mangling, [AS_HELP_STRING([--with-windows-f77-mangling],[use common Win32 Fortran interface styles])], with_windows_f77_mangling=$withval, with_windows_f77_mangling=no) if test "$with_windows_f77_mangling" = "yes"; then AC_DEFINE(WINDOWS_F77_MANGLING,1,[Use common Windows Fortran mangling styles for the Fortran interfaces.]) fi -AC_ARG_WITH(incoming-stack-boundary, [AC_HELP_STRING([--with-incoming-stack-boundary=X],[Assume that stack is aligned to (1< -#endif], [_rtc()], [AC_DEFINE(HAVE__RTC,1,[Define if you have the UNICOS _rtc() intrinsic.])], [rtc_ok=no]) +#endif]], [[_rtc()]])],[AC_DEFINE(HAVE__RTC,1,[Define if you have the UNICOS _rtc() intrinsic.])],[rtc_ok=no]) AC_MSG_RESULT($rtc_ok) if test "$PRECISION" = "l"; then @@ -586,8 +586,8 @@ fi AC_MSG_CHECKING([for isnan]) -AC_TRY_LINK([#include -], if (!isnan(3.14159)) isnan(2.7183);, ok=yes, ok=no) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include +]], [[if (!isnan(3.14159)) isnan(2.7183);]])],[ok=yes],[ok=no]) if test "$ok" = "yes"; then AC_DEFINE(HAVE_ISNAN,1,[Define if the isnan() function/macro is available.]) fi @@ -604,7 +604,7 @@ dnl add gcc warnings, in debug/maintainer mode only if test "$enable_debug" = yes || test "$USE_MAINTAINER_MODE" = yes; then if test "$ac_test_CFLAGS" != "set"; then - if test $ac_cv_prog_gcc = yes; then + if test $ac_cv_c_compiler_gnu = yes; then CFLAGS="$CFLAGS -Wall -W -Wcast-qual -Wpointer-arith -Wcast-align -pedantic -Wno-long-long -Wshadow -Wbad-function-cast -Wwrite-strings -Wstrict-prototypes -Wredundant-decls -Wnested-externs" # -Wundef -Wconversion -Wmissing-prototypes -Wmissing-declarations fi fi @@ -631,7 +631,7 @@ dnl ----------------------------------------------------------------------- -AC_ARG_ENABLE(fortran, [AC_HELP_STRING([--disable-fortran],[don't include Fortran-callable wrappers])], enable_fortran=$enableval, enable_fortran=yes) +AC_ARG_ENABLE(fortran, [AS_HELP_STRING([--disable-fortran],[don't include Fortran-callable wrappers])], enable_fortran=$enableval, enable_fortran=yes) if test "$enable_fortran" = "yes"; then AC_PROG_F77 @@ -662,27 +662,27 @@ with_g77_wrappers=no fi -AC_ARG_WITH(g77-wrappers, [AC_HELP_STRING([--with-g77-wrappers],[force inclusion of g77-compatible wrappers in addition to any other Fortran compiler that is detected])], with_g77_wrappers=$withval) +AC_ARG_WITH(g77-wrappers, [AS_HELP_STRING([--with-g77-wrappers],[force inclusion of g77-compatible wrappers in addition to any other Fortran compiler that is detected])], with_g77_wrappers=$withval) if test "x$with_g77_wrappers" = "xyes"; then AC_DEFINE(WITH_G77_WRAPPERS,1,[Include g77-compatible wrappers in addition to any other Fortran wrappers.]) fi dnl ----------------------------------------------------------------------- have_smp="no" -AC_ARG_ENABLE(openmp, [AC_HELP_STRING([--enable-openmp],[use OpenMP directives for parallelism])], enable_openmp=$enableval, enable_openmp=no) +AC_ARG_ENABLE(openmp, [AS_HELP_STRING([--enable-openmp],[use OpenMP directives for parallelism])], enable_openmp=$enableval, enable_openmp=no) if test "$enable_openmp" = "yes"; then AC_DEFINE(HAVE_OPENMP,1,[Define to enable OpenMP]) AX_OPENMP([], [AC_MSG_ERROR([don't know how to enable OpenMP])]) fi -AC_ARG_ENABLE(threads, [AC_HELP_STRING([--enable-threads],[compile FFTW SMP threads library])], enable_threads=$enableval, enable_threads=no) +AC_ARG_ENABLE(threads, [AS_HELP_STRING([--enable-threads],[compile FFTW SMP threads library])], enable_threads=$enableval, enable_threads=no) if test "$enable_threads" = "yes"; then AC_DEFINE(HAVE_THREADS,1,[Define to enable SMP threads]) fi -AC_ARG_WITH(combined-threads, [AC_HELP_STRING([--with-combined-threads],[combine threads into main libfftw3])], with_combined_threads=$withval, with_combined_threads=no) +AC_ARG_WITH(combined-threads, [AS_HELP_STRING([--with-combined-threads],[combine threads into main libfftw3])], with_combined_threads=$withval, with_combined_threads=no) if test "$with_combined_threads" = yes; then if test "$enable_openmp" = "yes"; then @@ -699,10 +699,7 @@ # Win32 threads are the default on Windows: if test -z "$THREADLIBS"; then AC_MSG_CHECKING([for Win32 threads]) - AC_TRY_LINK([#include ], - [_beginthreadex(0,0,0,0,0,0);], - [THREADLIBS=" "; AC_MSG_RESULT(yes)], - [AC_MSG_RESULT(no)]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[_beginthreadex(0,0,0,0,0,0);]])],[THREADLIBS=" "; AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)]) fi # POSIX threads, the default choice everywhere else: @@ -728,10 +725,10 @@ AC_MSG_CHECKING([whether a cycle counter is available]) save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$srcdir/kernel" -AC_TRY_CPP([#include "cycle.h" +AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include "cycle.h" #ifndef HAVE_TICK_COUNTER # error No cycle counter -#endif], [ok=yes], [ok=no]) +#endif]])],[ok=yes],[ok=no]) CPPFLAGS=$save_CPPFLAGS AC_MSG_RESULT($ok) if test $ok = no && test "x$with_slow_timer" = xno; then --- a/bootstrap.sh +++ b/bootstrap.sh @@ -18,9 +18,3 @@ autoreconf --verbose --install --symlink --force rm -f config.cache - -# --enable-maintainer-mode enables build of genfft and automatic -# rebuild of codelets whenever genfft changes -( - ./configure --disable-shared --enable-maintainer-mode --enable-threads $* -)