[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