FFTW FAQ - Section 2
Installing FFTW


Question 2.1. Which systems does FFTW run on?

FFTW is written in ANSI C, and should work on any system with a decent C compiler. (See also Q2.2 `Does FFTW run on Windows?' and Q2.3 `My compiler has trouble with FFTW.'.) FFTW can also take advantage of certain hardware-specific features, such as cycle counters and SIMD instructions, but this is optional.

Question 2.2. Does FFTW run on Windows?

It should. FFTW was not developed on Windows, but the source code is essentially straight ANSI C. Many users have reported using FFTW 2 in the past on Windows with various compilers; we are currently awaiting reports for FFTW 3. See also the FFTW Windows installation notes and Q2.3 `My compiler has trouble with FFTW.'

Question 2.3. My compiler has trouble with FFTW.

Complain fiercely to the vendor of the compiler.

FFTW is a heavily-optimized piece of software that is likely to push compilers to their limits. We have successfully used gcc 3.2.x on x86 and PPC, a recent Compaq C compiler for Alpha, version 6 of IBM's xlc compiler for AIX, Intel's icc versions 5-7, Sun WorkShop cc version 6, for example.

gcc 2.95.3 for Solaris/SPARC produces incorrect code for the test program (workaround: recompile the libbench2 directory with -O2). NetBSD/macppc 1.5 comes with a gcc version that also miscompiles the test program (we haven't tried to find a workaround).

ranlib of GNU binutils 2.9.1 on Irix has been observed to corrupt the FFTW libraries, causing a link failure when FFTW is compiled. Since ranlib is completely superfluous on Irix, we suggest deleting it from your system and replacing it with a symbolic link to /bin/echo.

If support for SIMD instructions is enabled in FFTW, further compiler problems may appear. Some 3.0.x and 3.1.x versions of gcc may crash, although the problem is fixed in version 3.2. gcc 2.95 on MacOS X miscompiles AltiVec code (fixed in later version). gcc 3.2.x miscompiles AltiVec permutations, but FFTW has a workaround. Intel's icc 6.0 misaligns SSE constants, but FFTW has a workaround.

Question 2.4. FFTW does not compile on Solaris, complaining about const.

We know that at least on Solaris 2.5.x with Sun's compilers 4.2 you might get error messages from make such as

"./fftw.h", line 88: warning: const is a keyword in ANSI C

This is the case when the configure script reports that const does not work:

checking for working const... (cached) no

You should be aware that Solaris comes with two compilers, namely, /opt/SUNWspro/SC4.2/bin/cc and /usr/ucb/cc. The latter compiler is non-ANSI. Indeed, it is a perverse shell script that calls the real compiler in non-ANSI mode. In order to compile FFTW, change your path so that the right cc is used.

To know whether your compiler is the right one, type cc -V. If the compiler prints ``ucbcc'', as in

ucbcc: WorkShop Compilers 4.2 30 Oct 1996 C 4.2

then the compiler is wrong. The right message is something like

cc: WorkShop Compilers 4.2 30 Oct 1996 C 4.2

Question 2.5. Which language is FFTW written in?

FFTW is written in ANSI C. Most of the code, however, was automatically generated by a program called genfft, written in the Objective Caml dialect of ML. You do not need to know ML or to have an Objective Caml compiler in order to use FFTW.

genfft is provided with the FFTW sources, which means that you can play with the code generator if you want. In this case, you need a working Objective Caml system. Objective Caml is available from the Caml web page.

Question 2.6. Can I call FFTW from FORTRAN?

Yes, FFTW (versions 1.3 and higher) contains a Fortran-callable interface, documented in the FFTW manual.

By default, FFTW configures its wrapper routines to work with the first compiler it finds, e.g. g77. To configure for a different, incompatible Fortran compiler foobar, use ./configure F77=foobar when installing FFTW. (In the case of g77, however, FFTW 3.x also includes an extra set of Fortran-callable routines with one less underscore at the end of identifiers, which should cover most other Fortran compilers on Linux at least.)

Question 2.7. Can I call FFTW from C++?

Most definitely. FFTW should compile and/or link under any C++ compiler. Moreover, it is likely that the C++ <complex> template class is bit-compatible with FFTW's complex-number format (see the FFTW manual for more details.)

Question 2.8. Why isn't FFTW written in FORTRAN/C++?

Because we don't like those languages, and neither approaches the portability of C.

Question 2.9. How do I compile FFTW to run in single precision?

On a Unix system: configure --enable-float. On a non-Unix system: edit config.h to #define the symbol FFTW_SINGLE (for FFTW 3.x). In both cases, you must then recompile FFTW. All FFTW identifiers will then begin with fftwf_ instead of fftw_.
Next: Using FFTW.
Back: Introduction and General Information.
Return to contents.

Matteo Frigo and Steven G. Johnson / fftw@fftw.org - 16 March 2003

Extracted from FFTW Frequently Asked Questions with Answers, Copyright © 2003 Massachusetts Institute of Technology.