]> git.ipfire.org Git - thirdparty/openssl.git/blame - INSTALL.md
Add exporters for CMake
[thirdparty/openssl.git] / INSTALL.md
CommitLineData
6ede7d73
DMSP
1Build and Install
2=================
3
4This document describes installation on all supported operating
008ca01e
JM
5systems: the Unix/Linux family (including macOS), OpenVMS,
6and Windows.
6ede7d73
DMSP
7
8Table of Contents
9=================
10
11 - [Prerequisites](#prerequisites)
12 - [Notational Conventions](#notational-conventions)
13 - [Quick Installation Guide](#quick-installation-guide)
257e9d03
RS
14 - [Building OpenSSL](#building-openssl)
15 - [Installing OpenSSL](#installing-openssl)
6ede7d73 16 - [Configuration Options](#configuration-options)
257e9d03
RS
17 - [API Level](#api-level)
18 - [Cross Compile Prefix](#cross-compile-prefix)
19 - [Build Type](#build-type)
20 - [Directories](#directories)
21 - [Compiler Warnings](#compiler-warnings)
12e96a23 22 - [Compression Algorithm Flags](#compression-algorithm-flags)
257e9d03 23 - [Seeding the Random Generator](#seeding-the-random-generator)
31214258 24 - [Setting the FIPS HMAC key](#setting-the-FIPS-HMAC-key)
257e9d03
RS
25 - [Enable and Disable Features](#enable-and-disable-features)
26 - [Displaying configuration data](#displaying-configuration-data)
6ede7d73 27 - [Installation Steps in Detail](#installation-steps-in-detail)
257e9d03
RS
28 - [Configure](#configure-openssl)
29 - [Build](#build-openssl)
30 - [Test](#test-openssl)
31 - [Install](#install-openssl)
6ede7d73 32 - [Advanced Build Options](#advanced-build-options)
257e9d03
RS
33 - [Environment Variables](#environment-variables)
34 - [Makefile Targets](#makefile-targets)
35 - [Running Selected Tests](#running-selected-tests)
6ede7d73 36 - [Troubleshooting](#troubleshooting)
257e9d03
RS
37 - [Configuration Problems](#configuration-problems)
38 - [Build Failures](#build-failures)
39 - [Test Failures](#test-failures)
6ede7d73 40 - [Notes](#notes)
257e9d03
RS
41 - [Notes on multi-threading](#notes-on-multi-threading)
42 - [Notes on shared libraries](#notes-on-shared-libraries)
43 - [Notes on random number generation](#notes-on-random-number-generation)
203c18f1 44 - [Notes on assembler modules compilation](#notes-on-assembler-modules-compilation)
79e259e3 45
6ede7d73
DMSP
46Prerequisites
47=============
2acd8ec7 48
6ede7d73 49To install OpenSSL, you will need:
2acd8ec7 50
3a0b3cc9 51 * A "make" implementation
9f1fe6a9
DMSP
52 * Perl 5 with core modules (please read [NOTES-PERL.md](NOTES-PERL.md))
53 * The Perl module `Text::Template` (please read [NOTES-PERL.md](NOTES-PERL.md))
6ede7d73
DMSP
54 * an ANSI C compiler
55 * a development environment in the form of development libraries and C
56 header files
57 * a supported operating system
79e259e3 58
6ede7d73
DMSP
59For additional platform specific requirements, solutions to specific
60issues and other details, please read one of these:
ea24fe29 61
4148581e
DMSP
62 * [Notes for UNIX-like platforms](NOTES-UNIX.md)
63 * [Notes for Android platforms](NOTES-ANDROID.md)
64 * [Notes for Windows platforms](NOTES-WINDOWS.md)
65 * [Notes for the DOS platform with DJGPP](NOTES-DJGPP.md)
66 * [Notes for the OpenVMS platform](NOTES-VMS.md)
67 * [Notes on Perl](NOTES-PERL.md)
68 * [Notes on Valgrind](NOTES-VALGRIND.md)
ea24fe29 69
6ede7d73
DMSP
70Notational conventions
71======================
ea24fe29 72
6ede7d73 73Throughout this document, we use the following conventions.
ea24fe29 74
6ede7d73
DMSP
75Commands
76--------
ea24fe29 77
6ede7d73 78Any line starting with a dollar sign is a command line.
ea24fe29 79
6ede7d73 80 $ command
ea24fe29 81
6ede7d73
DMSP
82The dollar sign indicates the shell prompt and is not to be entered as
83part of the command.
ea24fe29 84
6ede7d73
DMSP
85Choices
86-------
ea24fe29 87
6ede7d73
DMSP
88Several words in curly braces separated by pipe characters indicate a
89**mandatory choice**, to be replaced with one of the given words.
90For example, the line
ea24fe29 91
6ede7d73 92 $ echo { WORD1 | WORD2 | WORD3 }
ea24fe29 93
6ede7d73 94represents one of the following three commands
ea24fe29 95
6ede7d73
DMSP
96 $ echo WORD1
97 - or -
98 $ echo WORD2
99 - or -
100 $ echo WORD3
ea24fe29 101
6ede7d73
DMSP
102One or several words in square brackets separated by pipe characters
103denote an **optional choice**. It is similar to the mandatory choice,
104but it can also be omitted entirely.
79e259e3 105
6ede7d73 106So the line
79e259e3 107
6ede7d73
DMSP
108 $ echo [ WORD1 | WORD2 | WORD3 ]
109
110represents one of the four commands
111
112 $ echo WORD1
113 - or -
114 $ echo WORD2
115 - or -
116 $ echo WORD3
117 - or -
118 $ echo
119
120Arguments
121---------
122
a4ffb33e 123**Optional Arguments** are enclosed in square brackets.
6ede7d73 124
a4ffb33e 125 [option...]
6ede7d73 126
a4ffb33e 127A trailing ellipsis means that more than one could be specified.
6ede7d73 128
6ede7d73
DMSP
129Quick Installation Guide
130========================
131
132If you just want to get OpenSSL installed without bothering too much
133about the details, here is the short version of how to build and install
134OpenSSL. If any of the following steps fails, please consult the
bf4cdd4a 135[Installation in Detail](#installation-steps-in-detail) section below.
6ede7d73
DMSP
136
137Building OpenSSL
138----------------
139
140Use the following commands to configure, build and test OpenSSL.
141The testing is optional, but recommended if you intend to install
142OpenSSL for production use.
143
257e9d03 144### Unix / Linux / macOS
2acd8ec7 145
16b0e0fc 146 $ ./Configure
2acd8ec7
RL
147 $ make
148 $ make test
2acd8ec7 149
257e9d03 150### OpenVMS
6ede7d73
DMSP
151
152Use the following commands to build OpenSSL:
2acd8ec7 153
16b0e0fc 154 $ perl Configure
2acd8ec7
RL
155 $ mms
156 $ mms test
79e259e3 157
257e9d03 158### Windows
6ede7d73
DMSP
159
160If you are using Visual Studio, open a Developer Command Prompt and
8c1cbc72 161issue the following commands to build OpenSSL.
b32b8961 162
16b0e0fc 163 $ perl Configure
b32b8961
RL
164 $ nmake
165 $ nmake test
6ede7d73
DMSP
166
167As mentioned in the [Choices](#choices) section, you need to pick one
168of the four Configure targets in the first command.
169
18891efd 170Most likely you will be using the `VC-WIN64A`/`VC-WIN64A-HYBRIDCRT` target for
17164bit Windows binaries (AMD64) or `VC-WIN32`/`VC-WIN32-HYBRIDCRT` for 32bit
172Windows binaries (X86).
9afbb681
DDO
173The other two options are `VC-WIN64I` (Intel IA64, Itanium) and
174`VC-CE` (Windows CE) are rather uncommon nowadays.
6ede7d73
DMSP
175
176Installing OpenSSL
177------------------
178
179The following commands will install OpenSSL to a default system location.
180
181**Danger Zone:** even if you are impatient, please read the following two
182paragraphs carefully before you install OpenSSL.
183
184For security reasons the default system location is by default not writable
185for unprivileged users. So for the final installation step administrative
186privileges are required. The default system location and the procedure to
8c1cbc72 187obtain administrative privileges depends on the operating system.
6ede7d73
DMSP
188It is recommended to compile and test OpenSSL with normal user privileges
189and use administrative privileges only for the final installation step.
190
191On some platforms OpenSSL is preinstalled as part of the Operating System.
192In this case it is highly recommended not to overwrite the system versions,
193because other applications or libraries might depend on it.
194To avoid breaking other applications, install your copy of OpenSSL to a
195[different location](#installing-to-a-different-location) which is not in
196the global search path for system libraries.
197
41149648
RL
198Finally, if you plan on using the FIPS module, you need to read the
199[Post-installation Notes](#post-installation-notes) further down.
200
257e9d03 201### Unix / Linux / macOS
6ede7d73
DMSP
202
203Depending on your distribution, you need to run the following command as
204root user or prepend `sudo` to the command:
205
206 $ make install
207
208By default, OpenSSL will be installed to
209
210 /usr/local
211
212More precisely, the files will be installed into the subdirectories
213
214 /usr/local/bin
215 /usr/local/lib
216 /usr/local/include
217 ...
218
219depending on the file type, as it is custom on Unix-like operating systems.
220
257e9d03 221### OpenVMS
6ede7d73
DMSP
222
223Use the following command to install OpenSSL.
224
225 $ mms install
226
227By default, OpenSSL will be installed to
228
d8c1cafb 229 SYS$COMMON:[OPENSSL]
6ede7d73 230
257e9d03 231### Windows
6ede7d73
DMSP
232
233If you are using Visual Studio, open the Developer Command Prompt _elevated_
234and issue the following command.
235
8c16829e 236 $ nmake install
b32b8961 237
98663afc
TM
238The easiest way to elevate the Command Prompt is to press and hold down both
239the `<CTRL>` and `<SHIFT>` keys while clicking the menu item in the task menu.
6ede7d73
DMSP
240
241The default installation location is
242
243 C:\Program Files\OpenSSL
7c03bb9f 244
6ede7d73 245for native binaries, or
b1fe6b43 246
6ede7d73 247 C:\Program Files (x86)\OpenSSL
2acd8ec7 248
6ede7d73 249for 32bit binaries on 64bit Windows (WOW64).
2acd8ec7 250
257e9d03 251#### Installing to a different location
79e259e3 252
6ede7d73 253To install OpenSSL to a different location (for example into your home
9afbb681 254directory for testing purposes) run `Configure` as shown in the following
43a70f02 255examples.
6ede7d73 256
d8c1cafb
RL
257The options `--prefix` and `--openssldir` are explained in further detail in
258[Directories](#directories) below, and the values used here are mere examples.
259
43a70f02 260On Unix:
2acd8ec7 261
16b0e0fc 262 $ ./Configure --prefix=/opt/openssl --openssldir=/usr/local/ssl
2acd8ec7 263
43a70f02 264On OpenVMS:
2acd8ec7 265
16b0e0fc 266 $ perl Configure --prefix=PROGRAM:[INSTALLS] --openssldir=SYS$MANAGER:[OPENSSL]
79e259e3 267
6ede7d73 268Note: if you do add options to the configuration command, please make sure
1dc1ea18 269you've read more than just this Quick Start, such as relevant `NOTES-*` files,
6ede7d73
DMSP
270the options outline below, as configuration options may change the outcome
271in otherwise unexpected ways.
272
6ede7d73
DMSP
273Configuration Options
274=====================
275
9afbb681
DDO
276There are several options to `./Configure` to customize the build (note that
277for Windows, the defaults for `--prefix` and `--openssldir` depend on what
16b0e0fc 278configuration is used and what Windows implementation OpenSSL is built on.
9f1fe6a9 279For more information, see the [Notes for Windows platforms](NOTES-WINDOWS.md).
6ede7d73
DMSP
280
281API Level
282---------
283
284 --api=x.y[.z]
285
286Build the OpenSSL libraries to support the API for the specified version.
287If [no-deprecated](#no-deprecated) is also given, don't build with support
288for deprecated APIs in or below the specified version number. For example,
473664aa 289adding
6ede7d73
DMSP
290
291 --api=1.1.0 no-deprecated
292
293will remove support for all APIs that were deprecated in OpenSSL version
2941.1.0 or below. This is a rather specialized option for developers.
295If you just intend to remove all deprecated APIs up to the current version
296entirely, just specify [no-deprecated](#no-deprecated).
297If `--api` isn't given, it defaults to the current (minor) OpenSSL version.
298
6ede7d73
DMSP
299Cross Compile Prefix
300--------------------
301
9afbb681 302 --cross-compile-prefix=<PREFIX>
6ede7d73 303
9afbb681 304The `<PREFIX>` to include in front of commands for your toolchain.
6ede7d73 305
9afbb681
DDO
306It is likely to have to end with dash, e.g. `a-b-c-` would invoke GNU compiler
307as `a-b-c-gcc`, etc. Unfortunately cross-compiling is too case-specific to put
6ede7d73 308together one-size-fits-all instructions. You might have to pass more flags or
16b0e0fc
RL
309set up environment variables to actually make it work. Android and iOS cases
310are discussed in corresponding `Configurations/15-*.conf` files. But there are
311cases when this option alone is sufficient. For example to build the mingw64
312target on Linux `--cross-compile-prefix=x86_64-w64-mingw32-` works. Naturally
313provided that mingw packages are installed. Today Debian and Ubuntu users
314have option to install a number of prepackaged cross-compilers along with
315corresponding run-time and development packages for "alien" hardware. To give
316another example `--cross-compile-prefix=mipsel-linux-gnu-` suffices in such
317case.
318
319For cross compilation, you must [configure manually](#manual-configuration).
320Also, note that `--openssldir` refers to target's file system, not one you are
321building on.
6ede7d73 322
6ede7d73
DMSP
323Build Type
324----------
325
326 --debug
327
328Build OpenSSL with debugging symbols and zero optimization level.
329
330 --release
331
332Build OpenSSL without debugging symbols. This is the default.
333
6ede7d73
DMSP
334Directories
335-----------
336
257e9d03 337### libdir
6ede7d73
DMSP
338
339 --libdir=DIR
340
341The name of the directory under the top of the installation directory tree
342(see the `--prefix` option) where libraries will be installed. By default
bd32bdb8 343this is `lib`. Note that on Windows only static libraries (`*.lib`) will
6ede7d73 344be stored in this location. Shared libraries (`*.dll`) will always be
bd32bdb8
TM
345installed to the `bin` directory.
346
347Some build targets have a multilib postfix set in the build configuration.
348For these targets the default libdir is `lib<multilib-postfix>`. Please use
349`--libdir=lib` to override the libdir if adding the postfix is undesirable.
6ede7d73 350
257e9d03 351### openssldir
6ede7d73
DMSP
352
353 --openssldir=DIR
354
355Directory for OpenSSL configuration files, and also the default certificate
356and key store. Defaults are:
357
358 Unix: /usr/local/ssl
359 Windows: C:\Program Files\Common Files\SSL
360 OpenVMS: SYS$COMMON:[OPENSSL-COMMON]
361
362For 32bit Windows applications on Windows 64bit (WOW64), always replace
363`C:\Program Files` by `C:\Program Files (x86)`.
364
257e9d03 365### prefix
6ede7d73
DMSP
366
367 --prefix=DIR
368
369The top of the installation directory tree. Defaults are:
370
371 Unix: /usr/local
372 Windows: C:\Program Files\OpenSSL
d8c1cafb 373 OpenVMS: SYS$COMMON:[OPENSSL]
6ede7d73 374
6ede7d73
DMSP
375Compiler Warnings
376-----------------
377
378 --strict-warnings
379
380This is a developer flag that switches on various compiler options recommended
381for OpenSSL development. It only works when using gcc or clang as the compiler.
382If you are developing a patch for OpenSSL then it is recommended that you use
383this option where possible.
384
12e96a23
TS
385Compression Algorithm Flags
386---------------------------
387
388### with-brotli-include
389
390 --with-brotli-include=DIR
391
392The directory for the location of the brotli include files (i.e. the location
393of the **brotli** include directory). This option is only necessary if
394[enable-brotli](#enable-brotli) is used and the include files are not already
395on the system include path.
396
397### with-brotli-lib
398
399 --with-brotli-lib=LIB
400
401**On Unix**: this is the directory containing the brotli libraries.
402If not provided, the system library path will be used.
403
404The names of the libraries are:
405
406* libbrotlicommon.a or libbrotlicommon.so
407* libbrotlidec.a or libbrotlidec.so
408* libbrotlienc.a or libbrotlienc.so
409
410**On Windows:** this is the directory containing the brotli libraries.
411If not provided, the system library path will be used.
412
413The names of the libraries are:
414
415* brotlicommon.lib
416* brotlidec.lib
417* brotlienc.lib
6ede7d73 418
257e9d03 419### with-zlib-include
6ede7d73
DMSP
420
421 --with-zlib-include=DIR
422
423The directory for the location of the zlib include file. This option is only
bf4cdd4a 424necessary if [zlib](#zlib) is used and the include file is not
6ede7d73
DMSP
425already on the system include path.
426
257e9d03 427### with-zlib-lib
6ede7d73
DMSP
428
429 --with-zlib-lib=LIB
430
431**On Unix**: this is the directory containing the zlib library.
432If not provided the system library path will be used.
433
434**On Windows:** this is the filename of the zlib library (with or
435without a path). This flag must be provided if the
9afbb681
DDO
436[zlib-dynamic](#zlib-dynamic) option is not also used. If `zlib-dynamic` is used
437then this flag is optional and defaults to `ZLIB1` if not provided.
6ede7d73
DMSP
438
439**On VMS:** this is the filename of the zlib library (with or without a path).
9afbb681
DDO
440This flag is optional and if not provided then `GNV$LIBZSHR`, `GNV$LIBZSHR32`
441or `GNV$LIBZSHR64` is used by default depending on the pointer size chosen.
6ede7d73 442
caf9317d
TS
443### with-zstd-include
444
445 --with-zstd-include=DIR
446
447The directory for the location of the Zstd include file. This option is only
448necessary if [enable-std](#enable-zstd) is used and the include file is not
449already on the system include path.
450
451OpenSSL requires Zstd 1.4 or greater. The Linux kernel source contains a
452*zstd.h* file that is not compatible with the 1.4.x Zstd distribution, the
453compilation will generate an error if the Linux *zstd.h* is included before
454(or instead of) the Zstd distribution header.
455
456### with-zstd-lib
457
458 --with-zstd-lib=LIB
459
460**On Unix**: this is the directory containing the Zstd library.
461If not provided the system library path will be used.
462
463**On Windows:** this is the filename of the Zstd library (with or
464without a path). This flag must be provided if the
465[enable-zstd-dynamic](#enable-zstd-dynamic) option is not also used.
466If `zstd-dynamic` is used then this flag is optional and defaults
467to `LIBZSTD` if not provided.
468
6ede7d73
DMSP
469Seeding the Random Generator
470----------------------------
471
472 --with-rand-seed=seed1[,seed2,...]
473
474A comma separated list of seeding methods which will be tried by OpenSSL
475in order to obtain random input (a.k.a "entropy") for seeding its
476cryptographically secure random number generator (CSPRNG).
477The current seeding methods are:
478
257e9d03 479### os
6ede7d73
DMSP
480
481Use a trusted operating system entropy source.
482This is the default method if such an entropy source exists.
483
257e9d03 484### getrandom
6ede7d73
DMSP
485
486Use the [getrandom(2)][man-getrandom] or equivalent system call.
487
488[man-getrandom]: http://man7.org/linux/man-pages/man2/getrandom.2.html
489
257e9d03 490### devrandom
6ede7d73 491
9afbb681
DDO
492Use the first device from the `DEVRANDOM` list which can be opened to read
493random bytes. The `DEVRANDOM` preprocessor constant expands to
6ede7d73
DMSP
494
495 "/dev/urandom","/dev/random","/dev/srandom"
496
497on most unix-ish operating systems.
498
257e9d03 499### egd
6ede7d73
DMSP
500
501Check for an entropy generating daemon.
b99c463d 502This source is ignored by the FIPS provider.
6ede7d73 503
257e9d03 504### rdcpu
6ede7d73 505
e8b597f3
OT
506Use the `RDSEED` or `RDRAND` command on x86 or `RNDRRS` command on aarch64
507if provided by the CPU.
6ede7d73 508
257e9d03 509### librandom
6ede7d73
DMSP
510
511Use librandom (not implemented yet).
b99c463d 512This source is ignored by the FIPS provider.
6ede7d73 513
257e9d03 514### none
6ede7d73
DMSP
515
516Disable automatic seeding. This is the default on some operating systems where
517no suitable entropy source exists, or no support for it is implemented yet.
b99c463d 518This option is ignored by the FIPS provider.
6ede7d73
DMSP
519
520For more information, see the section [Notes on random number generation][rng]
521at the end of this document.
522
523[rng]: #notes-on-random-number-generation
524
31214258
RS
525Setting the FIPS HMAC key
526-------------------------
527
528 --fips-key=value
529
530As part of its self-test validation, the FIPS module must verify itself
531by performing a SHA-256 HMAC computation on itself. The default key is
532the SHA256 value of "the holy handgrenade of antioch" and is sufficient
533for meeting the FIPS requirements.
534
535To change the key to a different value, use this flag. The value should
536be a hex string no more than 64 characters.
537
6ede7d73
DMSP
538Enable and Disable Features
539---------------------------
540
8c1cbc72
GN
541Feature options always come in pairs, an option to enable feature
542`xxxx`, and an option to disable it:
6ede7d73
DMSP
543
544 [ enable-xxxx | no-xxxx ]
545
546Whether a feature is enabled or disabled by default, depends on the feature.
547In the following list, always the non-default variant is documented: if
9afbb681
DDO
548feature `xxxx` is disabled by default then `enable-xxxx` is documented and
549if feature `xxxx` is enabled by default then `no-xxxx` is documented.
6ede7d73 550
257e9d03 551### no-afalgeng
6ede7d73
DMSP
552
553Don't build the AFALG engine.
554
555This option will be forced on a platform that does not support AFALG.
556
257e9d03 557### enable-ktls
6ede7d73
DMSP
558
559Build with Kernel TLS support.
560
561This option will enable the use of the Kernel TLS data-path, which can improve
562performance and allow for the use of sendfile and splice system calls on
563TLS sockets. The Kernel may use TLS accelerators if any are available on the
564system. This option will be forced off on systems that do not support the
565Kernel TLS data-path.
566
257e9d03 567### enable-asan
6ede7d73
DMSP
568
569Build with the Address sanitiser.
570
571This is a developer option only. It may not work on all platforms and should
572never be used in production environments. It will only work when used with
573gcc or clang and should be used in conjunction with the [no-shared](#no-shared)
574option.
575
d1a77041 576### enable-acvp-tests
4f2271d5 577
d1a77041 578Build support for Automated Cryptographic Validation Protocol (ACVP)
4f2271d5
SL
579tests.
580
581This is required for FIPS validation purposes. Certain ACVP tests require
582access to algorithm internals that are not normally accessible.
583Additional information related to ACVP can be found at
584<https://github.com/usnistgov/ACVP>.
585
ff88545e
VK
586### no-apps
587
588Do not build apps, e.g. the openssl program. This is handy for minimization.
589This option also disables tests.
590
257e9d03 591### no-asm
6ede7d73
DMSP
592
593Do not use assembler code.
594
595This should be viewed as debugging/troubleshooting option rather than for
596production use. On some platforms a small amount of assembler code may still
597be used even with this option.
598
257e9d03 599### no-async
6ede7d73
DMSP
600
601Do not build support for async operations.
602
257e9d03 603### no-autoalginit
6ede7d73
DMSP
604
605Don't automatically load all supported ciphers and digests.
606
607Typically OpenSSL will make available all of its supported ciphers and digests.
608For a statically linked application this may be undesirable if small executable
609size is an objective. This only affects libcrypto. Ciphers and digests will
9afbb681
DDO
610have to be loaded manually using `EVP_add_cipher()` and `EVP_add_digest()`
611if this option is used. This option will force a non-shared build.
6ede7d73 612
257e9d03 613### no-autoerrinit
6ede7d73
DMSP
614
615Don't automatically load all libcrypto/libssl error strings.
616
617Typically OpenSSL will automatically load human readable error strings. For a
618statically linked application this may be undesirable if small executable size
619is an objective.
620
12e96a23
TS
621### enable-brotli
622
623Build with support for brotli compression/decompression.
624
625### enable-brotli-dynamic
626
627Like the enable-brotli option, but has OpenSSL load the brotli library dynamically
628when needed.
629
630This is only supported on systems where loading of shared libraries is supported.
631
257e9d03 632### no-autoload-config
6ede7d73 633
9afbb681 634Don't automatically load the default `openssl.cnf` file.
6ede7d73
DMSP
635
636Typically OpenSSL will automatically load a system config file which configures
637default SSL options.
638
257e9d03 639### enable-buildtest-c++
6ede7d73
DMSP
640
641While testing, generate C++ buildtest files that simply check that the public
642OpenSSL header files are usable standalone with C++.
643
644Enabling this option demands extra care. For any compiler flag given directly
645as configuration option, you must ensure that it's valid for both the C and
646the C++ compiler. If not, the C++ build test will most likely break. As an
9afbb681 647alternative, you can use the language specific variables, `CFLAGS` and `CXXFLAGS`.
6ede7d73 648
d0364dcc
RS
649### --banner=text
650
651Use the specified text instead of the default banner at the end of
652configuration.
653
ecb09baf
RS
654### --w
655
656On platforms where the choice of 32-bit or 64-bit architecture
657is not explicitly specified, `Configure` will print a warning
658message and wait for a few seconds to let you interrupt the
659configuration. Using this flag skips the wait.
660
06f81af8
DDO
661### no-bulk
662
663Build only some minimal set of features.
664This is a developer option used internally for CI build tests of the project.
665
1eaf1fc3
P
666### no-cached-fetch
667
668Never cache algorithms when they are fetched from a provider. Normally, a
669provider indicates if the algorithms it supplies can be cached or not. Using
670this option will reduce run-time memory usage but it also introduces a
671significant performance penalty. This option is primarily designed to help
672with detecting incorrect reference counting.
673
257e9d03 674### no-capieng
6ede7d73
DMSP
675
676Don't build the CAPI engine.
677
678This option will be forced if on a platform that does not support CAPI.
679
257e9d03 680### no-cmp
6ede7d73 681
9afbb681
DDO
682Don't build support for Certificate Management Protocol (CMP)
683and Certificate Request Message Format (CRMF).
6ede7d73 684
257e9d03 685### no-cms
6ede7d73
DMSP
686
687Don't build support for Cryptographic Message Syntax (CMS).
688
257e9d03 689### no-comp
6ede7d73
DMSP
690
691Don't build support for SSL/TLS compression.
692
693If this option is enabled (the default), then compression will only work if
9afbb681 694the zlib or `zlib-dynamic` options are also chosen.
6ede7d73 695
257e9d03 696### enable-crypto-mdebug
6ede7d73 697
9afbb681 698This now only enables the `failed-malloc` feature.
6ede7d73 699
257e9d03 700### enable-crypto-mdebug-backtrace
6ede7d73
DMSP
701
702This is a no-op; the project uses the compiler's address/leak sanitizer instead.
703
257e9d03 704### no-ct
6ede7d73
DMSP
705
706Don't build support for Certificate Transparency (CT).
707
257e9d03 708### no-deprecated
6ede7d73
DMSP
709
710Don't build with support for deprecated APIs up until and including the version
711given with `--api` (or the current version, if `--api` wasn't specified).
712
257e9d03 713### no-dgram
6ede7d73
DMSP
714
715Don't build support for datagram based BIOs.
716
717Selecting this option will also force the disabling of DTLS.
718
956b4c75
VK
719### no-docs
720
721Don't build and install documentation, i.e. manual pages in various forms.
722
257e9d03 723### no-dso
6ede7d73
DMSP
724
725Don't build support for loading Dynamic Shared Objects (DSO)
726
257e9d03 727### enable-devcryptoeng
6ede7d73
DMSP
728
729Build the `/dev/crypto` engine.
730
731This option is automatically selected on the BSD platform, in which case it can
9afbb681 732be disabled with `no-devcryptoeng`.
6ede7d73 733
257e9d03 734### no-dynamic-engine
6ede7d73
DMSP
735
736Don't build the dynamically loaded engines.
737
738This only has an effect in a shared build.
739
257e9d03 740### no-ec
6ede7d73
DMSP
741
742Don't build support for Elliptic Curves.
743
257e9d03 744### no-ec2m
6ede7d73
DMSP
745
746Don't build support for binary Elliptic Curves
747
257e9d03 748### enable-ec_nistp_64_gcc_128
6ede7d73
DMSP
749
750Enable support for optimised implementations of some commonly used NIST
751elliptic curves.
752
753This option is only supported on platforms:
754
755 - with little-endian storage of non-byte types
756 - that tolerate misaligned memory references
757 - where the compiler:
758 - supports the non-standard type `__uint128_t`
759 - defines the built-in macro `__SIZEOF_INT128__`
760
257e9d03 761### enable-egd
6ede7d73
DMSP
762
763Build support for gathering entropy from the Entropy Gathering Daemon (EGD).
764
257e9d03 765### no-engine
6ede7d73
DMSP
766
767Don't build support for loading engines.
768
257e9d03 769### no-err
6ede7d73
DMSP
770
771Don't compile in any error strings.
772
257e9d03 773### enable-external-tests
6ede7d73
DMSP
774
775Enable building of integration with external test suites.
776
777This is a developer option and may not work on all platforms. The following
778external test suites are currently supported:
779
cede07dc 780 - GOST engine test suite
6ede7d73
DMSP
781 - Python PYCA/Cryptography test suite
782 - krb5 test suite
783
036cbb6b
DDO
784See the file [test/README-external.md](test/README-external.md)
785for further details.
6ede7d73 786
257e9d03 787### no-filenames
6ede7d73
DMSP
788
789Don't compile in filename and line number information (e.g. for errors and
790memory allocation).
791
f2ea01d9 792### enable-fips
6ede7d73 793
f2ea01d9 794Build (and install) the FIPS provider
6ede7d73 795
991a6bb5
SL
796### no-fips-securitychecks
797
798Don't perform FIPS module run-time checks related to enforcement of security
799parameters such as minimum security strength of keys.
800
257e9d03 801### enable-fuzz-libfuzzer, enable-fuzz-afl
6ede7d73
DMSP
802
803Build with support for fuzzing using either libfuzzer or AFL.
804
805These are developer options only. They may not work on all platforms and
806should never be used in production environments.
807
808See the file [fuzz/README.md](fuzz/README.md) for further details.
809
257e9d03 810### no-gost
6ede7d73
DMSP
811
812Don't build support for GOST based ciphersuites.
813
814Note that if this feature is enabled then GOST ciphersuites are only available
815if the GOST algorithms are also available through loading an externally supplied
816engine.
817
6b1f763c
VK
818### no-http
819
820Disable HTTP support.
821
257e9d03 822### no-legacy
6ede7d73
DMSP
823
824Don't build the legacy provider.
825
826Disabling this also disables the legacy algorithms: MD2 (already disabled by default).
827
257e9d03 828### no-makedepend
6ede7d73
DMSP
829
830Don't generate dependencies.
831
257e9d03 832### no-module
79e259e3 833
6ede7d73 834Don't build any dynamically loadable engines.
917a1b2e 835
9afbb681 836This also implies `no-dynamic-engine`.
917a1b2e 837
257e9d03 838### no-multiblock
917a1b2e 839
6ede7d73 840Don't build support for writing multiple records in one go in libssl
917a1b2e 841
6ede7d73 842Note: this is a different capability to the pipelining functionality.
917a1b2e 843
257e9d03 844### no-nextprotoneg
917a1b2e 845
6ede7d73 846Don't build support for the Next Protocol Negotiation (NPN) TLS extension.
c9f06e7f 847
257e9d03 848### no-ocsp
c9f06e7f 849
6ede7d73 850Don't build support for Online Certificate Status Protocol (OCSP).
b32b8961 851
257e9d03 852### no-padlockeng
2acd8ec7 853
6ede7d73 854Don't build the padlock engine.
2acd8ec7 855
257e9d03 856### no-hw-padlock
c9f06e7f 857
9afbb681 858As synonym for `no-padlockeng`. Deprecated and should not be used.
c9f06e7f 859
257e9d03 860### no-pic
b1fe6b43 861
6ede7d73 862Don't build with support for Position Independent Code.
b1fe6b43 863
257e9d03 864### no-pinshared
79e259e3 865
6ede7d73 866Don't pin the shared libraries.
79e259e3 867
6ede7d73
DMSP
868By default OpenSSL will attempt to stay in memory until the process exits.
869This is so that libcrypto and libssl can be properly cleaned up automatically
9afbb681
DDO
870via an `atexit()` handler. The handler is registered by libcrypto and cleans
871up both libraries. On some platforms the `atexit()` handler will run on unload of
ce451fb8
MSP
872libcrypto (if it has been dynamically loaded) rather than at process exit.
873
874This option can be used to stop OpenSSL from attempting to stay in memory until the
6ede7d73
DMSP
875process exits. This could lead to crashes if either libcrypto or libssl have
876already been unloaded at the point that the atexit handler is invoked, e.g. on a
9afbb681 877platform which calls `atexit()` on unload of the library, and libssl is unloaded
ce451fb8
MSP
878before libcrypto then a crash is likely to happen.
879
880Note that shared library pinning is not automatically disabled for static builds,
881i.e., `no-shared` does not imply `no-pinshared`. This may come as a surprise when
882linking libcrypto statically into a shared third-party library, because in this
883case the shared library will be pinned. To prevent this behaviour, you need to
884configure the static build using `no-shared` and `no-pinshared` together.
885
886Applications can suppress running of the `atexit()` handler at run time by
887using the `OPENSSL_INIT_NO_ATEXIT` option to `OPENSSL_init_crypto()`.
9afbb681 888See the man page for it for further details.
2acd8ec7 889
257e9d03 890### no-posix-io
2acd8ec7 891
6ede7d73 892Don't use POSIX IO capabilities.
2acd8ec7 893
257e9d03 894### no-psk
79e259e3 895
6ede7d73 896Don't build support for Pre-Shared Key based ciphersuites.
79e259e3 897
257e9d03 898### no-rdrand
79e259e3 899
6ede7d73 900Don't use hardware RDRAND capabilities.
79e259e3 901
257e9d03 902### no-rfc3779
5bb9e2b4 903
6ede7d73
DMSP
904Don't build support for RFC3779, "X.509 Extensions for IP Addresses and
905AS Identifiers".
79e259e3 906
257e9d03 907### sctp
2acd8ec7 908
6ede7d73 909Build support for Stream Control Transmission Protocol (SCTP).
2acd8ec7 910
257e9d03 911### no-shared
2acd8ec7 912
6ede7d73 913Do not create shared libraries, only static ones.
2acd8ec7 914
6ede7d73 915See [Notes on shared libraries](#notes-on-shared-libraries) below.
2acd8ec7 916
6399d785
XY
917### no-sm2-precomp
918
919Disable using the SM2 precomputed table on aarch64 to make the library smaller.
920
257e9d03 921### no-sock
2acd8ec7 922
6ede7d73 923Don't build support for socket BIOs.
2acd8ec7 924
257e9d03 925### no-srp
2acd8ec7 926
6ede7d73
DMSP
927Don't build support for Secure Remote Password (SRP) protocol or
928SRP based ciphersuites.
2acd8ec7 929
257e9d03 930### no-srtp
b32b8961 931
6ede7d73 932Don't build Secure Real-Time Transport Protocol (SRTP) support.
b32b8961 933
257e9d03 934### no-sse2
2acd8ec7 935
6ede7d73 936Exclude SSE2 code paths from 32-bit x86 assembly modules.
79e259e3 937
6ede7d73
DMSP
938Normally SSE2 extension is detected at run-time, but the decision whether or not
939the machine code will be executed is taken solely on CPU capability vector. This
940means that if you happen to run OS kernel which does not support SSE2 extension
941on Intel P4 processor, then your application might be exposed to "illegal
942instruction" exception. There might be a way to enable support in kernel, e.g.
9afbb681 943FreeBSD kernel can be compiled with `CPU_ENABLE_SSE`, and there is a way to
6ede7d73 944disengage SSE2 code paths upon application start-up, but if you aim for wider
9afbb681
DDO
945"audience" running such kernel, consider `no-sse2`. Both the `386` and `no-asm`
946options imply `no-sse2`.
79e259e3 947
726f92e0 948### no-ssl-trace
79e259e3 949
726f92e0 950Don't build with SSL Trace capabilities.
1af66bb7 951
726f92e0
ACB
952This removes the `-trace` option from `s_client` and `s_server`, and omits the
953`SSL_trace()` function from libssl.
954
955Disabling `ssl-trace` may provide a small reduction in libssl binary size.
1af66bb7 956
257e9d03 957### no-static-engine
1af66bb7 958
6ede7d73 959Don't build the statically linked engines.
1af66bb7 960
6ede7d73 961This only has an impact when not built "shared".
1af66bb7 962
257e9d03 963### no-stdio
1af66bb7 964
3a0b3cc9 965Don't use anything from the C header file `stdio.h` that makes use of the `FILE`
6ede7d73
DMSP
966type. Only libcrypto and libssl can be built in this way. Using this option will
967suppress building the command line applications. Additionally, since the OpenSSL
968tests also use the command line applications, the tests will also be skipped.
b1fe6b43 969
257e9d03 970### no-tests
79e259e3 971
6ede7d73 972Don't build test programs or run any tests.
79e259e3 973
a3e53d56
TS
974### enable-tfo
975
976Build with support for TCP Fast Open (RFC7413). Supported on Linux, macOS and FreeBSD.
977
8a764202 978### no-quic
30b01329 979
8a764202 980Don't build with QUIC support.
30b01329 981
257e9d03 982### no-threads
6616429d 983
6ede7d73 984Don't build with support for multi-threaded applications.
2e996acf 985
257e9d03 986### threads
2acd8ec7 987
6ede7d73 988Build with support for multi-threaded applications. Most platforms will enable
8c1cbc72 989this by default. However, if on a platform where this is not the case then this
6ede7d73 990will usually require additional system-dependent options!
2e996acf 991
6ede7d73 992See [Notes on multi-threading](#notes-on-multi-threading) below.
e3d9a6b5 993
4574a7fd
ÄŒK
994### no-thread-pool
995
996Don't build with support for thread pool functionality.
997
998### thread-pool
999
1000Build with thread pool functionality. If enabled, OpenSSL algorithms may
1001use the thread pool to perform parallel computation. This option in itself
1002does not enable OpenSSL to spawn new threads. Currently the only supported
1003thread pool mechanism is the default thread pool.
1004
1005### no-default-thread-pool
1006
1007Don't build with support for default thread pool functionality.
1008
1009### default-thread-pool
1010
1011Build with default thread pool functionality. If enabled, OpenSSL may create
1012and manage threads up to a maximum number of threads authorized by the
1013application. Supported on POSIX compliant platforms and Windows.
1014
257e9d03 1015### enable-trace
b32b8961 1016
6ede7d73 1017Build with support for the integrated tracing api.
2e996acf 1018
6ede7d73 1019See manual pages OSSL_trace_set_channel(3) and OSSL_trace_enabled(3) for details.
2e996acf 1020
257e9d03 1021### no-ts
a73d990e 1022
6ede7d73 1023Don't build Time Stamping (TS) Authority support.
2e996acf 1024
257e9d03 1025### enable-ubsan
2e996acf 1026
6ede7d73 1027Build with the Undefined Behaviour sanitiser (UBSAN).
2e996acf 1028
6ede7d73 1029This is a developer option only. It may not work on all platforms and should
9afbb681
DDO
1030never be used in production environments. It will only work when used with
1031gcc or clang and should be used in conjunction with the `-DPEDANTIC` option
6ede7d73 1032(or the `--strict-warnings` option).
d40b0622 1033
257e9d03 1034### no-ui-console
2e996acf 1035
301ea192 1036Don't build with the User Interface (UI) console method
b1fe6b43 1037
301ea192 1038The User Interface console method enables text based console prompts.
b3e718e2 1039
257e9d03 1040### enable-unit-test
79e259e3 1041
6ede7d73 1042Enable additional unit test APIs.
2acd8ec7 1043
6ede7d73 1044This should not typically be used in production deployments.
7c03bb9f 1045
257e9d03 1046### no-uplink
2acd8ec7 1047
6ede7d73 1048Don't build support for UPLINK interface.
2acd8ec7 1049
257e9d03 1050### enable-weak-ssl-ciphers
b0940b33 1051
6ede7d73 1052Build support for SSL/TLS ciphers that are considered "weak"
fa28bfd6 1053
6ede7d73 1054Enabling this includes for example the RC4 based ciphersuites.
fa28bfd6 1055
257e9d03 1056### zlib
fa28bfd6 1057
6ede7d73 1058Build with support for zlib compression/decompression.
fa28bfd6 1059
257e9d03 1060### zlib-dynamic
fa28bfd6 1061
6ede7d73
DMSP
1062Like the zlib option, but has OpenSSL load the zlib library dynamically
1063when needed.
fa28bfd6 1064
6ede7d73 1065This is only supported on systems where loading of shared libraries is supported.
fa28bfd6 1066
caf9317d
TS
1067### enable-zstd
1068
1069Build with support for Zstd compression/decompression.
1070
1071### enable-zstd-dynamic
1072
1073Like the enable-zstd option, but has OpenSSL load the Zstd library dynamically
1074when needed.
1075
1076This is only supported on systems where loading of shared libraries is supported.
1077
257e9d03 1078### 386
fa28bfd6 1079
6ede7d73 1080In 32-bit x86 builds, use the 80386 instruction set only in assembly modules
fa28bfd6 1081
6ede7d73
DMSP
1082The default x86 code is more efficient, but requires at least an 486 processor.
1083Note: This doesn't affect compiler generated code, so this option needs to be
1084accompanied by a corresponding compiler-specific option.
fa28bfd6 1085
257e9d03 1086### no-{protocol}
bf01fbbf 1087
6ede7d73 1088 no-{ssl|ssl3|tls|tls1|tls1_1|tls1_2|tls1_3|dtls|dtls1|dtls1_2}
4fd53220 1089
6ede7d73 1090Don't build support for negotiating the specified SSL/TLS protocol.
b3e718e2 1091
9afbb681
DDO
1092If `no-tls` is selected then all of `tls1`, `tls1_1`, `tls1_2` and `tls1_3`
1093are disabled.
1094Similarly `no-dtls` will disable `dtls1` and `dtls1_2`. The `no-ssl` option is
1095synonymous with `no-ssl3`. Note this only affects version negotiation.
6ede7d73
DMSP
1096OpenSSL will still provide the methods for applications to explicitly select
1097the individual protocol versions.
b3e718e2 1098
257e9d03 1099### no-{protocol}-method
b3e718e2 1100
5f18dc7f 1101 no-{ssl3|tls1|tls1_1|tls1_2|dtls1|dtls1_2}-method
b3e718e2 1102
9afbb681 1103Analogous to `no-{protocol}` but in addition do not build the methods for
6ede7d73 1104applications to explicitly select individual protocol versions. Note that there
9afbb681 1105is no `no-tls1_3-method` option because there is no application method for
6ede7d73 1106TLSv1.3.
b3e718e2 1107
6ede7d73 1108Using individual protocol methods directly is deprecated. Applications should
9afbb681 1109use `TLS_method()` instead.
b3e718e2 1110
257e9d03 1111### enable-{algorithm}
b3e718e2 1112
6ede7d73 1113 enable-{md2|rc5}
b3e718e2 1114
6ede7d73 1115Build with support for the specified algorithm.
b3e718e2 1116
257e9d03 1117### no-{algorithm}
b3e718e2 1118
6ede7d73
DMSP
1119 no-{aria|bf|blake2|camellia|cast|chacha|cmac|
1120 des|dh|dsa|ecdh|ecdsa|idea|md4|mdc2|ocb|
1121 poly1305|rc2|rc4|rmd160|scrypt|seed|
1122 siphash|siv|sm2|sm3|sm4|whirlpool}
d0631327 1123
6ede7d73 1124Build without support for the specified algorithm.
d0631327 1125
9afbb681 1126The `ripemd` algorithm is deprecated and if used is synonymous with `rmd160`.
d0631327 1127
257e9d03 1128### Compiler-specific options
d0631327 1129
6ede7d73 1130 -Dxxx, -Ixxx, -Wp, -lxxx, -Lxxx, -Wl, -rpath, -R, -framework, -static
d0631327 1131
6ede7d73
DMSP
1132These system specific options will be recognised and passed through to the
1133compiler to allow you to define preprocessor symbols, specify additional
1134libraries, library directories or other compiler options. It might be worth
1135noting that some compilers generate code specifically for processor the
1136compiler currently executes on. This is not necessarily what you might have
1137in mind, since it might be unsuitable for execution on other, typically older,
1138processor. Consult your compiler documentation.
1139
1140Take note of the [Environment Variables](#environment-variables) documentation
1141below and how these flags interact with those variables.
1142
1143 -xxx, +xxx, /xxx
1144
1145Additional options that are not otherwise recognised are passed through as
1146they are to the compiler as well. Unix-style options beginning with a
af33b200 1147`-` or `+` and Windows-style options beginning with a `/` are recognised.
6ede7d73
DMSP
1148Again, consult your compiler documentation.
1149
1150If the option contains arguments separated by spaces, then the URL-style
9afbb681
DDO
1151notation `%20` can be used for the space character in order to avoid having
1152to quote the option. For example, `-opt%20arg` gets expanded to `-opt arg`.
6ede7d73
DMSP
1153In fact, any ASCII character can be encoded as %xx using its hexadecimal
1154encoding.
1155
1156Take note of the [Environment Variables](#environment-variables) documentation
1157below and how these flags interact with those variables.
1158
257e9d03 1159### Environment Variables
6ede7d73
DMSP
1160
1161 VAR=value
1162
9afbb681 1163Assign the given value to the environment variable `VAR` for `Configure`.
6ede7d73
DMSP
1164
1165These work just like normal environment variable assignments, but are supported
1166on all platforms and are confined to the configuration scripts only.
1167These assignments override the corresponding value in the inherited environment,
1168if there is one.
1169
3a0b3cc9 1170The following variables are used as "`make` variables" and can be used as an
6ede7d73
DMSP
1171alternative to giving preprocessor, compiler and linker options directly as
1172configuration. The following variables are supported:
1173
1174 AR The static library archiver.
1175 ARFLAGS Flags for the static library archiver.
1176 AS The assembler compiler.
1177 ASFLAGS Flags for the assembler compiler.
1178 CC The C compiler.
1179 CFLAGS Flags for the C compiler.
1180 CXX The C++ compiler.
1181 CXXFLAGS Flags for the C++ compiler.
1182 CPP The C/C++ preprocessor.
1183 CPPFLAGS Flags for the C/C++ preprocessor.
1184 CPPDEFINES List of CPP macro definitions, separated
1185 by a platform specific character (':' or
1186 space for Unix, ';' for Windows, ',' for
1187 VMS). This can be used instead of using
1188 -D (or what corresponds to that on your
1189 compiler) in CPPFLAGS.
1190 CPPINCLUDES List of CPP inclusion directories, separated
1191 the same way as for CPPDEFINES. This can
1192 be used instead of -I (or what corresponds
1193 to that on your compiler) in CPPFLAGS.
1194 HASHBANGPERL Perl invocation to be inserted after '#!'
1195 in public perl scripts (only relevant on
1196 Unix).
1197 LD The program linker (not used on Unix, $(CC)
1198 is used there).
1199 LDFLAGS Flags for the shared library, DSO and
1200 program linker.
1201 LDLIBS Extra libraries to use when linking.
1202 Takes the form of a space separated list
1203 of library specifications on Unix and
1204 Windows, and as a comma separated list of
1205 libraries on VMS.
1206 RANLIB The library archive indexer.
1207 RC The Windows resource compiler.
1208 RCFLAGS Flags for the Windows resource compiler.
1209 RM The command to remove files and directories.
1210
1211These cannot be mixed with compiling/linking flags given on the command line.
1212In other words, something like this isn't permitted.
1213
16b0e0fc 1214 $ ./Configure -DFOO CPPFLAGS=-DBAR -DCOOKIE
6ede7d73
DMSP
1215
1216Backward compatibility note:
1217
1218To be compatible with older configuration scripts, the environment variables
1219are ignored if compiling/linking flags are given on the command line, except
1220for the following:
1221
1222 AR, CC, CXX, CROSS_COMPILE, HASHBANGPERL, PERL, RANLIB, RC, and WINDRES
1223
9afbb681 1224For example, the following command will not see `-DBAR`:
6ede7d73 1225
16b0e0fc 1226 $ CPPFLAGS=-DBAR ./Configure -DCOOKIE
6ede7d73
DMSP
1227
1228However, the following will see both set variables:
1229
16b0e0fc 1230 $ CC=gcc CROSS_COMPILE=x86_64-w64-mingw32- ./Configure -DCOOKIE
6ede7d73 1231
9afbb681 1232If `CC` is set, it is advisable to also set `CXX` to ensure both the C and C++
6ede7d73 1233compiler are in the same "family". This becomes relevant with
9afbb681 1234`enable-external-tests` and `enable-buildtest-c++`.
6ede7d73 1235
257e9d03 1236### Reconfigure
6ede7d73
DMSP
1237
1238 reconf
1239 reconfigure
1240
1241Reconfigure from earlier data.
1242
16b0e0fc 1243This fetches the previous command line options and environment from data
9afbb681 1244saved in `configdata.pm` and runs the configuration process again, using
16b0e0fc 1245these options and environment. Note: NO other option is permitted together
9afbb681 1246with `reconf`. Note: The original configuration saves away values for ALL
16b0e0fc
RL
1247environment variables that were used, and if they weren't defined, they are
1248still saved away with information that they weren't originally defined.
1249This information takes precedence over environment variables that are
1250defined when reconfiguring.
6ede7d73
DMSP
1251
1252Displaying configuration data
1253-----------------------------
1254
1255The configuration script itself will say very little, and finishes by
9afbb681 1256creating `configdata.pm`. This perl module can be loaded by other scripts
6ede7d73
DMSP
1257to find all the configuration data, and it can also be used as a script to
1258display all sorts of configuration data in a human readable form.
1259
1260For more information, please do:
1261
1262 $ ./configdata.pm --help # Unix
1263
1264or
1265
1266 $ perl configdata.pm --help # Windows and VMS
1267
1268Installation Steps in Detail
1269============================
1270
1271Configure OpenSSL
1272-----------------
1273
257e9d03 1274### Automatic Configuration
6ede7d73 1275
92115096
RS
1276In previous version, the `config` script determined the platform type and
1277compiler and then called `Configure`. Starting with this release, they are
1278the same.
6ede7d73 1279
257e9d03 1280#### Unix / Linux / macOS
6ede7d73 1281
a4ffb33e 1282 $ ./Configure [options...]
6ede7d73 1283
257e9d03 1284#### OpenVMS
6ede7d73 1285
a4ffb33e 1286 $ perl Configure [options...]
6ede7d73 1287
257e9d03 1288#### Windows
6ede7d73 1289
a4ffb33e 1290 $ perl Configure [options...]
6ede7d73 1291
257e9d03 1292### Manual Configuration
6ede7d73
DMSP
1293
1294OpenSSL knows about a range of different operating system, hardware and
1295compiler combinations. To see the ones it knows about, run
1296
16b0e0fc 1297 $ ./Configure LIST # Unix
6ede7d73
DMSP
1298
1299or
1300
16b0e0fc 1301 $ perl Configure LIST # All other platforms
6ede7d73
DMSP
1302
1303For the remainder of this text, the Unix form will be used in all examples.
1304Please use the appropriate form for your platform.
1305
1306Pick a suitable name from the list that matches your system. For most
9afbb681 1307operating systems there is a choice between using cc or gcc.
6ede7d73 1308When you have identified your system (and if necessary compiler) use this
9afbb681 1309name as the argument to `Configure`. For example, a `linux-elf` user would
6ede7d73
DMSP
1310run:
1311
a4ffb33e 1312 $ ./Configure linux-elf [options...]
6ede7d73 1313
257e9d03 1314### Creating your own Configuration
6ede7d73
DMSP
1315
1316If your system isn't listed, you will have to create a configuration
a4ffb33e
RS
1317file named `Configurations/YOURFILENAME.conf` (replace `YOURFILENAME`
1318with a filename of your choosing) and add the correct
6ede7d73 1319configuration for your system. See the available configs as examples
036cbb6b
DDO
1320and read [Configurations/README.md](Configurations/README.md) and
1321[Configurations/README-design.md](Configurations/README-design.md)
3a0b3cc9 1322for more information.
6ede7d73 1323
9afbb681 1324The generic configurations `cc` or `gcc` should usually work on 32 bit
6ede7d73
DMSP
1325Unix-like systems.
1326
9afbb681
DDO
1327`Configure` creates a build file (`Makefile` on Unix, `makefile` on Windows
1328and `descrip.mms` on OpenVMS) from a suitable template in `Configurations/`,
1329and defines various macros in `include/openssl/configuration.h` (generated
1330from `include/openssl/configuration.h.in`.
6ede7d73 1331
aa2d7e0e
RL
1332If none of the generated build files suit your purpose, it's possible to
1333write your own build file template and give its name through the environment
1334variable `BUILDFILE`. For example, Ninja build files could be supported by
1335writing `Configurations/build.ninja.tmpl` and then configure with `BUILDFILE`
1336set like this (Unix syntax shown, you'll have to adapt for other platforms):
1337
1338 $ BUILDFILE=build.ninja perl Configure [options...]
1339
257e9d03 1340### Out of Tree Builds
6ede7d73
DMSP
1341
1342OpenSSL can be configured to build in a build directory separate from the
1343source code directory. It's done by placing yourself in some other
1344directory and invoking the configuration commands from there.
1345
257e9d03 1346#### Unix example
6ede7d73
DMSP
1347
1348 $ mkdir /var/tmp/openssl-build
1349 $ cd /var/tmp/openssl-build
a4ffb33e 1350 $ /PATH/TO/OPENSSL/SOURCE/Configure [options...]
6ede7d73 1351
257e9d03 1352#### OpenVMS example
6ede7d73
DMSP
1353
1354 $ set default sys$login:
1355 $ create/dir [.tmp.openssl-build]
1356 $ set default [.tmp.openssl-build]
a4ffb33e 1357 $ perl D:[PATH.TO.OPENSSL.SOURCE]Configure [options...]
6ede7d73 1358
257e9d03 1359#### Windows example
6ede7d73
DMSP
1360
1361 $ C:
1362 $ mkdir \temp-openssl
1363 $ cd \temp-openssl
a4ffb33e 1364 $ perl d:\PATH\TO\OPENSSL\SOURCE\Configure [options...]
6ede7d73 1365
9afbb681 1366Paths can be relative just as well as absolute. `Configure` will do its best
6ede7d73
DMSP
1367to translate them to relative paths whenever possible.
1368
6ede7d73
DMSP
1369Build OpenSSL
1370-------------
1371
1372Build OpenSSL by running:
1373
1374 $ make # Unix
1375 $ mms ! (or mmk) OpenVMS
1376 $ nmake # Windows
1377
9afbb681 1378This will build the OpenSSL libraries (`libcrypto.a` and `libssl.a` on
6ede7d73 1379Unix, corresponding on other platforms) and the OpenSSL binary
9afbb681
DDO
1380(`openssl`). The libraries will be built in the top-level directory,
1381and the binary will be in the `apps/` subdirectory.
6ede7d73
DMSP
1382
1383If the build fails, take a look at the [Build Failures](#build-failures)
1384subsection of the [Troubleshooting](#troubleshooting) section.
1385
1386Test OpenSSL
1387------------
1388
1389After a successful build, and before installing, the libraries should
1390be tested. Run:
1391
1392 $ make test # Unix
1393 $ mms test ! OpenVMS
1394 $ nmake test # Windows
1395
1396**Warning:** you MUST run the tests from an unprivileged account (or disable
1397your privileges temporarily if your platform allows it).
1398
036cbb6b
DDO
1399See [test/README.md](test/README.md) for further details how run tests.
1400
1401See [test/README-dev.md](test/README-dev.md) for guidelines on adding tests.
6ede7d73 1402
6ede7d73
DMSP
1403Install OpenSSL
1404---------------
1405
1406If everything tests ok, install OpenSSL with
1407
1408 $ make install # Unix
1409 $ mms install ! OpenVMS
1410 $ nmake install # Windows
1411
1412Note that in order to perform the install step above you need to have
1413appropriate permissions to write to the installation directory.
1414
1415The above commands will install all the software components in this
9afbb681 1416directory tree under `<PREFIX>` (the directory given with `--prefix` or
6ede7d73
DMSP
1417its default):
1418
257e9d03 1419### Unix / Linux / macOS
6ede7d73
DMSP
1420
1421 bin/ Contains the openssl binary and a few other
1422 utility scripts.
1423 include/openssl
1424 Contains the header files needed if you want
1425 to build your own programs that use libcrypto
1426 or libssl.
1427 lib Contains the OpenSSL library files.
1428 lib/engines Contains the OpenSSL dynamically loadable engines.
1429
1430 share/man/man1 Contains the OpenSSL command line man-pages.
1431 share/man/man3 Contains the OpenSSL library calls man-pages.
1432 share/man/man5 Contains the OpenSSL configuration format man-pages.
1433 share/man/man7 Contains the OpenSSL other misc man-pages.
1434
1435 share/doc/openssl/html/man1
1436 share/doc/openssl/html/man3
1437 share/doc/openssl/html/man5
1438 share/doc/openssl/html/man7
1439 Contains the HTML rendition of the man-pages.
1440
257e9d03 1441### OpenVMS
6ede7d73 1442
d8c1cafb 1443'arch' is replaced with the architecture name, `ALPHA` or `IA64`,
9afbb681 1444'sover' is replaced with the shared library version (`0101` for 1.1), and
6ede7d73
DMSP
1445'pz' is replaced with the pointer size OpenSSL was built with:
1446
1447 [.EXE.'arch'] Contains the openssl binary.
1448 [.EXE] Contains a few utility scripts.
1449 [.include.openssl]
1450 Contains the header files needed if you want
1451 to build your own programs that use libcrypto
1452 or libssl.
1453 [.LIB.'arch'] Contains the OpenSSL library files.
1454 [.ENGINES'sover''pz'.'arch']
1455 Contains the OpenSSL dynamically loadable engines.
1456 [.SYS$STARTUP] Contains startup, login and shutdown scripts.
1457 These define appropriate logical names and
1458 command symbols.
1459 [.SYSTEST] Contains the installation verification procedure.
1460 [.HTML] Contains the HTML rendition of the manual pages.
1461
257e9d03 1462### Additional Directories
6ede7d73
DMSP
1463
1464Additionally, install will add the following directories under
1465OPENSSLDIR (the directory given with `--openssldir` or its default)
1466for you convenience:
1467
1468 certs Initially empty, this is the default location
1469 for certificate files.
1470 private Initially empty, this is the default location
1471 for private key files.
1472 misc Various scripts.
1473
1474The installation directory should be appropriately protected to ensure
1475unprivileged users cannot make changes to OpenSSL binaries or files, or
1476install engines. If you already have a pre-installed version of OpenSSL as
1477part of your Operating System it is recommended that you do not overwrite
1478the system version and instead install to somewhere else.
1479
1480Package builders who want to configure the library for standard locations,
1481but have the package installed somewhere else so that it can easily be
1482packaged, can use
1483
3a0b3cc9
DDO
1484 $ make DESTDIR=/tmp/package-root install # Unix
1485 $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS
6ede7d73
DMSP
1486
1487The specified destination directory will be prepended to all installation
1488target paths.
1489
257e9d03
RS
1490Compatibility issues with previous OpenSSL versions
1491---------------------------------------------------
6ede7d73 1492
257e9d03 1493### COMPILING existing applications
6ede7d73
DMSP
1494
1495Starting with version 1.1.0, OpenSSL hides a number of structures that were
1496previously open. This includes all internal libssl structures and a number
1497of EVP types. Accessor functions have been added to allow controlled access
1498to the structures' data.
1499
1500This means that some software needs to be rewritten to adapt to the new ways
1501of doing things. This often amounts to allocating an instance of a structure
1502explicitly where you could previously allocate them on the stack as automatic
1503variables, and using the provided accessor functions where you would previously
1504access a structure's field directly.
1505
1506Some APIs have changed as well. However, older APIs have been preserved when
1507possible.
1508
41149648
RL
1509Post-installation Notes
1510-----------------------
1511
1512With the default OpenSSL installation comes a FIPS provider module, which
1513needs some post-installation attention, without which it will not be usable.
1514This involves using the following command:
1515
270540fd 1516 $ openssl fipsinstall
41149648
RL
1517
1518See the openssl-fipsinstall(1) manual for details and examples.
1519
6ede7d73
DMSP
1520Advanced Build Options
1521======================
1522
6ede7d73
DMSP
1523Environment Variables
1524---------------------
1525
1526A number of environment variables can be used to provide additional control
1527over the build process. Typically these should be defined prior to running
9afbb681 1528`Configure`. Not all environment variables are relevant to all platforms.
6ede7d73
DMSP
1529
1530 AR
1531 The name of the ar executable to use.
1532
1533 BUILDFILE
1534 Use a different build file name than the platform default
1535 ("Makefile" on Unix-like platforms, "makefile" on native Windows,
1536 "descrip.mms" on OpenVMS). This requires that there is a
036cbb6b
DDO
1537 corresponding build file template.
1538 See [Configurations/README.md](Configurations/README.md)
6ede7d73
DMSP
1539 for further information.
1540
1541 CC
1542 The compiler to use. Configure will attempt to pick a default
1543 compiler for your platform but this choice can be overridden
1544 using this variable. Set it to the compiler executable you wish
9afbb681 1545 to use, e.g. gcc or clang.
6ede7d73
DMSP
1546
1547 CROSS_COMPILE
1548 This environment variable has the same meaning as for the
1549 "--cross-compile-prefix" Configure flag described above. If both
1550 are set then the Configure flag takes precedence.
1551
92115096
RS
1552 HASHBANGPERL
1553 The command string for the Perl executable to insert in the
1554 #! line of perl scripts that will be publicly installed.
1555 Default: /usr/bin/env perl
1556 Note: the value of this variable is added to the same scripts
1557 on all platforms, but it's only relevant on Unix-like platforms.
1558
1559 KERNEL_BITS
1560 This can be the value `32` or `64` to specify the architecture
1561 when it is not "obvious" to the configuration. It should generally
1562 not be necessary to specify this environment variable.
1563
6ede7d73
DMSP
1564 NM
1565 The name of the nm executable to use.
1566
1567 OPENSSL_LOCAL_CONFIG_DIR
1568 OpenSSL comes with a database of information about how it
1569 should be built on different platforms as well as build file
1570 templates for those platforms. The database is comprised of
1571 ".conf" files in the Configurations directory. The build
1572 file templates reside there as well as ".tmpl" files. See the
036cbb6b
DDO
1573 file [Configurations/README.md](Configurations/README.md)
1574 for further information about the format of ".conf" files
1575 as well as information on the ".tmpl" files.
6ede7d73 1576 In addition to the standard ".conf" and ".tmpl" files, it is
036cbb6b
DDO
1577 possible to create your own ".conf" and ".tmpl" files and
1578 store them locally, outside the OpenSSL source tree.
1579 This environment variable can be set to the directory where
1580 these files are held and will be considered by Configure
1581 before it looks in the standard directories.
6ede7d73
DMSP
1582
1583 PERL
1584 The name of the Perl executable to use when building OpenSSL.
eb4129e1 1585 Only needed if building should use a different Perl executable
16b0e0fc 1586 than what is used to run the Configure script.
6ede7d73 1587
92115096
RS
1588 RANLIB
1589 The name of the ranlib executable to use.
6ede7d73
DMSP
1590
1591 RC
1592 The name of the rc executable to use. The default will be as
1593 defined for the target platform in the ".conf" file. If not
1594 defined then "windres" will be used. The WINDRES environment
1595 variable is synonymous to this. If both are defined then RC
1596 takes precedence.
1597
6ede7d73
DMSP
1598 WINDRES
1599 See RC.
1600
6ede7d73
DMSP
1601Makefile Targets
1602----------------
1603
9afbb681 1604The `Configure` script generates a Makefile in a format relevant to the specific
6ede7d73
DMSP
1605platform. The Makefiles provide a number of targets that can be used. Not all
1606targets may be available on all platforms. Only the most common targets are
1607described here. Examine the Makefiles themselves for the full list.
1608
1609 all
1610 The target to build all the software components and
1611 documentation.
1612
1613 build_sw
1614 Build all the software components.
1615 THIS IS THE DEFAULT TARGET.
1616
1617 build_docs
1618 Build all documentation components.
1619
1620 clean
1621 Remove all build artefacts and return the directory to a "clean"
1622 state.
1623
1624 depend
1625 Rebuild the dependencies in the Makefiles. This is a legacy
1626 option that no longer needs to be used since OpenSSL 1.1.0.
1627
1628 install
1629 Install all OpenSSL components.
1630
1631 install_sw
1632 Only install the OpenSSL software components.
1633
1634 install_docs
1635 Only install the OpenSSL documentation components.
1636
1637 install_man_docs
1638 Only install the OpenSSL man pages (Unix only).
1639
1640 install_html_docs
8c1cbc72 1641 Only install the OpenSSL HTML documentation.
cad80959 1642
b19b9830
RL
1643 install_fips
1644 Install the FIPS provider module configuration file.
6ede7d73
DMSP
1645
1646 list-tests
1647 Prints a list of all the self test names.
1648
1649 test
1650 Build and run the OpenSSL self tests.
1651
1652 uninstall
1653 Uninstall all OpenSSL components.
1654
1655 reconfigure
1656 reconf
1657 Re-run the configuration process, as exactly as the last time
1658 as possible.
1659
1660 update
1661 This is a developer option. If you are developing a patch for
1662 OpenSSL you may need to use this if you want to update
1663 automatically generated files; add new error codes or add new
1664 (or change the visibility of) public API functions. (Unix only).
1665
1666Running Selected Tests
1667----------------------
1668
3a0b3cc9
DDO
1669You can specify a set of tests to be performed
1670using the `make` variable `TESTS`.
6ede7d73 1671
3a0b3cc9
DDO
1672See the section [Running Selected Tests of
1673test/README.md](test/README.md#running-selected-tests).
6ede7d73
DMSP
1674
1675Troubleshooting
1676===============
1677
1678Configuration Problems
1679----------------------
1680
257e9d03 1681### Selecting the correct target
6ede7d73 1682
16b0e0fc 1683The `./Configure` script tries hard to guess your operating system, but in some
6ede7d73
DMSP
1684cases it does not succeed. You will see a message like the following:
1685
16b0e0fc 1686 $ ./Configure
6ede7d73 1687 Operating system: x86-whatever-minix
1dc1ea18 1688 This system (minix) is not supported. See file INSTALL.md for details.
6ede7d73 1689
9afbb681
DDO
1690Even if the automatic target selection by the `./Configure` script fails,
1691chances are that you still might find a suitable target in the `Configurations`
1692directory, which you can supply to the `./Configure` command,
1693possibly after some adjustment.
6ede7d73 1694
9afbb681 1695The `Configurations/` directory contains a lot of examples of such targets.
6c8149df 1696The main configuration file is [10-main.conf], which contains all targets that
6ede7d73
DMSP
1697are officially supported by the OpenSSL team. Other configuration files contain
1698targets contributed by other OpenSSL users. The list of targets can be found in
1699a Perl list `my %targets = ( ... )`.
1700
1701 my %targets = (
1702 ...
1703 "target-name" => {
1704 inherit_from => [ "base-target" ],
1705 CC => "...",
1706 cflags => add("..."),
1707 asm_arch => '...',
1708 perlasm_scheme => "...",
1709 },
1710 ...
1711 )
1712
16b0e0fc 1713If you call `./Configure` without arguments, it will give you a list of all
6ede7d73 1714known targets. Using `grep`, you can lookup the target definition in the
9afbb681
DDO
1715`Configurations/` directory. For example the `android-x86_64` can be found in
1716[Configurations/15-android.conf](Configurations/15-android.conf).
6ede7d73
DMSP
1717
1718The directory contains two README files, which explain the general syntax and
9afbb681 1719design of the configuration files.
6ede7d73 1720
036cbb6b
DDO
1721 - [Configurations/README.md](Configurations/README.md)
1722 - [Configurations/README-design.md](Configurations/README-design.md)
6ede7d73 1723
6c8149df
DMSP
1724If you need further help, try to search the [openssl-users] mailing list
1725or the [GitHub Issues] for existing solutions. If you don't find anything,
1726you can [raise an issue] to ask a question yourself.
6ede7d73 1727
6c8149df 1728More about our support resources can be found in the [SUPPORT] file.
6ede7d73 1729
257e9d03 1730### Configuration Errors
6ede7d73 1731
16b0e0fc 1732If the `./Configure` or `./Configure` command fails with an error message,
6ede7d73
DMSP
1733read the error message carefully and try to figure out whether you made
1734a mistake (e.g., by providing a wrong option), or whether the script is
1735working incorrectly. If you think you encountered a bug, please
6c8149df 1736[raise an issue] on GitHub to file a bug report.
6ede7d73
DMSP
1737
1738Along with a short description of the bug, please provide the complete
1739configure command line and the relevant output including the error message.
1740
e304aa87 1741Note: To make the output readable, please add a 'code fence' (three backquotes
6ede7d73
DMSP
1742` ``` ` on a separate line) before and after your output:
1743
1744 ```
b0d5c1cb 1745 ./Configure [your arguments...]
6ede7d73
DMSP
1746
1747 [output...]
1748
1749 ```
1750
6ede7d73
DMSP
1751Build Failures
1752--------------
1753
1754If the build fails, look carefully at the output. Try to locate and understand
1755the error message. It might be that the compiler is already telling you
1756exactly what you need to do to fix your problem.
1757
1758There may be reasons for the failure that aren't problems in OpenSSL itself,
1759for example if the compiler reports missing standard or third party headers.
1760
1761If the build succeeded previously, but fails after a source or configuration
1762change, it might be helpful to clean the build tree before attempting another
1763build. Use this command:
1764
270540fd
RL
1765 $ make clean # Unix
1766 $ mms clean ! (or mmk) OpenVMS
1767 $ nmake clean # Windows
6ede7d73 1768
203c18f1
AM
1769Assembler error messages can sometimes be sidestepped by using the `no-asm`
1770configuration option. See also [notes](#notes-on-assembler-modules-compilation).
6ede7d73
DMSP
1771
1772Compiling parts of OpenSSL with gcc and others with the system compiler will
1773result in unresolved symbols on some systems.
1774
6c8149df
DMSP
1775If you are still having problems, try to search the [openssl-users] mailing
1776list or the [GitHub Issues] for existing solutions. If you think you
1777encountered an OpenSSL bug, please [raise an issue] to file a bug report.
6ede7d73
DMSP
1778Please take the time to review the existing issues first; maybe the bug was
1779already reported or has already been fixed.
1780
6ede7d73
DMSP
1781Test Failures
1782-------------
1783
1784If some tests fail, look at the output. There may be reasons for the failure
b0d5c1cb 1785that isn't a problem in OpenSSL itself (like an OS malfunction or a Perl issue).
6ede7d73 1786
3a0b3cc9
DDO
1787You may want increased verbosity, that can be accomplished as described in
1788section [Test Failures of test/README.md](test/README.md#test-failures).
6ede7d73 1789
e4522e10
DDO
1790You may also want to selectively specify which test(s) to perform. This can be
1791done using the `make` variable `TESTS` as described in section [Running
1792Selected Tests of test/README.md](test/README.md#running-selected-tests).
6ede7d73
DMSP
1793
1794If you find a problem with OpenSSL itself, try removing any
3a0b3cc9
DDO
1795compiler optimization flags from the `CFLAGS` line in the Makefile and
1796run `make clean; make` or corresponding.
6ede7d73
DMSP
1797
1798To report a bug please open an issue on GitHub, at
257e9d03 1799<https://github.com/openssl/openssl/issues>.
6ede7d73 1800
6ede7d73
DMSP
1801Notes
1802=====
1803
1804Notes on multi-threading
1805------------------------
1806
9afbb681 1807For some systems, the OpenSSL `Configure` script knows what compiler options
6ede7d73
DMSP
1808are needed to generate a library that is suitable for multi-threaded
1809applications. On these systems, support for multi-threading is enabled
9afbb681 1810by default; use the `no-threads` option to disable (this should never be
6ede7d73
DMSP
1811necessary).
1812
1813On other systems, to enable support for multi-threading, you will have
9afbb681
DDO
1814to specify at least two options: `threads`, and a system-dependent option.
1815(The latter is `-D_REENTRANT` on various systems.) The default in this
6ede7d73 1816case, obviously, is not to include support for multi-threading (but
9afbb681
DDO
1817you can still use `no-threads` to suppress an annoying warning message
1818from the `Configure` script.)
6ede7d73
DMSP
1819
1820OpenSSL provides built-in support for two threading models: pthreads (found on
1821most UNIX/Linux systems), and Windows threads. No other threading models are
1822supported. If your platform does not provide pthreads or Windows threads then
9afbb681 1823you should use `Configure` with the `no-threads` option.
6ede7d73 1824
3d8905f8
RS
1825For pthreads, all locks are non-recursive. In addition, in a debug build,
1826the mutex attribute `PTHREAD_MUTEX_ERRORCHECK` is used. If this is not
1827available on your platform, you might have to add
1828`-DOPENSSL_NO_MUTEX_ERRORCHECK` to your `Configure` invocation.
1829(On Linux `PTHREAD_MUTEX_ERRORCHECK` is an enum value, so a built-in
1830ifdef test cannot be used.)
1831
6ede7d73
DMSP
1832Notes on shared libraries
1833-------------------------
1834
9afbb681 1835For most systems the OpenSSL `Configure` script knows what is needed to
6ede7d73
DMSP
1836build shared libraries for libcrypto and libssl. On these systems
1837the shared libraries will be created by default. This can be suppressed and
9afbb681
DDO
1838only static libraries created by using the `no-shared` option. On systems
1839where OpenSSL does not know how to build shared libraries the `no-shared`
6ede7d73
DMSP
1840option will be forced and only static libraries will be created.
1841
1842Shared libraries are named a little differently on different platforms.
1843One way or another, they all have the major OpenSSL version number as
9afbb681 1844part of the file name, i.e. for OpenSSL 1.1.x, `1.1` is somehow part of
6ede7d73
DMSP
1845the name.
1846
9afbb681
DDO
1847On most POSIX platforms, shared libraries are named `libcrypto.so.1.1`
1848and `libssl.so.1.1`.
6ede7d73 1849
9afbb681
DDO
1850on Cygwin, shared libraries are named `cygcrypto-1.1.dll` and `cygssl-1.1.dll`
1851with import libraries `libcrypto.dll.a` and `libssl.dll.a`.
6ede7d73
DMSP
1852
1853On Windows build with MSVC or using MingW, shared libraries are named
9afbb681
DDO
1854`libcrypto-1_1.dll` and `libssl-1_1.dll` for 32-bit Windows,
1855`libcrypto-1_1-x64.dll` and `libssl-1_1-x64.dll` for 64-bit x86_64 Windows,
1856and `libcrypto-1_1-ia64.dll` and `libssl-1_1-ia64.dll` for IA64 Windows.
1857With MSVC, the import libraries are named `libcrypto.lib` and `libssl.lib`,
1858while with MingW, they are named `libcrypto.dll.a` and `libssl.dll.a`.
6ede7d73
DMSP
1859
1860On VMS, shareable images (VMS speak for shared libraries) are named
9afbb681 1861`ossl$libcrypto0101_shr.exe` and `ossl$libssl0101_shr.exe`. However, when
6ede7d73 1862OpenSSL is specifically built for 32-bit pointers, the shareable images
9afbb681 1863are named `ossl$libcrypto0101_shr32.exe` and `ossl$libssl0101_shr32.exe`
6ede7d73 1864instead, and when built for 64-bit pointers, they are named
9afbb681 1865`ossl$libcrypto0101_shr64.exe` and `ossl$libssl0101_shr64.exe`.
6ede7d73
DMSP
1866
1867Notes on random number generation
1868---------------------------------
1869
1870Availability of cryptographically secure random numbers is required for
1871secret key generation. OpenSSL provides several options to seed the
1872internal CSPRNG. If not properly seeded, the internal CSPRNG will refuse
1873to deliver random bytes and a "PRNG not seeded error" will occur.
1874
1875The seeding method can be configured using the `--with-rand-seed` option,
1876which can be used to specify a comma separated list of seed methods.
8c1cbc72 1877However, in most cases OpenSSL will choose a suitable default method,
6ede7d73 1878so it is not necessary to explicitly provide this option. Note also
b99c463d
P
1879that not all methods are available on all platforms. The FIPS provider will
1880silently ignore seed sources that were not validated.
6ede7d73
DMSP
1881
1882I) On operating systems which provide a suitable randomness source (in
1883form of a system call or system device), OpenSSL will use the optimal
1884available method to seed the CSPRNG from the operating system's
1885randomness sources. This corresponds to the option `--with-rand-seed=os`.
1886
1887II) On systems without such a suitable randomness source, automatic seeding
9afbb681 1888and reseeding is disabled (`--with-rand-seed=none`) and it may be necessary
6ede7d73 1889to install additional support software to obtain a random seed and reseed
9afbb681
DDO
1890the CSPRNG manually. Please check out the manual pages for `RAND_add()`,
1891`RAND_bytes()`, `RAND_egd()`, and the FAQ for more information.
6ede7d73 1892
203c18f1
AM
1893Notes on assembler modules compilation
1894--------------------------------------
1895
1896Compilation of some code paths in assembler modules might depend on whether the
1897current assembler version supports certain ISA extensions or not. Code paths
1898that use the AES-NI, PCLMULQDQ, SSSE3, and SHA extensions are always assembled.
1899Apart from that, the minimum requirements for the assembler versions are shown
1900in the table below:
1901
1902| ISA extension | GNU as | nasm | llvm |
1903|---------------|--------|--------|---------|
1904| AVX | 2.19 | 2.09 | 3.0 |
1905| AVX2 | 2.22 | 2.10 | 3.1 |
1906| ADCX/ADOX | 2.23 | 2.10 | 3.3 |
1907| AVX512 | 2.25 | 2.11.8 | 3.6 (*) |
1908| AVX512IFMA | 2.26 | 2.11.8 | 6.0 (*) |
1909| VAES | 2.30 | 2.13.3 | 6.0 (*) |
1910
1911---
1912
1913(*) Even though AVX512 support was implemented in llvm 3.6, prior to version 7.0
1914an explicit -march flag was apparently required to compile assembly modules. But
1915then the compiler generates processor-specific code, which in turn contradicts
1916the idea of performing dispatch at run-time, which is facilitated by the special
1917variable `OPENSSL_ia32cap`. For versions older than 7.0, it is possible to work
1918around the problem by forcing the build procedure to use the following script:
1919
1920 #!/bin/sh
1921 exec clang -no-integrated-as "$@"
1922
1923instead of the real clang. In which case it doesn't matter what clang version
1924is used, as it is the version of the GNU assembler that will be checked.
1925
1926---
1927
6ede7d73
DMSP
1928<!-- Links -->
1929
1930[openssl-users]:
257e9d03 1931 <https://mta.openssl.org/mailman/listinfo/openssl-users>
6ede7d73
DMSP
1932
1933[SUPPORT]:
1934 ./SUPPORT.md
1935
1936[GitHub Issues]:
257e9d03 1937 <https://github.com/openssl/openssl/issues>
6ede7d73
DMSP
1938
1939[raise an issue]:
257e9d03 1940 <https://github.com/openssl/openssl/issues/new/choose>
6ede7d73
DMSP
1941
1942[10-main.conf]:
1943 Configurations/10-main.conf