1# -I $(top_srcdir)/api is necessary because fftw3-mpi.h includes
2# "fftw3.h", and we cannot change the latter to "api/fftw3.h" because
3# fftw3-mpi.h is installed in /usr/include.
4AM_CPPFLAGS = -I $(top_srcdir) -I $(top_srcdir)/api
5
6if MPI
7lib_LTLIBRARIES = libfftw3@PREC_SUFFIX@_mpi.la
8include_HEADERS = fftw3-mpi.h
9nodist_include_HEADERS = fftw3-mpi.f03 fftw3l-mpi.f03
10noinst_PROGRAMS = mpi-bench
11endif
12
13CC=@MPICC@
14
15EXTRA_DIST = testsched.c f03api.sh f03-wrap.sh genf03-wrap.pl fftw3-mpi.f03.in fftw3l-mpi.f03.in
16BUILT_SOURCES = fftw3-mpi.f03.in fftw3-mpi.f03 fftw3l-mpi.f03.in fftw3l-mpi.f03 f03-wrap.c
17CLEANFILES = fftw3-mpi.f03 fftw3l-mpi.f03
18
19TRANSPOSE_SRC = transpose-alltoall.c transpose-pairwise.c transpose-recurse.c transpose-problem.c transpose-solve.c mpi-transpose.h
20DFT_SRC = dft-serial.c dft-rank-geq2.c dft-rank-geq2-transposed.c dft-rank1.c dft-rank1-bigvec.c dft-problem.c dft-solve.c mpi-dft.h
21RDFT_SRC = rdft-serial.c rdft-rank-geq2.c rdft-rank-geq2-transposed.c rdft-rank1-bigvec.c rdft-problem.c rdft-solve.c mpi-rdft.h
22RDFT2_SRC = rdft2-serial.c rdft2-rank-geq2.c rdft2-rank-geq2-transposed.c rdft2-problem.c rdft2-solve.c mpi-rdft2.h
23SRC = any-true.c api.c block.c choose-radix.c conf.c dtensor.c fftw3-mpi.h ifftw-mpi.h rearrange.c wisdom-api.c f03-wrap.c
24
25libfftw3@PREC_SUFFIX@_mpi_la_SOURCES = $(SRC) $(TRANSPOSE_SRC) $(DFT_SRC) $(RDFT_SRC) $(RDFT2_SRC)
26
27libfftw3@PREC_SUFFIX@_mpi_la_LDFLAGS = -version-info @SHARED_VERSION_INFO@
28libfftw3@PREC_SUFFIX@_mpi_la_LIBADD = ../libfftw3@PREC_SUFFIX@.la @MPILIBS@
29
30if THREADS
31mpi_bench_CFLAGS = $(PTHREAD_CFLAGS)
32if !COMBINED_THREADS
33LIBFFTWTHREADS = $(top_builddir)/threads/libfftw3@PREC_SUFFIX@_threads.la
34endif
35else
36if OPENMP
37mpi_bench_CFLAGS = $(OPENMP_CFLAGS)
38LIBFFTWTHREADS = $(top_builddir)/threads/libfftw3@PREC_SUFFIX@_omp.la
39endif
40endif
41
42mpi_bench_SOURCES = mpi-bench.c $(top_srcdir)/tests/fftw-bench.c $(top_srcdir)/tests/hook.c
43mpi_bench_LDADD = libfftw3@PREC_SUFFIX@_mpi.la $(LIBFFTWTHREADS) $(top_builddir)/libfftw3@PREC_SUFFIX@.la $(top_builddir)/libbench2/libbench2.a $(MPILIBS) $(THREADLIBS)
44
45CHECK = $(top_srcdir)/tests/check.pl
46NUMCHECK=10
47CHECKSIZE=10000
48CHECKOPTS = --verbose --random --maxsize=$(CHECKSIZE) -c=$(NUMCHECK) $(CHECK_PL_OPTS)
49
50if MPI
51
52check-local: mpi-bench$(EXEEXT)
53	perl -w $(CHECK) $(CHECKOPTS) --mpi "$(MPIRUN) -np 1 `pwd`/mpi-bench"
54	@echo "--------------------------------------------------------------"
55	@echo "     MPI FFTW transforms passed "$(NUMCHECK)" tests, 1 CPU"
56	@echo "--------------------------------------------------------------"
57	perl -w $(CHECK) $(CHECKOPTS) --mpi "$(MPIRUN) -np 2 `pwd`/mpi-bench"
58	@echo "--------------------------------------------------------------"
59	@echo "      MPI FFTW transforms passed "$(NUMCHECK)" tests, 2 CPUs"
60	@echo "--------------------------------------------------------------"
61	perl -w $(CHECK) $(CHECKOPTS) --mpi "$(MPIRUN) -np 3 `pwd`/mpi-bench"
62	@echo "--------------------------------------------------------------"
63	@echo "      MPI FFTW transforms passed "$(NUMCHECK)" tests, 3 CPUs"
64	@echo "--------------------------------------------------------------"
65	perl -w $(CHECK) $(CHECKOPTS) --mpi "$(MPIRUN) -np 4 `pwd`/mpi-bench"
66	@echo "--------------------------------------------------------------"
67	@echo "      MPI FFTW transforms passed "$(NUMCHECK)" tests, 4 CPUs"
68	@echo "--------------------------------------------------------------"
69if SMP
70	perl -w $(CHECK) $(CHECKOPTS) --mpi --nthreads=2 "$(MPIRUN) -np 3 `pwd`/mpi-bench"
71	@echo "--------------------------------------------------------------"
72	@echo "      MPI FFTW threaded transforms passed "$(NUMCHECK)" tests!"
73	@echo "--------------------------------------------------------------"
74endif
75
76bigcheck: mpi-bench$(EXEEXT)
77	$(MAKE) $(AM_MAKEFLAGS) NUMCHECK=100 CHECKSIZE=60000 check-local
78
79smallcheck: mpi-bench$(EXEEXT)
80	$(MAKE) $(AM_MAKEFLAGS) NUMCHECK=2 check-local
81
82endif
83
84fftw3-mpi.f03: fftw3-mpi.f03.in Makefile
85	sed 's/C_MPI_FINT/@C_MPI_FINT@/' $(srcdir)/fftw3-mpi.f03.in > $@
86
87fftw3l-mpi.f03: fftw3l-mpi.f03.in Makefile
88	sed 's/C_MPI_FINT/@C_MPI_FINT@/' $(srcdir)/fftw3l-mpi.f03.in > $@
89
90if MAINTAINER_MODE
91
92fftw3-mpi.f03.in: fftw3-mpi.h f03api.sh $(top_srcdir)/api/genf03.pl
93	sh $(srcdir)/f03api.sh d f > $@
94
95fftw3l-mpi.f03.in: fftw3-mpi.h f03api.sh $(top_srcdir)/api/genf03.pl
96	sh $(srcdir)/f03api.sh l | grep -v parameter | sed 's/fftw3.f03/fftw3l.f03/' > $@
97
98f03-wrap.c: fftw3-mpi.h f03-wrap.sh genf03-wrap.pl
99	sh $(srcdir)/f03-wrap.sh > $@
100
101endif
102