Codebase list ntl / upstream/11.0.0 doc / config.txt
upstream/11.0.0

Tree @upstream/11.0.0 (Download .tar.gz)

config.txt @upstream/11.0.0raw · history · blame

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
usage: ./configure [ variable=value ]...

This configure script generates the file 'makefile' and the file
'../include/NTL/config.h', based upon the values assigned to the
variables on the command line.


########### Here are the most important variables, and their default values.

CXX=g++              # The C++ compiler

CXXFLAGS=-g -O2      # C++ complilation flags

NATIVE=on            # compiles code targeted to current hardware

TUNE=generic (or x86)# performance-tuning switch

DEF_PREFIX=/usr/local# Default software directory

PREFIX=$(DEF_PREFIX) # Directory in which to install NTL library components
SHARED=off           # Generate a shared library (as well as static)

NTL_THREADS=on       # compile in thread-safe mode
NTL_THREAD_BOOST=on  # compile with thread boosting enabled
NTL_EXCEPTIONS=off   # compile in exception-safe mode

NTL_GMP_LIP=on       # Switch to enable the use of GMP as primary 
                     #   long integer package

GMP_PREFIX=$(DEF_PREFIX) # Directory in which GMP components are installed


NTL_GF2X_LIB=off     # Switch to enable the use of the gf2x package
                     #   for faster arithmetic over GF(2)[X]

GF2X_PREFIX=$(DEF_PREFIX) # Directory in which gf2x components are installed

NTL_STD_CXX11=on     # Build assuming C++11 features

NTL_SAFE_VECTORS=on  # build in "safe vector" mode 


########## Here are more detailed description of these variables.

########## Basic compilation variables:

CXX=g++

# A C++ compiler, e.g., g++, CC, xlC



CXXFLAGS=-g -O2

# Flags for the C++ compiler. 
# It is highly recommend to avoid things like -O3 and -Ofast.
# These may yield incorrect code.


NATIVE=on

# Flag to target code to current hardware.  Setting this flag  will pass
# -march=native through to the compiler via CXXAUTOFLAGS (if possible).  This
# is the easiest way to exploit the hardware capabilities of your machine to
# their fullest potential.  Note that if CXXFLAGS contains an '-march=XXX'
# option, then NATIVE will be turned off.

TUNE=generic (or x86)

# Switch to determine how various performance options get set
#   auto        make runs a performance-tuning wizard 
#   generic     should be OK for most platforms
#   x86         should be well suited for most x86 platforms
# More choices may be added in the future.
# The default is 'x86' if the configuration script detects that it 
# is running on an x86 machine; otherwise the default is 'generic'.


########## Installation path:

DEF_PREFIX=/usr/local

# Default software directory

PREFIX=$(DEF_PREFIX)

# Set this to the directory in which you want NTL components to be
# installed.  When 'make install' is executed, the header
# files are copied into $(PREFIX)/include/NTL, the library itself is
# copied to $(PREFIX)/lib/libntl.a, and the documentation files
# are copied into $(PREFIX)/share/doc/NTL.
# Unless you have root permissions when running 'make install',
# you will have to override the default PREFIX value with the
# name of your own local directory.
# If you want finer-grained control over where the different
# library components are installed, set the variables 
# INCLUDEDIR, LIBDIR, and DOCDIR (see below).

########## Shared library switch:

SHARED=off

# Set this to 'on' if you want to generate a shared library, in addition to a
# static library.   Shared libraries have many advantages, but unfortunately,
# their use is rather less portable than that of good, old-fashioned static
# libraries.  If you set SHARED=on, then the makefile will use a libtool
# script.  By default, the libtool script used is freshly built when you run
# configure.  You can use a pre-built libtool command by setting the
# configuration variable LIBTOOL.  Note that if SHARED=on, then in addition to
# using the libtool program, the makefile relies on features specific to GNU
# make.


########## thread safety

NTL_THREADS=on

# Set to 'on' if you want to compile NTL in thread-safe mode.  This requires
# several C++11 features, including atomic types, mutexes, and thread_local
# storage.  Your compiler may not yet support these features.  Setting this
# flag will automatically set the NTL_STD_CXX11 flag (if neither NTL_STD_CXX11
# or NTL_STD_CXX14 is already set). It will also pass -pthread throught to the
# compiler via CXXAUTOFLAGS (if possible).
# Turning this flag off will also turn off the NTL_THREAD_BOOST flag.

