# HG changeset patch # User Michael Goffioul # Date 1372126213 14400 # Node ID 3663f6300abf8edc07a9d6fe6a1df0c294989af3 # Parent 9b848bfe6f10f6d865225a2d4e9846ef275b2770 [MSVC] enable FFTW compilation - fix cc-msvc when all input files are pushed into @-files by libtool - make libtool think clgfortran is not the GNU Fortran compiler - don't bother compiling long-double version of FFTW, MSVC does not support long double type, it's typedef'ed to double diff -r 9b848bfe6f10 -r 3663f6300abf Makefile.in --- a/Makefile.in Mon Jun 24 13:28:33 2013 -0400 +++ b/Makefile.in Mon Jun 24 22:10:13 2013 -0400 @@ -166,9 +166,13 @@ MXE_WINDRES := windres MXE_PKG_CONFIG := pkg-config MXE_QMAKE := qmake + # Although the Fortran compiler is internally gfortran, we still + # want to make it look like non-GNU compiler, otherwise libtool is + # not playing nicely and trips over different variable values for + # different configuration tags. HOST_AND_BUILD_CONFIGURE_OPTIONS := \ CC='$(MXE_CC)' CXX='$(MXE_CXX)' F77='$(MXE_F77)' DLLTOOL='$(MXE_DLLTOOL)' CCAS='gcc' \ - CFLAGS='-O2' CXXFLAGS='-O2' + CFLAGS='-O2' CXXFLAGS='-O2' ac_cv_f77_compiler_gnu=no else MXE_AR := ar MXE_RANLIB := ranlib diff -r 9b848bfe6f10 -r 3663f6300abf src/build-msvctools/cc-msvc.cc --- a/src/build-msvctools/cc-msvc.cc Mon Jun 24 13:28:33 2013 -0400 +++ b/src/build-msvctools/cc-msvc.cc Mon Jun 24 22:10:13 2013 -0400 @@ -769,6 +769,16 @@ clopt += (" " + sourcefile); } + if (exeoutput && sourcefile.empty()) + { + // It's possible all object files and libraries have been + // pushed into @-files, so "prog" would still be set to "cl". + // If there's no source file specified on the command line, + // it's probably safe to assume we're calling the linker. + + prog = "link"; + } + if (!exeoutput && !sourcefile.empty() && objectfile.empty()) { // use .o suffix by default @@ -793,6 +803,17 @@ linkopt += " -out:" + exefile; } + if (exeoutput && + (ends_with(exefile, ".dll") || ends_with(exefile, ".DLL")) + && ! doshared) + { + // Maybe "-shared" was missing on the command line. + // Compensate for it! + + clopt += " -LD"; + linkopt += " -DLL"; + } + if (exeoutput && default_libs) { cllinkopt += " dirent.lib msvcmath.lib shell32.lib advapi32.lib user32.lib kernel32.lib"; diff -r 9b848bfe6f10 -r 3663f6300abf src/fftw.mk --- a/src/fftw.mk Mon Jun 24 13:28:33 2013 -0400 +++ b/src/fftw.mk Mon Jun 24 22:10:13 2013 -0400 @@ -9,6 +9,12 @@ $(PKG)_URL := http://www.fftw.org/$($(PKG)_FILE) $(PKG)_DEPS := +ifeq ($(MXE_SYSTEM),msvc) + $(PKG)_HAVE_LONG_DOUBLE := false +else + $(PKG)_HAVE_LONG_DOUBLE := true +endif + define $(PKG)_UPDATE $(WGET) -q -O- 'http://www.fftw.org/download.html' | \ $(SED) -n 's,.*fftw-\([0-9][^>]*\)\.tar.*,\1,p' | \ @@ -24,27 +30,32 @@ $(ENABLE_SHARED_OR_STATIC) \ --prefix='$(HOST_PREFIX)' \ --enable-threads \ - --enable-double + --enable-sse2 \ + --enable-double && $(CONFIGURE_POST_HOOK) $(MAKE) -C '$(1)' -j '$(JOBS)' bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= $(MAKE) -C '$(1)' -j 1 install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= + if $($(PKG)_HAVE_LONG_DOUBLE); then \ + cd '$(1)' && ./configure \ + F77=$(MXE_F77) \ + $(HOST_AND_BUILD_CONFIGURE_OPTIONS) \ + $(ENABLE_SHARED_OR_STATIC) \ + --prefix='$(HOST_PREFIX)' \ + --enable-threads \ + --enable-sse2 \ + --enable-long-double && $(CONFIGURE_POST_HOOK) ; \ + $(MAKE) -C '$(1)' -j '$(JOBS)' bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= ; \ + $(MAKE) -C '$(1)' -j 1 install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= ; \ + fi + cd '$(1)' && ./configure \ F77=$(MXE_F77) \ $(HOST_AND_BUILD_CONFIGURE_OPTIONS) \ $(ENABLE_SHARED_OR_STATIC) \ --prefix='$(HOST_PREFIX)' \ --enable-threads \ - --enable-long-double - $(MAKE) -C '$(1)' -j '$(JOBS)' bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= - $(MAKE) -C '$(1)' -j 1 install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= - - cd '$(1)' && ./configure \ - F77=$(MXE_F77) \ - $(HOST_AND_BUILD_CONFIGURE_OPTIONS) \ - $(ENABLE_SHARED_OR_STATIC) \ - --prefix='$(HOST_PREFIX)' \ - --enable-threads \ - --enable-float + --enable-sse2 \ + --enable-float && $(CONFIGURE_POST_HOOK) $(MAKE) -C '$(1)' -j '$(JOBS)' bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= $(MAKE) -C '$(1)' -j 1 install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= endef diff -r 9b848bfe6f10 -r 3663f6300abf src/msvc-fftw-1.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/msvc-fftw-1.patch Mon Jun 24 22:10:13 2013 -0400 @@ -0,0 +1,110 @@ +diff -ur fftw-3.3.2-orig/api/fftw3.h fftw-3.3.2/api/fftw3.h +--- fftw-3.3.2-orig/api/fftw3.h 2012-04-28 10:58:06 -0400 ++++ fftw-3.3.2/api/fftw3.h 2013-06-24 17:32:40 -0400 +@@ -82,8 +82,14 @@ + # else /* user is calling FFTW; import symbol */ + # define FFTW_EXTERN extern __declspec(dllimport) + # endif ++# if defined(COMPILING_FFTW_THREADS) ++# define FFTW_THREADS_EXTERN extern __declspec(dllexport) ++# else ++# define FFTW_THREADS_EXTERN extern __declspec(dllimport) ++# endif + #else + # define FFTW_EXTERN extern ++# define FFTW_THREADS_EXTERN extern + #endif + + enum fftw_r2r_kind_do_not_use_me { +@@ -315,9 +321,9 @@ + \ + FFTW_EXTERN void X(set_timelimit)(double t); \ + \ +-FFTW_EXTERN void X(plan_with_nthreads)(int nthreads); \ +-FFTW_EXTERN int X(init_threads)(void); \ +-FFTW_EXTERN void X(cleanup_threads)(void); \ ++FFTW_THREADS_EXTERN void X(plan_with_nthreads)(int nthreads); \ ++FFTW_THREADS_EXTERN int X(init_threads)(void); \ ++FFTW_THREADS_EXTERN void X(cleanup_threads)(void); \ + \ + FFTW_EXTERN int X(export_wisdom_to_filename)(const char *filename); \ + FFTW_EXTERN void X(export_wisdom_to_file)(FILE *output_file); \ +diff -ur fftw-3.3.2-orig/dft/ct.h fftw-3.3.2/dft/ct.h +--- fftw-3.3.2-orig/dft/ct.h 2012-04-28 10:58:06 -0400 ++++ fftw-3.3.2/dft/ct.h 2013-06-24 15:28:17 -0400 +@@ -56,7 +56,7 @@ + ct_solver *X(mksolver_ct)(size_t size, INT r, int dec, + ct_mkinferior mkcldw, + ct_force_vrecursion force_vrecursionp); +-extern ct_solver *(*X(mksolver_ct_hook))(size_t, INT, int, ++IFFTW_EXTERN ct_solver *(*X(mksolver_ct_hook))(size_t, INT, int, + ct_mkinferior, ct_force_vrecursion); + + void X(regsolver_ct_directw)(planner *plnr, +diff -ur fftw-3.3.2-orig/rdft/hc2hc.h fftw-3.3.2/rdft/hc2hc.h +--- fftw-3.3.2-orig/rdft/hc2hc.h 2012-04-28 10:58:06 -0400 ++++ fftw-3.3.2/rdft/hc2hc.h 2013-06-24 15:28:36 -0400 +@@ -46,7 +46,7 @@ + }; + + hc2hc_solver *X(mksolver_hc2hc)(size_t size, INT r, hc2hc_mkinferior mkcldw); +-extern hc2hc_solver *(*X(mksolver_hc2hc_hook))(size_t, INT, hc2hc_mkinferior); ++IFFTW_EXTERN hc2hc_solver *(*X(mksolver_hc2hc_hook))(size_t, INT, hc2hc_mkinferior); + + void X(regsolver_hc2hc_direct)(planner *plnr, khc2hc codelet, + const hc2hc_desc *desc); +diff -ur fftw-3.3.2-orig/tests/Makefile.in fftw-3.3.2/tests/Makefile.in +--- fftw-3.3.2-orig/tests/Makefile.in 2012-04-28 10:58:44 -0400 ++++ fftw-3.3.2/tests/Makefile.in 2013-06-24 19:57:50 -0400 +@@ -65,7 +65,7 @@ + $(top_builddir)/libbench2/libbench2.a $(am__DEPENDENCIES_1) + bench_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(bench_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ +- $(LDFLAGS) -o $@ ++ $(LDFLAGS) -Wl,-subsystem:console -o $@ + DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) + depcomp = $(SHELL) $(top_srcdir)/depcomp + am__depfiles_maybe = depfiles +@@ -229,7 +229,7 @@ + top_srcdir = @top_srcdir@ + AM_CPPFLAGS = -I$(top_srcdir)/kernel -I$(top_srcdir)/libbench2 \ + -I$(top_srcdir)/dft -I$(top_srcdir)/rdft -I$(top_srcdir)/reodft \ +--I$(top_srcdir)/threads -I$(top_srcdir)/api ++-I$(top_srcdir)/threads -I$(top_srcdir)/api -DFFTW_DLL + + EXTRA_DIST = check.pl README + @OPENMP_TRUE@@THREADS_FALSE@bench_CFLAGS = $(OPENMP_CFLAGS) +diff -ur fftw-3.3.2-orig/threads/Makefile.in fftw-3.3.2/threads/Makefile.in +--- fftw-3.3.2-orig/threads/Makefile.in 2012-04-28 10:58:44 -0400 ++++ fftw-3.3.2/threads/Makefile.in 2013-06-24 17:28:37 -0400 +@@ -291,7 +291,8 @@ + top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ + AM_CPPFLAGS = -I$(top_srcdir)/kernel -I$(top_srcdir)/dft \ +--I$(top_srcdir)/rdft -I$(top_srcdir)/api ++-I$(top_srcdir)/rdft -I$(top_srcdir)/api \ ++-DCALLING_FFTW -DCOMPILING_FFTW_THREADS + + AM_CFLAGS = $(STACK_ALIGN_CFLAGS) + @OPENMP_FALSE@FFTWOMPLIB = +@@ -307,7 +308,7 @@ + vrank-geq1-rdft2.c f77api.c f77funcs.h + + libfftw3@PREC_SUFFIX@_threads_la_CFLAGS = $(AM_CFLAGS) $(PTHREAD_CFLAGS) +-libfftw3@PREC_SUFFIX@_threads_la_LDFLAGS = -version-info @SHARED_VERSION_INFO@ ++libfftw3@PREC_SUFFIX@_threads_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ + @COMBINED_THREADS_FALSE@libfftw3@PREC_SUFFIX@_threads_la_LIBADD = ../libfftw3@PREC_SUFFIX@.la + libfftw3@PREC_SUFFIX@_omp_la_SOURCES = api.c conf.c openmp.c \ + threads.h dft-vrank-geq1.c ct.c rdft-vrank-geq1.c hc2hc.c \ +diff -ur fftw-3.3.2-orig/tools/Makefile.in fftw-3.3.2/tools/Makefile.in +--- fftw-3.3.2-orig/tools/Makefile.in 2012-04-28 10:58:44 -0400 ++++ fftw-3.3.2/tools/Makefile.in 2013-06-24 20:01:18 -0400 +@@ -74,7 +74,7 @@ + fftw@PREC_SUFFIX@_wisdom_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(fftw@PREC_SUFFIX@_wisdom_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ +- $(LDFLAGS) -o $@ ++ $(LDFLAGS) -Wl,-subsystem:console -o $@ + am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; + am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \