1## Process this file with automake to produce Makefile.in
2
3ACLOCAL_AMFLAGS = -I m4
4AUTOMAKE_OPTIONS = subdir-objects
5
6# to disable valgrind during make distcheck
7AM_DISTCHECK_CONFIGURE_FLAGS ?= \
8  --disable-valgrind-tests
9
10@COV_FRAG@
11
12# to not install libecm.la, we could write noinst_LTLIBRARIES instead of
13# lib_LTLIBRARIES below, however then libecm.a is not installed either
14# (see http://www.gnu.org/software/automake/manual/html_node/Libtool-Convenience-Libraries.html)
15lib_LTLIBRARIES = libecm.la
16
17EXTRA_PROGRAMS = rho
18
19# If we want assembly mulredc code, recurse into the right subdirectory
20# and set up variables to include the mulredc library from that subdir
21if ENABLE_ASM_REDC
22  SUBDIRS = $(ASMPATH)
23  MULREDCINCPATH = -I$(srcdir)/$(ASMPATH)
24  MULREDCLIBRARY = $(builddir)/$(ASMPATH)/libmulredc.la
25
26  # Add a tuning and testing program for the mulredc code
27  EXTRA_PROGRAMS += bench_mulredc test_mulredc
28  CLEANFILES = bench_mulredc test_mulredc
29  bench_mulredc_CPPFLAGS = $(MULREDCINCPATH)
30  bench_mulredc_LDADD = $(MULREDCLIBRARY) $(GMPLIB)
31  test_mulredc_CPPFLAGS = $(MULREDCINCPATH)
32  test_mulredc_LDADD = $(MULREDCLIBRARY) $(GMPLIB)
33else
34  # Add a tuning program for the mulredc code
35  EXTRA_PROGRAMS += bench_mulredc
36  CLEANFILES = bench_mulredc
37  bench_mulredc_LDADD = $(GMPLIB)
38endif
39
40libecm_la_SOURCES = ecm.c ecm2.c pm1.c pp1.c getprime_r.c listz.c lucas.c \
41		   stage2.c mpmod.c mul_lo.c polyeval.c median.c \
42		   schoen_strass.c ks-multiply.c rho.c bestd.c auxlib.c \
43		   random.c factor.c sp.c spv.c spm.c mpzspm.c mpzspv.c \
44		   ntt_gfp.c ecm_ntt.c pm1fs2.c sets_long.c \
45		   auxarith.c batch.c parametrizations.c cudawrapper.c \
46		   aprtcle/mpz_aprcl.c
47# Link the asm redc code (if we use it) into libecm.la
48libecm_la_CPPFLAGS = $(MULREDCINCPATH)
49libecm_la_CFLAGS = $(OPENMP_CFLAGS) -g
50# www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
51# If any interfaces have been added, removed, or changed since the last
52# update, increment current, and set revision to 0.
53libecm_la_LDFLAGS = $(LIBECM_LDFLAGS) -version-info 1:0:0 -g
54libecm_la_LIBADD = $(MULREDCLIBRARY)
55if WANT_GPU
56  libecm_la_SOURCES += cudakernel.cu
57  libecm_la_LIBADD += $(CUDALIB)
58  libecm_la_LDFLAGS += $(CUDALDFLAGS)
59  ecm_LDFLAGS = $(CUDARPATH)
60endif
61libecm_la_LIBADD += $(GMPLIB)
62
63bin_PROGRAMS = ecm
64noinst_PROGRAMS = tune ecmfactor bench_mulredc aprcl
65# Most binaries want to link libecm.la, and the ones which don't will
66# have their own _LDADD which overrides the default LDADD here
67LDADD = libecm.la $(GMPLIB)
68
69ecm_CPPFLAGS = -DOUTSIDE_LIBECM
70ecm_CFLAGS = $(OPENMP_CFLAGS) -g
71ecm_SOURCES = auxi.c b1_ainc.c candi.c eval.c main.c resume.c \
72              getprime_r.c champions.h aprtcle/mpz_aprcl.c memusage.c
73
74tune_SOURCES = mpmod.c tune.c mul_lo.c listz.c auxlib.c ks-multiply.c \
75               schoen_strass.c polyeval.c median.c ecm_ntt.c \
76	       ntt_gfp.c mpzspv.c mpzspm.c sp.c spv.c spm.c auxarith.c
77tune_CPPFLAGS = -DTUNE $(MULREDCINCPATH)
78tune_LDADD = $(MULREDCLIBRARY) $(GMPLIB)
79
80ecmfactor_CFLAGS = $(OPENMP_CFLAGS) -lpthread
81
82# multiecm_CPPFLAGS = -DOUTSIDE_LIBECM
83# multiecm_SOURCES = auxi.c b1_ainc.c candi.c eval.c random.c multiecm.c \
84#               resume.c getprime_r.c addlaws.c torsions.c aprtcle/mpz_aprcl.c
85# multiecm_CFLAGS = $(OPENMP_CFLAGS)
86
87aprcl_CFLAGS = -Wall
88aprcl_SOURCES = aprtcle/mpz_aprcl.c aprtcle/aprcl.c
89aprcl_LDADD = $(GMPLIB)
90
91rho_SOURCES = rho.c
92rho_CPPFLAGS = -DTESTDRIVE
93rho_LDADD = -lprimegen $(GMPLIB) $(GSL_LD_FLAGS)
94
95if WITH_GWNUM
96  gwdata.ld :
97	echo "SECTIONS { .data : { . = ALIGN(0x20); *(_GWDATA) } }" >gwdata.ld
98
99  libecm_la_SOURCES += Fgw.c
100  # Use ecm_DEPENDENCIES += gwdata.ld instead? Is that possible?
101  ecm_DEPENDENCIES = gwdata.ld
102  ecm_LDFLAGS = $(AM_LDFLAGS) -Wl,gwdata.ld
103  Fgwtest : Fgw.c gwdata.ld
104	$(CC) $(CFLAGS) $(CPPFLAGS) -g -DTESTDRIVE -Wl,gwdata.ld -o Fgwtest Fgw.c libecm.a $(LIBS)
105endif
106
107include_HEADERS = ecm.h
108noinst_HEADERS = basicdefs.h ecm-impl.h ecm-gmp.h ecm-ecm.h sp.h longlong.h \
109                 ecm-params.h mpmod.h ecm-gpu.h cudakernel.h addlaws.h \
110                 getprime_r.h ecm_int.h \
111                 aprtcle/mpz_aprcl.h aprtcle/jacobi_sum.h
112
113EXTRA_DIST = test.pm1 test.pp1 test.ecm README.lib INSTALL-ecm ecm.xml  \
114             pentium4/params.h x86_64/core2/params.h x86_64/k8/params.h \
115             athlon/params.h x86/params.h ia64/params.h arm/params.h    \
116             powerpc64/params.h powerpc32/params.h sparc64/params.h     \
117             hppa/params.h mips/params.h x86_64/corei7/params.h         \
118             generic/params.h testlong.pp1 testlong.pm1 testlong.ecm \
119             getprime_r.h cudakernel_default.cu test.gpuecm README.gpu c155 \
120             test_dummy2.save test_dummy.save test_prime95.save M877.save \
121	     M997.save test_Z2102.n
122
123DIST_SUBDIRS = athlon pentium4 x86_64 powerpc64 aprtcle build.vc12
124
125DISTCLEANFILES = config.m4
126
127if WANT_GPU
128.cu.lo: cudakernel.h
129		$(LIBTOOL) --tag=CC --mode=compile $(NVCC) --compile $(NVCCFLAGS) $(CPPFLAGS) -o $@ $^ -static
130endif
131
132ecm-params:	bench_mulredc$(EXEEXT) tune$(EXEEXT)
133		@echo Optimising parameters for your system, please be patient.
134		test -z "ecm-params.h" || rm -f ecm-params.h
135		./bench_mulredc > ecm-params.h
136		./tune >> ecm-params.h
137
138check_PROGRAMS = ecm$(EXEEXT)
139
140dist_check_SCRIPTS = test.pp1 test.pm1 test.ecm
141if WANT_GPU
142dist_check_SCRIPTS += test.gpuecm
143endif
144
145TESTS = $(dist_check_SCRIPTS)
146TESTS_ENVIRONMENT = $(VALGRIND)
147
148# see https://www.gnu.org/software/automake/manual/html_node/Scripts_002dbased-Testsuites.html
149# this is only needed for "make longcheck" below
150export GMPECM_DATADIR = $(srcdir)
151
152longcheck: ecm$(EXEEXT)
153	$(srcdir)/test.pp1 "$(VALGRIND) ./ecm$(EXEEXT)"
154	$(srcdir)/test.pp1 "$(VALGRIND) ./ecm$(EXEEXT) -no-ntt"
155	$(srcdir)/test.pp1 "$(VALGRIND) ./ecm$(EXEEXT) -modmuln"
156	$(srcdir)/test.pp1 "$(VALGRIND) ./ecm$(EXEEXT) -redc"
157	$(srcdir)/test.pp1 "$(VALGRIND) ./ecm$(EXEEXT) -mpzmod"
158	$(srcdir)/test.pm1 "$(VALGRIND) ./ecm$(EXEEXT)"
159	$(srcdir)/test.pm1 "$(VALGRIND) ./ecm$(EXEEXT) -no-ntt"
160	$(srcdir)/test.pm1 "$(VALGRIND) ./ecm$(EXEEXT) -modmuln"
161	$(srcdir)/test.pm1 "$(VALGRIND) ./ecm$(EXEEXT) -redc"
162	$(srcdir)/test.pm1 "$(VALGRIND) ./ecm$(EXEEXT) -mpzmod"
163	$(srcdir)/test.ecm "$(VALGRIND) ./ecm$(EXEEXT)"
164	$(srcdir)/test.ecm "$(VALGRIND) ./ecm$(EXEEXT) -no-ntt"
165	$(srcdir)/test.ecm "$(VALGRIND) ./ecm$(EXEEXT) -modmuln"
166	$(srcdir)/test.ecm "$(VALGRIND) ./ecm$(EXEEXT) -redc"
167	$(srcdir)/test.ecm "$(VALGRIND) ./ecm$(EXEEXT) -mpzmod"
168	$(srcdir)/test.ecm "$(VALGRIND) ./ecm$(EXEEXT) -treefile tree"
169	$(srcdir)/testlong.pp1 "$(VALGRIND) ./ecm$(EXEEXT)"
170	$(srcdir)/testlong.pm1 "$(VALGRIND) ./ecm$(EXEEXT)"
171	$(srcdir)/testlong.ecm "$(VALGRIND) ./ecm$(EXEEXT)"
172
173## to be sure ecm.1 is considered as source
174## (cf section "Man pages" in the automake manual)
175dist_man_MANS = ecm.1
176
177## If ./configure found xsltproc and docbook.xsl, add a rule for building
178## the manpage. If they were not found, this rule is omitted and make will
179## never try to rebuild the man page, which would result in an error anyway.
180if MAKE_MANPAGE
181ecm.1: $(srcdir)/ecm.xml
182	xsltproc -o ecm.1 $(XSLDIR)/manpages/docbook.xsl $(srcdir)/ecm.xml
183endif
184