########## thread boosting

NTL_THREAD_BOOST=on

# Set to 'on' if you want to compile NTL so that is does certain internal
# computations using multiple threads.  
# This feature is a work in progress.  
# As time goes on, more NTL algorithms are thread boosted.
# See BasicThreadPool documentation file for more details.

########## exceptions

NTL_EXCEPTIONS=off

# Set to 'on' if you want to compile NTL with exceptions enabled.  This
# requires several C++11 features, including lambdas and the new rules for
# exception specifications.  Your compiler may not yet support these feautures.
# Setting this flag will automatically set the NTL_STD_CXX11 flag (if neither
# NTL_STD_CXX11 or NTL_STD_CXX14 is already set).

# With exceptions disabled, any error conditions detected by NTL (including
# memory allocation errors) will result in an error message and a call to
# abort.  Also, if compiling in C++11 mode (or later, see NTL_STD_CXX11), with
# exceptions disabled, certain move constructors and move assignment operators
# will be declared "noexcept".  This can lead to greater efficiency (for
# example, std::vector's take advantage of this to avoid call to copy 
# contructors).

# With exceptions enabled, most error conditions detected by NTL will result in
# an exception being thrown.  NTL will also be compiled in a "thread safe" mode
# that prevents memory leaks (and other problems).  In addition, some move
# constructors and move assignment operators may not be declared "noexcept".

########## GMP variables:

NTL_GMP_LIP=on

# Set to 'off' if you don't want to use GMP, the GNU Multi-Precision package,
# as the primary long integer package.
# This will lead to significantly slower code, and is not 
# recommended.


GMP_PREFIX=$(DEF_PREFIX)

# If GMP was installed in a standard system directory, e.g., /usr/local,
# then do not set this variable.
# Otherwise, if you want to use GMP and GMP was installed in
# a directory <gmp_prefix>, then set GMP_PREFIX=<gmp_prefix>.
# This works if the directory <gmp_prefix>/include contains gmp.h
# and <gmp_prefix>/lib contains libgmp.a.  
# For finer-grained control, set the variables GMP_INCDIR and GMP_LIBDIR 
# instead (see below).


########## GF2X variables:

NTL_GF2X_LIB=off

# Set to 'on' if you want to use the gf2x library for faster
# arithmetic over GF(2)[X] (the NTL class GF2X).

# If you set this flag, please note the following.
# If you have installed gf2x in a standard "system" location, this is
# all you have to do.  Otherwise, if gf2x is built, but not installed
# in a standard place, you have to set the variable GF2X_PREFIX.


GF2X_PREFIX=$(DEF_PREFIX)

# If gf2x was installed in a standard system directory, e.g., /usr/local,
# then do not set this variable.
# Otherwise, if you want to use gf2x and gf2x was installed in
# a directory <gf2x_prefix>, then set GF2X_PREFIX=<gf2x_prefix>.
# This works if the directory <gf2x_prefix>/include contains gf2x.h
# and <gf2x_prefix>/lib contains libgf2x.a.  
# For finer-grained control, set the variables GF2X_INCDIR and GF2X_LIBDIR 
# instead (see below).

########### Language stadards

NTL_STD_CXX11=on     # Build assuming C++11 features
NTL_STD_CXX14=off    # Build assuming C++14 features

# Setting one of these may also result in passing pass either -std=c++11 or
# -std=c++14 through to the compiler via CXXAUTOFLAGS (if it is necessary and
# possible).


############ Safe vector mode

NTL_SAFE_VECTORS=on  # Build in "safe vector mode"

# Build NTL in "safe vector mode", which relaxes the "relocatability"
# requirement for NTL vector types. I expect that at some point in the next
# couple of years, this will be "on" by default.  Setting this flag will
# automatically set the NTL_STD_CXX11 flag (if neither NTL_STD_CXX11 or
# NTL_STD_CXX14 is already set).  See vector documentation file for more
# details.





########### Examples:

# If you are happy with all the default values:

   ./configure

# If your C++ compiler is called icpc:

   ./configure CXX=icpc


# If GMP was installed in a non-standard directory, say,  $HOME/sw:

   ./configure GMP_PREFIX=$HOME/sw 


