@@ -12,55 +12,11 @@ config BR2_PACKAGE_FFTW
if BR2_PACKAGE_FFTW
-config BR2_PACKAGE_FFTW_USE_SSE
- bool
-
-config BR2_PACKAGE_FFTW_USE_SSE2
- bool
-
-config BR2_PACKAGE_FFTW_USE_NEON
- bool
-
-choice
- prompt "fftw precision"
- default BR2_PACKAGE_FFTW_PRECISION_DOUBLE
- help
- Selects fftw precision
-
-config BR2_PACKAGE_FFTW_PRECISION_SINGLE
- bool "single"
- select BR2_PACKAGE_FFTW_USE_SSE if BR2_X86_CPU_HAS_SSE
- select BR2_PACKAGE_FFTW_USE_SSE2 if BR2_X86_CPU_HAS_SSE2
- select BR2_PACKAGE_FFTW_USE_NEON if BR2_ARM_CPU_HAS_NEON && !BR2_ARM_SOFT_FLOAT
- help
- Compile fftw in single precision, i.e. use 'float' for
- floating point type.
-
-config BR2_PACKAGE_FFTW_PRECISION_DOUBLE
- bool "double"
- select BR2_PACKAGE_FFTW_USE_SSE2 if BR2_X86_CPU_HAS_SSE2
- help
- Compile fftw in double precision (the default), i.e. use
- 'double' for floating point type.
-
-config BR2_PACKAGE_FFTW_PRECISION_LONG_DOUBLE
- bool "long double"
- # long-double precision require long-double trigonometric routines
- depends on !(BR2_TOOLCHAIN_BUILDROOT_UCLIBC && \
- (BR2_arm || BR2_mips || BR2_mipsel))
- help
- Compile fftw in long double precision, i.e. use 'long double'
- for floating point type.
-
-config BR2_PACKAGE_FFTW_PRECISION_QUAD
- bool "quad"
- # quad-precision needs to have a gcc with libquadmath
- depends on (BR2_i386 || BR2_x86_64) && BR2_USE_WCHAR
- help
- Compile fftw in quadruple precision, i.e. use '__float128' for
- floating point type.
-
-endchoice
+menu "FFTW precision and options"
+source "package/fftw/fftw-double/Config.in"
+source "package/fftw/fftw-long-double/Config.in"
+source "package/fftw/fftw-single/Config.in"
+source "package/fftw/fftw-quad/Config.in"
config BR2_PACKAGE_FFTW_FAST
bool "optimise for speed over accuracy"
@@ -75,4 +31,6 @@ config BR2_PACKAGE_FFTW_FAST
turn is basically using gcc's -ffast-math. See the gcc manual
for what this means.
+endmenu
+
endif
new file mode 100644
@@ -0,0 +1,5 @@
+config BR2_PACKAGE_FFTW_PRECISION_DOUBLE
+ bool "fftw-double"
+ help
+ Compile fftw in double precision (the default), i.e. use
+ 'double' for floating point type.
new file mode 120000
@@ -0,0 +1 @@
+../fftw.hash
\ No newline at end of file
new file mode 100644
@@ -0,0 +1,23 @@
+################################################################################
+#
+# fft-double
+#
+################################################################################
+
+FFTW_PRECISION_DOUBLE_VERSION = $(FFTW_VERSION)
+FFTW_PRECISION_DOUBLE_SOURCE = fftw-$(FFTW_VERSION).tar.gz
+FFTW_PRECISION_DOUBLE_SITE = $(FFTW_SITE)
+FFTW_PRECISION_DOUBLE_INSTALL_STAGING = $(FFTW_INSTALL_STAGING)
+FFTW_PRECISION_DOUBLE_LICENSE = $(FFTW_LICENSE)
+FFTW_PRECISION_DOUBLE_LICENSE_FILES = $(FFTW_LICENSE_FILES)
+
+FFTW_PRECISION_DOUBLE_CONF_ENV = $(FFTW_CONF_ENV)
+
+FFTW_PRECISION_DOUBLE_CONF_OPTS= $(FFTW_CONF_OPTS)
+
+FFTW_PRECISION_DOUBLE_CFLAGS = $(FFTW_CFLAGS)
+
+# x86 optimisations
+FFTW_PRECISION_DOUBLE_CONF_OPTS += $(if $(BR2_X86_CPU_HAS_SSE2),--enable,--disable)-sse2
+
+$(eval $(autotools-package))
new file mode 100644
@@ -0,0 +1,8 @@
+config BR2_PACKAGE_FFTW_PRECISION_LONG_DOUBLE
+ bool "fftw-long-double"
+ # long-double precision require long-double trigonometric routines
+ depends on !(BR2_TOOLCHAIN_USES_UCLIBC && \
+ (BR2_arm || BR2_mips || BR2_mipsel))
+ help
+ Compile fftw in long double precision, i.e. use 'long double'
+ for floating point type.
new file mode 120000
@@ -0,0 +1 @@
+../fftw.hash
\ No newline at end of file
new file mode 100644
@@ -0,0 +1,21 @@
+################################################################################
+#
+# fftw-long-double
+#
+################################################################################
+
+FFTW_PRECISION_LONG_DOUBLE_VERSION = $(FFTW_VERSION)
+FFTW_PRECISION_LONG_DOUBLE_SOURCE = fftw-$(FFTW_VERSION).tar.gz
+FFTW_PRECISION_LONG_DOUBLE_SITE = $(FFTW_SITE)
+FFTW_PRECISION_LONG_DOUBLE_INSTALL_STAGING = $(FFTW_INSTALL_STAGING)
+FFTW_PRECISION_LONG_DOUBLE_LICENSE = $(FFTW_LICENSE)
+FFTW_PRECISION_LONG_DOUBLE_LICENSE_FILES = $(FFTW_LICENSE_FILES)
+
+FFTW_PRECISION_LONG_DOUBLE_CONF_ENV = $(FFTW_CONF_ENV)
+
+FFTW_PRECISION_LONG_DOUBLE_CONF_OPTS = $(FFTW_CONF_OPTS)
+FFTW_PRECISION_LONG_DOUBLE_CONF_OPTS += --enable-long-double
+
+FFTW_PRECISION_LONG_DOUBLE_CFLAGS = $(FFTW_CFLAGS)
+
+$(eval $(autotools-package))
new file mode 100644
@@ -0,0 +1,7 @@
+config BR2_PACKAGE_FFTW_PRECISION_QUAD
+ bool "fftw-quad"
+ # quad-precision needs to have a gcc with libquadmath
+ depends on (BR2_i386 || BR2_x86_64) && BR2_USE_WCHAR
+ help
+ Compile fftw in quadruple precision, i.e. use '__float128' for
+ floating point type.
new file mode 120000
@@ -0,0 +1 @@
+../fftw.hash
\ No newline at end of file
new file mode 100644
@@ -0,0 +1,21 @@
+################################################################################
+#
+# fftw-quad
+#
+################################################################################
+
+FFTW_PRECISION_QUAD_VERSION = $(FFTW_VERSION)
+FFTW_PRECISION_QUAD_SOURCE = fftw-$(FFTW_VERSION).tar.gz
+FFTW_PRECISION_QUAD_SITE = $(FFTW_SITE)
+FFTW_PRECISION_QUAD_INSTALL_STAGING = $(FFTW_INSTALL_STAGING)
+FFTW_PRECISION_QUAD_LICENSE = $(FFTW_LICENSE)
+FFTW_PRECISION_QUAD_LICENSE_FILES = $(FFTW_LICENSE_FILES)
+
+FFTW_PRECISION_QUAD_CONF_ENV = $(FFTW_CONF_ENV)
+
+FFTW_PRECISION_QUAD_CONF_OPTS = $(FFTW_CONF_OPTS)
+FFTW_PRECISION_QUAD_CONF_OPTS += --enable-quad-precision
+
+FFTW_PRECISION_QUAD_CFLAGS = $(FFTW_CFLAGS)
+
+$(eval $(autotools-package))
new file mode 100644
@@ -0,0 +1,5 @@
+config BR2_PACKAGE_FFTW_PRECISION_SINGLE
+ bool "fftw-single"
+ help
+ Compile fftw in single precision, i.e. use 'float'
+ for floating point type.
new file mode 120000
@@ -0,0 +1 @@
+../fftw.hash
\ No newline at end of file
new file mode 100644
@@ -0,0 +1,33 @@
+################################################################################
+#
+# fftw-single
+#
+################################################################################
+
+FFTW_PRECISION_SINGLE_VERSION = $(FFTW_VERSION)
+FFTW_PRECISION_SINGLE_SOURCE = fftw-$(FFTW_VERSION).tar.gz
+FFTW_PRECISION_SINGLE_SITE = $(FFTW_SITE)
+FFTW_PRECISION_SINGLE_INSTALL_STAGING = $(FFTW_INSTALL_STAGING)
+FFTW_PRECISION_SINGLE_LICENSE = $(FFTW_LICENSE)
+FFTW_PRECISION_SINGLE_LICENSE_FILES = $(FFTW_LICENSE_FILES)
+
+FFTW_PRECISION_SINGLE_CONF_ENV = $(FFTW_CONF_ENV)
+
+FFTW_PRECISION_SINGLE_CONF_OPTS = $(FFTW_CONF_OPTS)
+FFTW_PRECISION_SINGLE_CONF_OPTS += --enable-single
+
+FFTW_PRECISION_SINGLE_CFLAGS = $(FFTW_CFLAGS)
+
+# x86 optimisations
+FFTW_PRECISION_SINGLE_CONF_OPTS += $(if $(BR2_X86_CPU_HAS_SSE),--enable,--disable)-sse
+FFTW_PRECISION_SINGLE_CONF_OPTS += $(if $(BR2_X86_CPU_HAS_SSE2),--enable,--disable)-sse2
+
+# ARM optimisations
+ifeq ($(BR2_ARM_CPU_HAS_NEON):$(BR2_ARM_SOFT_FLOAT),y:)
+FFTW_PRECISION_SINGLE_CONF_OPTS += --enable-neon
+FFTW_PRECISION_SINGLE_CFLAGS += -mfpu=neon
+else
+FFTW_PRECISION_SINGLE_CONF_OPTS += --disable-neon
+endif
+
+$(eval $(autotools-package))
@@ -18,23 +18,11 @@ else
FFTW_CONF_OPTS += --disable-fortran
endif
-FFTW_CONF_OPTS += $(if $(BR2_PACKAGE_FFTW_PRECISION_SINGLE),--enable,--disable)-single
-FFTW_CONF_OPTS += $(if $(BR2_PACKAGE_FFTW_PRECISION_LONG_DOUBLE),--enable,--disable)-long-double
-FFTW_CONF_OPTS += $(if $(BR2_PACKAGE_FFTW_PRECISION_QUAD),--enable,--disable)-quad-precision
-
FFTW_CFLAGS = $(TARGET_CFLAGS)
ifeq ($(BR2_PACKAGE_FFTW_FAST),y)
FFTW_CFLAGS += -O3 -ffast-math
endif
-# x86 optimisations
-FFTW_CONF_OPTS += $(if $(BR2_PACKAGE_FFTW_USE_SSE),--enable,--disable)-sse
-FFTW_CONF_OPTS += $(if $(BR2_PACKAGE_FFTW_USE_SSE2),--enable,--disable)-sse2
-
-# ARM optimisations
-FFTW_CONF_OPTS += $(if $(BR2_PACKAGE_FFTW_USE_NEON),--enable,--disable)-neon
-FFTW_CFLAGS += $(if $(BR2_PACKAGE_FFTW_USE_NEON),-mfpu=neon)
-
# Generic optimisations
ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
FFTW_CONF_OPTS += --enable-threads
@@ -46,4 +34,4 @@ FFTW_CONF_OPTS += $(if $(BR2_GCC_ENABLE_OPENMP),--enable,--disable)-openmp
FFTW_CONF_OPTS += CFLAGS="$(FFTW_CFLAGS)"
-$(eval $(autotools-package))
+include $(sort $(wildcard package/fftw/*/*.mk))