[patch] add --disable-fft-double etc.

Nathan (Jasper) Myers ncm at codesourcery.com
Fri Dec 23 00:24:43 UTC 2005


The patch below implements configure options
  --disable-fft-float --disable-fft-double --disable-fft-long-double
to omit building support for those operations.  

This is in addition to Don's --with-fft=none.  For the moment the two 
don't interact, but that will change, trivially, when built-in FFTW3 
is used in fill in omissions from other libraries.

Not committed yet.  OK?

Nathan Myers
ncm

Index: ChangeLog
===================================================================
RCS file: /home/cvs/Repository/vpp/ChangeLog,v
retrieving revision 1.351
diff -u -p -r1.351 ChangeLog
--- ChangeLog	22 Dec 2005 16:31:40 -0000	1.351
+++ ChangeLog	23 Dec 2005 00:15:19 -0000
@@ -1,3 +1,9 @@
+2005-12-22  Nathan Myers  <ncm at codesourcery.com>
+	
+	* configure.ac, vendor/GNUmakefile.inc.in: Add configure options
+	  --disable-fft-double etc., and arrange not to build/install/clean
+	  built-in FFTW3 libs so disabled.
+
 2005-12-22  Stefan Seefeld  <stefan at codesourcery.com>
 
 	* GNUmakefile.in: Define and use 'suffix' during installation.
Index: configure.ac
===================================================================
RCS file: /home/cvs/Repository/vpp/configure.ac,v
retrieving revision 1.64
diff -u -p -r1.64 configure.ac
--- configure.ac	22 Dec 2005 16:26:29 -0000	1.64
+++ configure.ac	23 Dec 2005 00:15:19 -0000
@@ -62,7 +62,7 @@ AC_ARG_WITH(mpi_prefix,
   dnl If the user specified --with-mpi-prefix, they mean to use MPI for sure.
   [enable_mpi=yes])
 
-### Mecury Scientific Algorithm (SAL)
+### Mercury Scientific Algorithm (SAL)
 AC_ARG_ENABLE([sal],
   AS_HELP_STRING([--enable-sal],
                  [use SAL if found (default is to not search for it)]),,
@@ -119,6 +119,22 @@ AC_ARG_WITH(fftw2_prefix,
 		  Headers must be in PATH/include; libraries in PATH/lib.]),
   [with_fft=fftw2])
 