# If you want to use the options -g and -O for compiling C++,
# just execute

   ./configure "CXXFLAGS=-g -O"

# Note the use of quotes to keep the argument in one piece.


# If you want to use the gf2x library:

   ./configure NTL_GF2X_LIB=on



########### 
########### A little magic
###########

CXXAUTOFLAGS=

# This is a variable that is automagically set by the configuration script.
# These are C++ compiler flags that are selected depending on the choice of
# other configuration options, as well as information gleaned by the
# configuration script about the compiler.  To do this, the configuration
# script attempts to figure out the type of compiler and the default language
# standard supported.  The types of compiler currently recognized are gcc,
# clang, and icc.  For these compilers, the automagic should definitely work.
# For others, your mileage may vary.  The configuration script always prints
# out the value it chooses.  Currently, the following flags may get passed
# through CXXAUTOFLAGS:
#
#   -std=c++11 
#   -std=c++14         if requested explicitly via NTL_STD_CXX11=on or 
#                      NTL_STD_CXX14=on, or implicitly via a request
#                      for a feature that requires C++11
#
#   -pthread           if thread-safety is requested via NTL_THREADS=on 
#                      or NTL_THREAD_BOOST=on
#
#   -fp-model precise  only for the Intel icc compiler (to prevent
#                      non-value-preserving floating point optimizations)
#
# If you explicitly set the value of CXXAUTOFLAGS when invoking the
# configuration script, then it will not change that value.

NOCONTRACT=

# Like the CXXAUTOFLAGS variable, this is set automagically by the 
# configuration script, unless you explicitly provide a value.
# It is only used in compiling the source file that implements
# the quad_float class.  For that file only, NTL requires not only
# that the compiler does not perform any non-value-preserving 
# floating point optimizations, but that is also does not perform
# any "contractions" (i.e., emit FMA (fused multiply add) instructions. 
# Currently, it may be set as follows:
# 
#   -ffp-contract=off   for gcc (and possibly clang) compilers 
#
#   -mno-fused-madd     for old gcc compilers that don't support 
#                       -ffp-contract=off
#   -DFP_CONTRACT_OFF   for the Intel icc compiler
#
# The configuation script will make every attempt to ensure that this really
# does disable contractions.  If it doesn't work, a fallback strategy is used
# that should still work (but with a performance penalty).


MAKE_PROG=make

# To set CXXAUTOFLAGS and NOCONTRACT, the configure script actually needs to
# run make.  If you wish to use a non-standard make program for this purpose,
# set this variable to point to that program.



########### Here is a complete list of the remaining variables,
########### with their default values.  These variables are pretty 
########### esoteric, and you will probably never change their
########### default values.

AR=ar
ARFLAGS=ruv
RANLIB=ranlib
LDFLAGS=
LDLIBS=-lm
CPPFLAGS=
LIBTOOL=undefined
LIBTOOL_LINK_FLAGS=

LIBDIR=$(PREFIX)/lib
INCLUDEDIR=$(PREFIX)/include
DOCDIR=$(PREFIX)/share/doc

NTL_TLS_HACK=on

NTL_DISABLE_MOVE_ASSIGN=on
NTL_DISABLE_MOVE=off

NTL_LEGACY_NO_NAMESPACE=off
NTL_LEGACY_INPUT_ERROR=off

NTL_LEGACY_SP_MULMOD=off

NTL_UNSIGNED_LONG_LONG_TYPE=undefined
NTL_CLEAN_INT=off
NTL_CLEAN_PTR=on
NTL_RANGE_CHECK=off
NTL_X86_FIX=off
NTL_NO_X86_FIX=off
NTL_NO_INIT_TRANS=on
NTL_DISABLE_LONGDOUBLE=off
NTL_DISABLE_LONGLONG=off
NTL_DISABLE_LL_ASM=off
NTL_MAXIMIZE_SP_NBITS=off

NTL_SPMM_ULL=off
NTL_FFT_BIGTAB=off
NTL_FFT_LAZYMUL=off
NTL_TBL_REM=off
NTL_AVOID_BRANCHING=off
NTL_GF2X_NOINLINE=off
NTL_GF2X_ALTCODE=off
NTL_GF2X_ALTCODE1=off

GMP_INCDIR=$(GMP_PREFIX)/include
GMP_LIBDIR=$(GMP_PREFIX)/lib

