chiark / gitweb /
math/mpx-mul4-*-sse2.S: Remove an unhelpful comment.
[catacomb] / math / Makefile.am
1 ### -*-makefile-*-
2 ###
3 ### Build script for mathematical infrastructure
4 ###
5 ### (c) 2013 Straylight/Edgeware
6 ###
7
8 ###----- Licensing notice ---------------------------------------------------
9 ###
10 ### This file is part of Catacomb.
11 ###
12 ### Catacomb is free software; you can redistribute it and/or modify
13 ### it under the terms of the GNU Library General Public License as
14 ### published by the Free Software Foundation; either version 2 of the
15 ### License, or (at your option) any later version.
16 ###
17 ### Catacomb is distributed in the hope that it will be useful,
18 ### but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 ### GNU Library General Public License for more details.
21 ###
22 ### You should have received a copy of the GNU Library General Public
23 ### License along with Catacomb; if not, write to the Free
24 ### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
25 ### MA 02111-1307, USA.
26
27 include $(top_srcdir)/vars.am
28
29 noinst_LTLIBRARIES       = libmath.la
30 libmath_la_SOURCES       =
31 nodist_libmath_la_SOURCES =
32 libmath_la_LIBADD        =
33
34 TEST_LIBS                = libmath.la
35
36 ###--------------------------------------------------------------------------
37 ### Representation of multiprecision integers.
38
39 ## The `mpgen' tool for dealing with these things.
40 mpgen                    = $(srcdir)/mpgen
41 EXTRA_DIST              += mpgen
42 AM_V_MPGEN               = $(AM_V_MPGEN_@AM_V@)
43 AM_V_MPGEN_              = $(AM_V_MPGEN_@AM_DEFAULT_V@)
44 AM_V_MPGEN_0             = @echo "  MPGEN    $@";
45 MPGEN                    = $(AM_V_MPGEN)$(PYTHON) $(mpgen)
46
47 ## The type information collected by `configure'.
48 CLEANFILES              += typeinfo.py
49 EXTRA_DIST              += typeinfo.py.in
50 typeinfo.py: $(srcdir)/typeinfo.py.in Makefile
51         $(SUBST) $(srcdir)/typeinfo.py.in >typeinfo.py.new \
52                 type_bits="@type_bits@" \
53                 limits="@limits@" && \
54         mv typeinfo.py.new typeinfo.py
55
56 ## The header file containing our representation choices.
57 BUILT_SOURCES           += mptypes.h
58 CLEANFILES              += mptypes.h
59 nodist_archinclude_HEADERS += mptypes.h
60 mptypes.h: $(mpgen) typeinfo.py
61         $(MPGEN) mptypes >mptypes.h.in && mv mptypes.h.in mptypes.h
62
63 ## Limits of C types as multiprecision integers.
64 BUILT_SOURCES           += mplimits.h mplimits.c
65 CLEANFILES              += mplimits.h mplimits.c
66 nodist_archinclude_HEADERS += mplimits.h
67 nodist_libmath_la_SOURCES += mplimits.c
68 mplimits.h: $(mpgen) typeinfo.py
69         $(MPGEN) mplimits_h >mplimits.h.in && mv mplimits.h.in mplimits.h
70 mplimits.c: $(mpgen) typeinfo.py
71         $(MPGEN) mplimits_c >mplimits.c.in && mv mplimits.c.in mplimits.c
72
73 ###--------------------------------------------------------------------------
74 ### Main multiprecision integer library.
75
76 ## Additional buffer I/O functions for mathematical objects.
77 pkginclude_HEADERS      += buf.h
78 libmath_la_SOURCES      += buf.c
79
80 ## Infrastructure for fast exponentiation.
81 pkginclude_HEADERS      += exp.h
82 libmath_la_SOURCES      += exp.c
83
84 ## Main user-visible multiprecision arithmetic.
85 pkginclude_HEADERS      += mp.h
86 libmath_la_SOURCES      += mp-arith.c
87 TESTS                   += mp-arith.t$(EXEEXT)
88 libmath_la_SOURCES      += mp-const.c
89 libmath_la_SOURCES      += mp-exp.c mp-exp.h
90 libmath_la_SOURCES      += mp-gcd.c
91 TESTS                   += mp-gcd.t$(EXEEXT)
92 libmath_la_SOURCES      += mp-io.c
93 libmath_la_SOURCES      += mp-jacobi.c
94 TESTS                   += mp-jacobi.t$(EXEEXT)
95 libmath_la_SOURCES      += mp-mem.c
96 libmath_la_SOURCES      += mp-misc.c
97 libmath_la_SOURCES      += mp-modexp.c
98 TESTS                   += mp-modexp.t$(EXEEXT)
99 libmath_la_SOURCES      += mp-modsqrt.c
100 TESTS                   += mp-modsqrt.t$(EXEEXT)
101 libmath_la_SOURCES      += mp-sqrt.c
102 TESTS                   += mp-sqrt.t$(EXEEXT)
103 libmath_la_SOURCES      += mp-test.c
104 EXTRA_DIST              += t/mp
105
106 ## Computing Fibonacci numbers.
107 pkginclude_HEADERS      += mp-fibonacci.h
108 libmath_la_SOURCES      += mp-fibonacci.c
109 TESTS                   += mp-fibonacci.t$(EXEEXT)
110
111 ## Special memory allocation for multiprecision integers.
112 pkginclude_HEADERS      += mparena.h
113 libmath_la_SOURCES      += mparena.c
114
115 ## Barrett reduction, an efficient method for modular reduction.
116 pkginclude_HEADERS      += mpbarrett.h
117 libmath_la_SOURCES      += mpbarrett.c
118 TESTS                   += mpbarrett.t$(EXEEXT)
119 libmath_la_SOURCES      += mpbarrett-exp.c mpbarrett-mexp.c mpbarrett-exp.h
120 TESTS                   += mpbarrett-exp.t$(EXEEXT) mpbarrett-mexp.t$(EXEEXT)
121 TESTS                   += mpbarrett.t$(EXEEXT)
122 EXTRA_DIST              += t/mpbarrett
123
124 ## Solving congruences using the Chinese Remainder Theorem.
125 pkginclude_HEADERS      += mpcrt.h
126 libmath_la_SOURCES      += mpcrt.c
127 TESTS                   += mpcrt.t$(EXEEXT)
128 EXTRA_DIST              += t/mpcrt
129
130 ## Conversions between machine-native and multiprecision integers.
131 pkginclude_HEADERS      += mpint.h
132 libmath_la_SOURCES      += mpint.c
133 TESTS                   += mpint.t$(EXEEXT)
134 EXTRA_DIST              += t/mpint
135
136 ## Montgomery reduction, a clever method for modular arithmetic.
137 pkginclude_HEADERS      += mpmont.h
138 libmath_la_SOURCES      += mpmont.c
139 TESTS                   += mpmont.t$(EXEEXT)
140 libmath_la_SOURCES      += mpmont-exp.c mpmont-mexp.c mpmont-exp.h
141 TESTS                   += mpmont-exp.t$(EXEEXT) mpmont-mexp.t$(EXEEXT)
142 EXTRA_DIST              += t/mpmont
143
144 ## Efficient multiplication of many small numbers.
145 pkginclude_HEADERS      += mpmul.h
146 libmath_la_SOURCES      += mpmul.c
147 TESTS                   += mpmul.t$(EXEEXT)
148
149 ## Generating random numbers.
150 pkginclude_HEADERS      += mprand.h
151 libmath_la_SOURCES      += mprand.c
152
153 ## Efficient reduction modulo numbers with conveninent binary
154 ## representations.
155 pkginclude_HEADERS      += mpreduce.h
156 libmath_la_SOURCES      += mpreduce.c mpreduce-exp.h
157 TESTS                   += mpreduce.t$(EXEEXT)
158 EXTRA_DIST              += t/mpreduce
159
160 ## Iteratiion over the bianry representation of multiprecision integers.
161 pkginclude_HEADERS      += mpscan.h
162 libmath_la_SOURCES      += mpscan.c
163
164 ## Conversion between multiprecision integers and their textual
165 ## representations.
166 pkginclude_HEADERS      += mptext.h
167 libmath_la_SOURCES      += mptext.c
168 TESTS                   += mptext.t$(EXEEXT)
169 libmath_la_SOURCES      += mptext-dstr.c
170 libmath_la_SOURCES      += mptext-file.c
171 libmath_la_SOURCES      += mptext-len.c
172 libmath_la_SOURCES      += mptext-string.c
173 EXTRA_DIST              += t/mptext
174
175 ## Low-level multiprecision arithmetic.
176 pkginclude_HEADERS      += mpx.h bitops.h mpw.h
177 libmath_la_SOURCES      += mpx.c
178 TESTS                   += mpx.t$(EXEEXT)
179 libmath_la_SOURCES      += karatsuba.h mpx-kmul.c mpx-ksqr.c
180 TESTS                   += mpx-kmul.t$(EXEEXT) mpx-ksqr.t$(EXEEXT)
181 noinst_PROGRAMS         += bittest
182 TESTS                   += bittest
183 EXTRA_DIST              += t/mpx
184
185 if CPUFAM_X86
186 MPX_MUL4_SOURCES         = mpx-mul4-x86-sse2.S
187 check_PROGRAMS          += mpx-mul4.t
188 TESTS                   += mpx-mul4.t$(EXEEXT)
189 endif
190 if CPUFAM_AMD64
191 MPX_MUL4_SOURCES         = mpx-mul4-amd64-sse2.S
192 check_PROGRAMS          += mpx-mul4.t
193 TESTS                   += mpx-mul4.t$(EXEEXT)
194 endif
195 libmath_la_SOURCES      += $(MPX_MUL4_SOURCES)
196 mpx_mul4_t_SOURCES       = mpx-mul4-test.c $(MPX_MUL4_SOURCES)
197 mpx_mul4_t_CPPFLAGS      = \
198         $(AM_CPPFLAGS) \
199         -DTEST_MUL4 -DSRCDIR="\"$(srcdir)\""
200 mpx_mul4_t_LDFLAGS       = $(TEST_LDFLAGS)
201 mpx_mul4_t_LDADD         = $(top_builddir)/libcatacomb.la $(mLib_LIBS)
202 EXTRA_DIST              += t/mpx-mul4
203
204 ## A quick-and-dirty parser, used for parsing descriptions of groups, fields,
205 ## etc.
206 pkginclude_HEADERS      += qdparse.h
207 libmath_la_SOURCES      += qdparse.c
208
209 ## Pollard's `rho' algorithm for determining discrete logarithms.
210 pkginclude_HEADERS      += rho.h
211 libmath_la_SOURCES      += rho.c
212 TESTS                   += rho.t$(EXEEXT)
213
214 ###--------------------------------------------------------------------------
215 ### Prime number checking, searching, and related jobs.
216
217 ## Generating Lim--Lee groups, i.e., unit groups of finite fields without
218 ## small subgroups (except for the obvious ones).
219 pkginclude_HEADERS      += limlee.h
220 libmath_la_SOURCES      += limlee.c
221
222 ## A table of small prime numbers.
223 pkginclude_HEADERS      += $(precomp)/math/primetab.h
224 nodist_libmath_la_SOURCES += ../precomp/math/primetab.c
225 PRECOMPS                += $(precomp)/math/primetab.h \
226                            $(precomp)/math/primetab.c
227 PRECOMP_PROGS           += genprimes
228 genprimes_LDADD          = $(mLib_LIBS)
229 if !CROSS_COMPILING
230 $(precomp)/math/primetab.h: $(precomp)/math/primetab.c
231 $(precomp)/math/primetab.c:
232         $(AM_V_at)$(MKDIR_P) $(precomp)/math
233         $(AM_V_at)$(MAKE) genprimes$(EXEEXT)
234         $(AM_V_GEN)./genprimes -sCATACOMB_PRIMETAB_H \
235                 -h$(precomp)/math/primetab.h -c$(precomp)/math/primetab.c \
236                 -n256 -t"unsigned short" -iprimetab
237 endif
238
239 ## Filtering candidate prime numbers by checking for small factors
240 ## efficiently.
241 pkginclude_HEADERS      += pfilt.h
242 libmath_la_SOURCES      += pfilt.c
243
244 ## Generating prime numbers (and other kinds of numbers which need searching
245 ## for).
246 pkginclude_HEADERS      += pgen.h
247 libmath_la_SOURCES      += pgen.c
248 libmath_la_SOURCES      += pgen-gcd.c
249 libmath_la_SOURCES      += pgen-granfrob.c
250 libmath_la_SOURCES      += pgen-simul.c
251 libmath_la_SOURCES      += pgen-stdev.c
252 TESTS                   += pgen.t$(EXEEXT) pgen-granfrob.t$(EXEEXT)
253 EXTRA_DIST              += t/pgen
254
255 ## Finding primitive elements in finite fields.
256 pkginclude_HEADERS      += prim.h
257 libmath_la_SOURCES      += prim.c
258
259 ## Iterating over all prime numbers from a given starting point.
260 pkginclude_HEADERS      += primeiter.h
261 libmath_la_SOURCES      += primeiter.c
262 TESTS                   += primeiter.t$(EXEEXT)
263 primeiter.lo: $(precomp)/math/wheel.h
264
265 ## The Miller--Rabin primality test.
266 pkginclude_HEADERS      += rabin.h
267 libmath_la_SOURCES      += rabin.c
268
269 ## Finding `strong' primes, using Gordon's algorithm.  Once upon a time,
270 ## products of these kinds of numbers were harder to factor.
271 pkginclude_HEADERS      += strongprime.h
272 libmath_la_SOURCES      += strongprime.c
273
274 ## A `wheel', used by the prime iteration machinery.
275 pkginclude_HEADERS      += $(precomp)/math/wheel.h
276 nodist_libmath_la_SOURCES += ../precomp/math/wheel.c
277 PRECOMPS                += $(precomp)/math/wheel.h $(precomp)/math/wheel.c
278 PRECOMP_PROGS           += genwheel
279 genwheel_LDADD           = $(mLib_LIBS)
280 if !CROSS_COMPILING
281 $(precomp)/math/wheel.h: $(precomp)/math/wheel.c
282 $(precomp)/math/wheel.c:
283         $(AM_V_at)$(MKDIR_P) $(precomp)/math
284         $(AM_V_at)$(MAKE) genwheel$(EXEEXT)
285         $(AM_V_GEN)./genwheel -sCATACOMB_WHEEL_H \
286                 -h$(precomp)/math/wheel.h -c$(precomp)/math/wheel.c \
287                 -n5 -t"unsigned char" -iwheel
288 endif
289
290 ###--------------------------------------------------------------------------
291 ### Binary polynomial arithmetic.
292
293 ## User-visible binary polynomial arithmetic.
294 pkginclude_HEADERS      += gf.h
295 libmath_la_SOURCES      += gf-arith.c
296 TESTS                   += gf-arith.t$(EXEEXT)
297 libmath_la_SOURCES      += gf-exp.c gf-exp.h
298 libmath_la_SOURCES      += gf-gcd.c
299 TESTS                   += gf-gcd.t$(EXEEXT)
300 EXTRA_DIST              += t/gf
301
302 ## Low-level binary polynomial arithmetic.
303 pkginclude_HEADERS      += gfx.h
304 libmath_la_SOURCES      += gfx.c
305 TESTS                   += gfx.t$(EXEEXT)
306 libmath_la_SOURCES      += gfx-kmul.c
307 TESTS                   += gfx-kmul.t$(EXEEXT)
308 libmath_la_SOURCES      += gfx-sqr.c
309 nodist_libmath_la_SOURCES += ../precomp/math/gfx-sqrtab.c
310 PRECOMPS                += $(precomp)/math/gfx-sqrtab.c
311 PRECOMP_PROGS           += gfx-sqr-mktab
312 if !CROSS_COMPILING
313 $(precomp)/math/gfx-sqrtab.c:
314         $(AM_V_at)$(MKDIR_P) $(precomp)/math
315         $(AM_V_at)$(MAKE) gfx-sqr-mktab$(EXEEXT)
316         $(AM_V_GEN)./gfx-sqr-mktab >$(precomp)/math/gfx-sqrtab.c.new && \
317                 mv $(precomp)/math/gfx-sqrtab.c.new \
318                         $(precomp)/math/gfx-sqrtab.c
319 endif
320 TESTS                   += gfx-sqr.t$(EXEEXT)
321 EXTRA_DIST              += t/gfx
322
323 ## Conversions between normal and polynomial basis representations for binary
324 ## fields.
325 pkginclude_HEADERS      += gfn.h
326 libmath_la_SOURCES      += gfn.c
327 TESTS                   += gfn.t$(EXEEXT)
328 EXTRA_DIST              += t/gfn
329
330 ## Efficient reduction modulo sparse polynomials.
331 pkginclude_HEADERS      += gfreduce.h
332 libmath_la_SOURCES      += gfreduce.c gfreduce-exp.h
333 TESTS                   += gfreduce.t$(EXEEXT)
334 EXTRA_DIST              += t/gfreduce
335
336 ###--------------------------------------------------------------------------
337 ### Abstractions for various kinds of algebraic objects.
338
339 ## Abstract cyclic groups.
340 pkginclude_HEADERS      += group.h group-guts.h
341 libmath_la_SOURCES      += group-dstr.c
342 libmath_la_SOURCES      += group-exp.c group-exp.h
343 libmath_la_SOURCES      += group-file.c
344 libmath_la_SOURCES      += group-parse.c
345 libmath_la_SOURCES      += group-stdops.c
346 libmath_la_SOURCES      += group-string.c
347 libmath_la_SOURCES      += g-bin.c
348 libmath_la_SOURCES      += g-prime.c
349 libmath_la_SOURCES      += g-ec.c
350 EXTRA_DIST              += group-test.c
351 TESTS                   += group-test.t$(EXEEXT)
352 EXTRA_DIST              += t/group
353
354 ## Abstract finite fields.
355 pkginclude_HEADERS      += field.h field-guts.h
356 libmath_la_SOURCES      += field.c
357 libmath_la_SOURCES      += field-exp.c field-exp.h
358 libmath_la_SOURCES      += field-parse.c
359 libmath_la_SOURCES      += f-binpoly.c
360 libmath_la_SOURCES      += f-niceprime.c
361 libmath_la_SOURCES      += f-prime.c
362
363 ## Table of built-in binary fields.
364 pkginclude_HEADERS      += bintab.h
365 nodist_libmath_la_SOURCES += bintab.c
366 CLEANFILES              += bintab.c
367 EXTRA_DIST              += bintab.in
368 bintab.c: $(mpgen) typeinfo.py bintab.in
369         $(MPGEN) bintab $(srcdir)/bintab.in >bintab.c.new && \
370                 mv bintab.c.new bintab.c
371
372 ## Table of built-in prime fields.
373 pkginclude_HEADERS      += ptab.h
374 nodist_libmath_la_SOURCES += ptab.c
375 CLEANFILES              += ptab.c
376 EXTRA_DIST              += ptab.in
377 ptab.c: $(mpgen) typeinfo.py ptab.in
378         $(MPGEN) ptab $(srcdir)/ptab.in >ptab.c.new && \
379                 mv ptab.c.new ptab.c
380
381 ###--------------------------------------------------------------------------
382 ### Elliptic curve arithmetic.
383
384 ## Basic elliptic curve arithmetic.
385 pkginclude_HEADERS      += ec.h ec-guts.h
386 libmath_la_SOURCES      += ec.c
387 libmath_la_SOURCES      += ec-exp.c ec-exp.h
388 libmath_la_SOURCES      += ec-info.c
389 TESTS                   += ec-info.t$(EXEEXT)
390 libmath_la_SOURCES      += ec-bin.c
391 TESTS                   += ec-bin.t$(EXEEXT)
392 libmath_la_SOURCES      += ec-prime.c
393 TESTS                   += ec-prime.t$(EXEEXT)
394 EXTRA_DIST              += t/ec
395
396 ## The standard `raw' encoding (`EC2OSP') of elliptic curve points.
397 pkginclude_HEADERS      += ec-raw.h
398 libmath_la_SOURCES      += ec-raw.c
399
400 ## Assistance for elliptic-curve keys.
401 pkginclude_HEADERS      += ec-keys.h
402 libmath_la_SOURCES      += ec-fetch.c
403
404 ## Test infrastructure for elliptic curves.
405 pkginclude_HEADERS      += ec-test.h
406 libmath_la_SOURCES      += ec-test.c
407 TESTS                   += ec-test.t$(EXEEXT)
408
409 ## Table of built-in elliptic-curve groups.
410 pkginclude_HEADERS      += ectab.h
411 nodist_libmath_la_SOURCES += ectab.c
412 CLEANFILES              += ectab.c
413 EXTRA_DIST              += ectab.in
414 ectab.c: $(mpgen) typeinfo.py ectab.in
415         $(MPGEN) ectab $(srcdir)/ectab.in >ectab.c.new && \
416                 mv ectab.c.new ectab.c
417
418 ###--------------------------------------------------------------------------
419 ### Other strange things.
420
421 pkginclude_HEADERS      += qfarith.h
422
423 pkginclude_HEADERS      += f25519.h
424 libmath_la_SOURCES      += f25519.c
425 TESTS                   += f25519.t$(EXEEXT)
426 TESTS                   += f25519-p10.t$(EXEEXT)
427 EXTRA_DIST              += t/f25519
428
429 check_PROGRAMS          += f25519-p10.t
430 f25519_p10_t_SOURCES     = f25519.c
431 f25519_p10_t_CPPFLAGS    = $(AM_CPPFLAGS) -DTEST_RIG -DSRCDIR="\"$(srcdir)\""
432 f25519_p10_t_CPPFLAGS   += -DF25519_IMPL=10
433 f25519_p10_t_LDFLAGS     = $(TEST_LDFLAGS)
434 f25519_p10_t_LDADD       = $(TEST_LIBS) $(top_builddir)/libcatacomb.la
435 f25519_p10_t_LDADD      += $(mLib_LIBS) $(CATACOMB_LIBS) $(LIBS)
436
437 pkginclude_HEADERS      += fgoldi.h
438 libmath_la_SOURCES      += fgoldi.c
439 TESTS                   += fgoldi.t$(EXEEXT)
440 TESTS                   += fgoldi-p12.t$(EXEEXT)
441 EXTRA_DIST              += t/fgoldi
442
443 check_PROGRAMS          += fgoldi-p12.t
444 fgoldi_p12_t_SOURCES     = fgoldi.c
445 fgoldi_p12_t_CPPFLAGS    = $(AM_CPPFLAGS) -DTEST_RIG -DSRCDIR="\"$(srcdir)\""
446 fgoldi_p12_t_CPPFLAGS   += -DFGOLDI_IMPL=12
447 fgoldi_p12_t_LDFLAGS     = $(TEST_LDFLAGS)
448 fgoldi_p12_t_LDADD       = $(TEST_LIBS) $(top_builddir)/libcatacomb.la
449 fgoldi_p12_t_LDADD      += $(mLib_LIBS) $(CATACOMB_LIBS) $(LIBS)
450
451 pkginclude_HEADERS      += scaf.h
452 libmath_la_SOURCES      += scaf.c
453
454 pkginclude_HEADERS      += montladder.h
455 pkginclude_HEADERS      += scmul.h
456
457 ###----- That's all, folks --------------------------------------------------