+AC_ARG_ENABLE([fft-float],
+  AS_HELP_STRING([--disable-fft-float],
+                 [Omit support for FFT applied to float elements]),,
+  [enable_fft_float=yes])
+
+AC_ARG_ENABLE([fft-double],
+  AS_HELP_STRING([--disable-fft-double],
+                 [Omit support for FFT applied to double elements]),,
+  [enable_fft_double=yes])
+
+AC_ARG_ENABLE([fft-long-double],
+  AS_HELP_STRING([--disable-fft-long-double],
+                 [Omit support for FFT applied to long double elements]),,
+  [enable_fft_long_double=yes])
+
+
 
 # LAPACK and related libraries (Intel MKL)
 AC_ARG_WITH([lapack],
@@ -364,26 +380,31 @@ enable_fftw2="no"
 enable_ipp_fft="no"
 build_fftw3="no"
 
-if test "$chose_fft" = "no" \
-     -o "$with_fft"  = "fftw3" \
-     -o "$with_fft" = "builtin"; then
-  enable_fftw3="yes"
-elif test "$with_fft" = "fftw2-float"; then
-  enable_fftw2="yes"
-  enable_fftw2_float="yes"
-elif test "$with_fft" = "fftw2-double"; then
-  enable_fftw2="yes"
-  enable_fftw2_double="yes"
-elif test "$with_fft" = "fftw2-generic"; then
-  enable_fftw2="yes"
-  enable_fftw2_generic="yes"
-  enable_fftw2_float="yes"
-elif test "$with_fft" = "ipp"; then
-  enable_ipp_fft="yes"
-elif test "$with_fft" != "none"; then
-  AC_MSG_ERROR([Argument to --with-fft= must be one of fftw3, fftw2-float,
-                fftw2-double, fftw2-generic, ipp, builtin, or none.])
-fi 
+if test "$enable_fft_float" = yes -o \
+        "$enable_fft_double" = yes -o \
+        "$enable_fft_long_double" = yes ; then
+
+  if test "$chose_fft" = "no" \
+       -o "$with_fft"  = "fftw3" \
+       -o "$with_fft" = "builtin"; then
+    enable_fftw3="yes"
+  elif test "$with_fft" = "fftw2-float"; then
+    enable_fftw2="yes"
+    enable_fftw2_float="yes"
+  elif test "$with_fft" = "fftw2-double"; then
+    enable_fftw2="yes"
+    enable_fftw2_double="yes"
+  elif test "$with_fft" = "fftw2-generic"; then
+    enable_fftw2="yes"
+    enable_fftw2_generic="yes"
+    enable_fftw2_float="yes"
+  elif test "$with_fft" = "ipp"; then
+    enable_ipp_fft="yes"
+  elif test "$with_fft" != "none"; then
+    AC_MSG_ERROR([Argument to --with-fft= must be one of fftw3, fftw2-float,
+                  fftw2-double, fftw2-generic, ipp, builtin, or none.])
+  fi 
+fi
 
 if test "$enable_fftw3" != "no" ; then
   build_fftw3=yes
@@ -394,12 +415,26 @@ if test "$enable_fftw3" != "no" ; then
   # We will certainly have a complete FFTW3 environment, even if we have to 
   # build it ourselves.
 
-  AC_DEFINE_UNQUOTED(VSIP_IMPL_FFT_USE_FLOAT, 1,
-    [Define to build code for float-precision FFT.])
-  AC_DEFINE_UNQUOTED(VSIP_IMPL_FFT_USE_DOUBLE, 1,
-    [Define to build code for double-precision FFT.])
-  AC_DEFINE_UNQUOTED(VSIP_IMPL_FFT_USE_LONG_DOUBLE, 1,
-    [Define to build code for long-double-precision FFT.])
+  libs=
+  syms=
+  if test "$enable_fft_float" = yes ; then
+    AC_DEFINE_UNQUOTED(VSIP_IMPL_FFT_USE_FLOAT, 1,
+      [Define to build code for float-precision FFT.])
+      libs="$libs -lfftw3f"
+      syms="$syms const char* fftwf_version;"
+  fi
+  if test "$enable_fft_double" = yes ; then
+    AC_DEFINE_UNQUOTED(VSIP_IMPL_FFT_USE_DOUBLE, 1,
+      [Define to build code for double-precision FFT.])
+      libs="$libs -lfftw3"
+      syms="$syms const char* fftw_version;"
+  fi
+  if test "$enable_fft_long_double" = yes; then
+    AC_DEFINE_UNQUOTED(VSIP_IMPL_FFT_USE_LONG_DOUBLE, 1,
+      [Define to build code for long-double-precision FFT.])
+      libs="$libs -lfftw3l"
+      syms="$syms const char* fftwl_version;"
+  fi
   AC_DEFINE_UNQUOTED(VSIP_IMPL_FFTW3, 1,
     [Define to build using FFTW3 headers.])
 
@@ -410,12 +445,10 @@ if test "$enable_fftw3" != "no" ; then
     fi
 
     AC_MSG_CHECKING([for external FFTW3 library])
-    LIBS="$LIBS -lfftw3f -lfftw3 -lfftw3l"
+    LIBS="$LIBS $libs"
     AC_LINK_IFELSE(
 	[AC_LANG_PROGRAM([[#include <fftw3.h>]],
-			 [[const char *fftwf_version;
-			   const char *fftw_version;
-			   const char *fftwl_version;]])],
+			 [[$syms]])],
 		[AC_MSG_RESULT([enabled.])
 		 keep_LIBS="$LIBS"
 		 keep_CPPFLAGS="$CPPFLAGS"
@@ -439,6 +472,7 @@ if test "$build_fftw3" != "no"; then
 
   # Build and use builtin fftw3.
   AC_MSG_CHECKING([for built-in FFTW3 library source])
+  libs=
   fftw3_configure="$srcdir/vendor/fftw/configure"
   if test -e "$fftw3_configure"; then
     AC_MSG_RESULT([found])
@@ -462,24 +496,31 @@ if test "$build_fftw3" != "no"; then
       (ppc*)             fftw3_f_simd="--enable-altivec" ;;
     esac
     AC_MSG_NOTICE([fftw3 config options: $fftw3_opts $fftw3_simd.])
-    AC_MSG_NOTICE([fftw3 float config options: '$fftw3_f_simd'.])
-    AC_MSG_NOTICE([fftw3 double config options: '$fftw3_d_simd'.])
-    AC_MSG_NOTICE([fftw3 long-double config options: '$fftw3_l_simd'.])
 
     echo "==============================================================="
 
-    mkdir -p vendor/fftw3f
-    AC_MSG_NOTICE([Configuring fftw3f (float).])
-    (cd vendor/fftw3f; $fftw3_configure $fftw3_f_simd $fftw3_opts --enable-float)
-
-    mkdir -p vendor/fftw3
-    AC_MSG_NOTICE([Configuring fftw3 (double).])
-    (cd vendor/fftw3; $fftw3_configure $fftw3_d_simd $fftw3_opts )
-
-    # fftw3l config doesn't get SIMD option
-    mkdir -p vendor/fftw3l
-    AC_MSG_NOTICE([Configuring fftw3l (long double).])
-    (cd vendor/fftw3l; $fftw3_configure $fftw3_l_simd $fftw3_opts --enable-long-double)
+    if test "$enable_fft_float" = yes; then
+      mkdir -p vendor/fftw3f
+      AC_MSG_NOTICE([Configuring fftw3f (float).])
+      AC_MSG_NOTICE([extra config options: '$fftw3_f_simd'.])
+      (cd vendor/fftw3f; $fftw3_configure $fftw3_f_simd $fftw3_opts --enable-float)
+      libs="$libs -lfftw3f"
+    fi
+    if test "$enable_fft_double" = yes; then
+      mkdir -p vendor/fftw3
+      AC_MSG_NOTICE([Configuring fftw3 (double).])
+      AC_MSG_NOTICE([extra config options: '$fftw3_d_simd'.])
+      (cd vendor/fftw3; $fftw3_configure $fftw3_d_simd $fftw3_opts )
+      libs="$libs -lfftw3"
+    fi
+    if test "$enable_fft_long_double" = yes; then
+      # fftw3l config doesn't get SIMD option
+      mkdir -p vendor/fftw3l
+      AC_MSG_NOTICE([Configuring fftw3l (long double).])
+      AC_MSG_NOTICE([extra config options: '$fftw3_l_simd'.])
+      (cd vendor/fftw3l; $fftw3_configure $fftw3_l_simd $fftw3_opts --enable-long-double)
+      libs="$libs -lfftw3l"
+    fi
 
     echo "==============================================================="
 
@@ -494,16 +535,27 @@ There are no regular files here, only sy
     ln -s "$fftw3_src_prefix"/api/fftw3.h vendor/fftw/include/fftw3.h
     mkdir -p vendor/fftw/lib
     # these don't refer to anything yet.
-    ln -s ../../fftw3f/.libs/libfftw3f.a vendor/fftw/lib/libfftw3f.a
-    ln -s ../../fftw3/.libs/libfftw3.a   vendor/fftw/lib/libfftw3.a
-    ln -s ../../fftw3l/.libs/libfftw3l.a vendor/fftw/lib/libfftw3l.a
+    if test "$enable_fft_float" = yes; then
+      ln -s ../../fftw3f/.libs/libfftw3f.a vendor/fftw/lib/libfftw3f.a
+      AC_SUBST(USE_BUILTIN_FFTW_FLOAT, 1)
+    fi
+    if test "$enable_fft_double" = yes; then
+      ln -s ../../fftw3/.libs/libfftw3.a   vendor/fftw/lib/libfftw3.a
+      AC_SUBST(USE_BUILTIN_FFTW_DOUBLE, 1)
+    fi
+    if test "$enable_fft_long_double" = yes; then
+      ln -s ../../fftw3l/.libs/libfftw3l.a vendor/fftw/lib/libfftw3l.a
+      AC_SUBST(USE_BUILTIN_FFTW_LONG_DOUBLE, 1)
+    fi
   else
     AC_MSG_RESULT([not found])
   fi
 
-  if test -f "vendor/fftw3f/Makefile" -a \
-          -f "vendor/fftw3/Makefile" -a \
-          -f "vendor/fftw3l/Makefile" ; then
+   
+  if test \( "$enable_fft_float" != yes -o -f "vendor/fftw3f/Makefile" \) -a \
+          \( "$enable_fft_double" != yes -o -f "vendor/fftw3/Makefile" \) -a \
+          \( "$enable_fft_long_double" != yes -o -f "vendor/fftw3l/Makefile" \)
+  then
     AC_MSG_RESULT([Built-in FFTW3 configures successful.])
   else
     AC_MSG_ERROR([Built-in FFTW3 configures FAILED, see config.log
@@ -517,7 +569,7 @@ There are no regular files here, only sy
     my_abs_top_srcdir="$curdir/$srcdir"
   fi
 
-  FFTW3_LIBS="-lfftw3f -lfftw3 -lfftw3l"
+  FFTW3_LIBS="$libs"
   AC_MSG_NOTICE([Will link with $FFTW3_LIBS.])
 
   AC_SUBST(USE_BUILTIN_FFTW, 1)
@@ -861,10 +913,14 @@ int main(int, char **)
       AC_SUBST(VSIP_IMPL_IPP_FFT, 1)
       AC_DEFINE_UNQUOTED(VSIP_IMPL_IPP_FFT, 1,
 	    [Define to use Intel's IPP library to perform FFTs.])
-      AC_DEFINE_UNQUOTED(VSIP_IMPL_FFT_USE_FLOAT, $vsip_impl_use_float,
-	    [Define to build code with support for FFT on float types.])
-      AC_DEFINE_UNQUOTED(VSIP_IMPL_FFT_USE_DOUBLE, $vsip_impl_use_double,
-	    [Define to build code with support for FFT on double types.])
+      if test "$enable_fft_float" = yes; then
+	AC_DEFINE_UNQUOTED(VSIP_IMPL_FFT_USE_FLOAT, $vsip_impl_use_float,
+	      [Define to build code with support for FFT on float types.])
+      fi
+      if test "$enable_fft_double" = yes; then
+	AC_DEFINE_UNQUOTED(VSIP_IMPL_FFT_USE_DOUBLE, $vsip_impl_use_double,
+	      [Define to build code with support for FFT on double types.])
+      fi
     fi
   fi
 fi
Index: vendor/GNUmakefile.inc.in
===================================================================
RCS file: /home/cvs/Repository/vpp/vendor/GNUmakefile.inc.in,v
retrieving revision 1.5
diff -u -p -r1.5 GNUmakefile.inc.in
--- vendor/GNUmakefile.inc.in	22 Dec 2005 06:53:52 -0000	1.5
+++ vendor/GNUmakefile.inc.in	23 Dec 2005 00:15:19 -0000
@@ -14,6 +14,9 @@
 
 USE_BUILTIN_ATLAS := @USE_BUILTIN_ATLAS@
 USE_BUILTIN_FFTW  := @USE_BUILTIN_FFTW@
+USE_BUILTIN_FFTW_FLOAT := @USE_BUILTIN_FFTW_FLOAT@
+USE_BUILTIN_FFTW_DOUBLE := @USE_BUILTIN_FFTW_DOUBLE@
+USE_BUILTIN_FFTW_LONG_DOUBLE := @USE_BUILTIN_FFTW_LONG_DOUBLE@
 
 vendor_REF_LAPACK = vendor/lapack/lapack.a
 vendor_PRE_LAPACK = vendor/atlas/lib/libprelapack.a
@@ -74,41 +77,51 @@ endif
 
 ifdef USE_BUILTIN_FFTW
 
-vendor_FFTW_LIBS := \
-	vendor/fftw3f/.libs/libfftw3f.a \
-	vendor/fftw3/.libs/libfftw3.a \
-	vendor/fftw3l/.libs/libfftw3l.a
-
-all:: $(vendor_FFTW_LIBS)
-
-libs:: $(vendor_FFTW_LIBS)
-
-vendor/fftw3f/.libs/libfftw3f.a:
+ifdef USE_BUILTIN_FFTW_FLOAT
+LIBFFTW_FLOAT := vendor/fftw3f/.libs/libfftw3f.a
+$(LIBFFTW_FLOAT):
 	@echo "Building FFTW float (see fftw-f.build.log)"
 	@$(MAKE) -C vendor/fftw3f > fftw-f.build.log 2>&1
-
-vendor/fftw3/.libs/libfftw3.a:
+else
+LIBFFTW_LONG_FLOAT :=
+endif
+ifdef USE_BUILTIN_FFTW_DOUBLE
+LIBFFTW_DOUBLE := vendor/fftw3/.libs/libfftw3.a
+$(LIBFFTW_DOUBLE):
 	@echo "Building FFTW double (see fftw-d.build.log)"
 	@$(MAKE) -C vendor/fftw3 > fftw-d.build.log 2>&1
+else
+LIBFFTW_DOUBLE :=
+endif
 
-vendor/fftw3l/.libs/libfftw3l.a:
+ifdef USE_BUILTIN_FFTW_LONG_DOUBLE
+LIBFFTW_LONG_DOUBLE := vendor/fftw3l/.libs/libfftw3l.a
+$(LIBFFTW_LONG_DOUBLE):
 	@echo "Building FFTW double (see fftw-l.build.log)"
 	@$(MAKE) -C vendor/fftw3l > fftw-l.build.log 2>&1
+else
+LIBFFTW_LONG_DOUBLE :=
+endif
+
+vendor_FFTW_LIBS := $(LIBFFTW_FLOAT) $(LIBFFTW_DOUBLE) $(LIBFFTW_LONG_DOUBLE)
+
+all:: $(vendor_FFTW_LIBS)
+
+libs:: $(vendor_FFTW_LIBS)
 
 clean::
 	@echo "Cleaning FFTW (see fftw.clean.log)"
-	@$(MAKE) -C vendor/fftw3f clean  > fftw.clean.log 2>&1
-	@$(MAKE) -C vendor/fftw3  clean >> fftw.clean.log 2>&1
-	@$(MAKE) -C vendor/fftw3l clean >> fftw.clean.log 2>&1
-
+	@for ldir in $(subst /.libs/,,$(dir $(vendor_FFTW_LIBS))); do \
+	  echo "$(MAKE) -C $$ldir clean "; \
+	  $(MAKE) -C $$ldir clean; done  > fftw.clean.log 2>&1
 
         # note: configure script constructs vendor/fftw/ symlinks used here.
 install::
 	@echo "Installing FFTW"
 	$(INSTALL) -d $(libdir)
-	$(INSTALL_DATA) vendor/fftw/lib/libfftw3f.a  $(libdir)
-	$(INSTALL_DATA) vendor/fftw/lib/libfftw3.a   $(libdir)
-	$(INSTALL_DATA) vendor/fftw/lib/libfftw3l.a  $(libdir)
+	@for lib in $(vendor_FFTW_LIBS); do \
+	  echo "$(INSTALL_DATA) $$lib  $(libdir)"; \
+	  $(INSTALL_DATA) $$lib  $(libdir); done
 	$(INSTALL) -d $(includedir)
 	$(INSTALL_DATA) $(srcdir)/vendor/fftw/api/fftw3.h $(includedir)
 endif



More information about the vsipl++ mailing list