GF2X_INCDIR=$(GF2X_PREFIX)/include
GF2X_LIBDIR=$(GF2X_PREFIX)/lib




########### Here is a more detailed description of these variables.

########### Further compilation variables:


AR=ar

# command to make a library



ARFLAGS=ruv

# arguments for AR



RANLIB=ranlib

# set to echo if you want to disable it completely



LDFLAGS=

# arguments for linker for C++ programs




LDLIBS=-lm

# libraries for linking C++ programs



CPPFLAGS=

# arguments for the C preprocessor

LIBTOOL=undefined

# the libtool command -- only needed if SHARED=on
# if left undefined, a fresh libtool script will be built

LIBTOOL_LINK_FLAGS=

# flags to add to command line when building a shared library
# mainly used to pass the argument "-no-undefined" on cygwin


########### Details of the compilation process (when SHARED=off)


# When a C++ file foo.c is compiled:
   $(CXX) -I../include $(CPPFLAGS) $(CXXFLAGS) -c foo.c

# When a C++ file foo.c is compiled and linked:
   $(CXX) -I../include $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) \ 
      -o foo foo.c $(LDLIBS)

# When the library ntl.a is built
   $(AR) $(ARFLAGS) ntl.a [ object files ]...
   $(RANLIB) ntl.a
# If the ranlib command does not exist, everything will still function OK.



########### Further installation variables:

LIBDIR=$(PREFIX)/lib
INCLUDEDIR=$(PREFIX)/include
DOCDIR=$(PREFIX)/share/doc
# Where to install NTL.
# Execution of 'make install' copies header files into $(INCLUDEDIR)/NTL,
# copies the library itself to $(LIBDIR)/libntl.a, and copies the
# documentation files into $(DOCDIR)/NTL.

########## TLS hack

NTL_TLS_HACK=on

# when building NTL with NTL_THREADS=on, if the compiler is gcc-compatible, a
# "TLS hack" may be used to workaround the fact that many compilers do not
# (correctly) implement C++11's thread_local feature.  The workaround is to use
# gcc's more limited __thread feature, and to emulate thread_local semantics
# using pthread routines.
# 
# The configuration script will first check if threads and TLS work with the
# hack, and if not, will try setting NTL_TLS_HACK=off.  You can also turn off
# the hack by setting NTL_TLS_HACK=off.


########## Disabling move semantics

NTL_DISABLE_MOVE_ASSIGN=on
NTL_DISABLE_MOVE=off

# The first flag will disable the generation of move assignment operators for
# Vec<T>, Mat<T>, vec_GF2, and GF2X.  By implication, move assignment operators
# will be disabled as well for many other types (like polynomials).  The second
# flag will disable move constuctors and move assignment operators for all NTL
# types.

# These flags are only relevant in C++11 mode.  They are meant to deal with
# backward compatibility issues for legacy NTL clients that may not deal well
# with automatically generated move operations.  It turns out that move
# semantics can quietly break programs.  See
# http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3153.htm 
# However, the default now is just to disable move assignment operators for
# those classes where it seems likeliest to cause a problem.  This default will
# likely be changed in the future, so that no move operations are disabled.



########## Legacy switches

NTL_LEGACY_NO_NAMESPACE=off 

# put NTL components in the global namespace



NTL_LEGACY_INPUT_ERROR=off
 
# abort on input errors, instead of just setting the
# "fail bit" of the istream object

NTL_LEGACY_SP_MULMOD=off

# use pre-9.0 interfaces for single-precision MulMod routines.
# See discussion in ZZ.txt for details.



########### Basic Configuration Options:

NTL_UNSIGNED_LONG_LONG_TYPE=undefined

# Name of double-word unsigned integer type.
# This is a non-standard type, and is called 'long long' by many
# compilers.  MS C++ calls it 'unsigned __int64'.
#
# Note that the new C99 standard defines the type 'unsigned long long'
# to be at least 64-bits wide.  On 32-bit machines, this is just right.
# Although not officially part of the C++ standard (which predates C99),
# it is widely supported by C++ compilers, and is likely to be added
# to the C++ standard.
#
# Unfortunately, 64-bit machines usually define 'unsigned long long'
# to also be 64-bits wide, which is kind of useless.
# However, GCC provides a type __uint128_t which does the job.
#
# If left undefined, NTL will use some "ifdef magic" to find
# the type most suitable for your machine (based on compiler and
# word size).



NTL_CLEAN_INT=off

# Setting this to 'on' disables the use of some non-standard
# integer arithmetic which would yield slightly better performance.


NTL_CLEAN_PTR=on

# Setting this to 'on' disables the use of some non-standard
# pointer arithmetic which would yield slightly better performance.
# The 'off' setting really just invites undefined behavior without 
# any measurable performance benefit. 


NTL_RANGE_CHECK=off

# Setting this to 'on' will generate vector subscript range-check code.
# Useful for debugging, but it slows things down of course.



NTL_X86_FIX=off

# Set to 'on' to force the "x86 floating point fix", 
# overriding the default behavior.
# By default, NTL will apply the "fix" if it looks like it is
# necessary, and if it knows how to fix it.
# The problem addressed here is that x86 processors sometimes
# run in a mode where FP registers have more precision than doubles.
# This will cause code in quad_float.c some trouble.
# NTL can normally automatically detect the problem, and fix it,
# so you shouldn't need to worry about this or the next flag.



NTL_NO_X86_FIX=off

# Set to 'on' to forces no "x86 floating point fix", 
# overriding the default behavior.



NTL_NO_INIT_TRANS=on

# When 'off', NTL uses a special code sequence to avoid
# copying large objects in return statements.  However, if your
# compiler optimizes away the return of a *named* local object,
# this is not necessary, and setting this flag to 'on' will result
# in *slightly* more compact and efficient code.  The C++
# standard explicitly allows compilers to perform this optimization,
# and with time, more compilers actually do this.
# Traditionally, however, most will only avoid copying *temporary* 
# objects in return statements, and NTL's default code sequence 
# exploits this fact.



NTL_DISABLE_LONGDOUBLE=off

# Explicitly disables use of long double arithmetic 

NTL_DISABLE_LONGLONG=off

# Explicitly disables use of long long arithmetic 

NTL_DISABLE_LL_ASM=off

# Explicitly disables use of inline asm as replacement for
# long long arithmetic

NTL_MAXIMIZE_SP_NBITS=on

# Allows for 62-bit single-precision moduli on 64-bit platforms.
# By default, such moduli are restricted to 60 bits, which
# usually gives *slightly* better performance across a range of
# of parameters.





########## Performance Options:


NTL_SPMM_ULL=off

# Implement the MulModPrecon code using "unsigned long long"
# (or specify NTL_UNSIGNED_LONG_LONG_TYPE to override the default).


NTL_FFT_BIGTAB=off

# Precomputed tables are used to store all the roots of unity
# used in FFT computations.


NTL_FFT_LAZYMUL=off

# When set, a "lazy multiplication" strategy due to David Harvey:
# see his paper "FASTER ARITHMETIC FOR NUMBER-THEORETIC TRANSFORMS".



NTL_TBL_REM=off

# With this flag, some divisions are avoided in the
# ZZ_pX multiplication routines.  



NTL_AVOID_BRANCHING=off

# With this option, branches are replaced at several
# key points with equivalent code using shifts and masks.
# Recommended for use with RISC architectures, especially
# ones with deep pipelines and high branch penalities.
# This flag is becoming less helpful as newer machines
# have much smaller branch penalties, but still may be worth a try.




NTL_GF2X_NOINLINE=off

# By default, the low-level GF2X multiplication routine in inlined.
# This can potentially lead to some trouble on some platforms,
# and you can override the default by setting this flag.




NTL_GF2X_ALTCODE=off

# With this option, the default strategy for implmenting low-level
# GF2X multiplication is replaced with an alternative strategy.
# This alternative strategy seems to work better on RISC machines
# with deep pipelines and high branch penalties (like a powerpc),
# but does no better (or even worse) on x86s.


NTL_GF2X_ALTCODE1=off

# Yet another alternative implementation for GF2X multiplication.



########## More GMP Options:


GMP_INCDIR=$(GMP_PREFIX)/include
# directory containing gmp.h

GMP_LIBDIR=$(GMP_PREFIX)/lib
# directory containing libgmp.a


####### More gf2x options:

GF2X_INCDIR=$(GF2X_PREFIX)/include
# directory containing gf2x.h

GF2X_LIBDIR=$(GF2X_PREFIX)/lib
# directory containing libgf2x.a