]> git.ipfire.org Git - thirdparty/openssl.git/blob - Configurations/README
Document how to force linking with static libraries
[thirdparty/openssl.git] / Configurations / README
1 Configurations of OpenSSL target platforms
2 ==========================================
3
4 Target configurations are a collection of facts that we know about
5 different platforms and their capabilities. We organise them in a
6 hash table, where each entry represent a specific target.
7
8 In each table entry, the following keys are significant:
9
10 inherit_from => Other targets to inherit values from.
11 Explained further below. [1]
12 template => Set to 1 if this isn't really a platform
13 target. Instead, this target is a template
14 upon which other targets can be built.
15 Explained further below. [1]
16
17 sys_id => System identity for systems where that
18 is difficult to determine automatically.
19
20 cc => The C compiler command, usually one of "cc",
21 "gcc" or "clang". This command is normally
22 also used to link object files and
23 libraries into the final program.
24 cxx => The C++ compiler command, usually one of
25 "c++", "g++" or "clang++". This command is
26 also used when linking a program where at
27 least one of the object file is made from
28 C++ source.
29 cflags => Flags that are used at all times when
30 compiling C object files.
31 cxxflags => Flags that are used at all times when
32 compiling C++ object files. If unset, it
33 gets the same value as cflags.
34 defines => As an alternative, macro definitions may be
35 present here instead of in `cflags'. If
36 given here, they MUST be as an array of the
37 string such as "MACRO=value", or just
38 "MACRO" for definitions without value.
39 shared_cflag => Extra compilation flags used when
40 compiling for shared libraries, typically
41 something like "-fPIC".
42
43 (linking is a complex thing, see [3] below)
44 ld => Linker command, usually not defined
45 (meaning the compiler command is used
46 instead).
47 (NOTE: this is here for future use, it's
48 not implemented yet)
49 lflags => Flags that are used when linking apps.
50 shared_ldflag => Flags that are used when linking shared
51 or dynamic libraries.
52 plib_lflags => Extra linking flags to appear just before
53 the libraries on the command line.
54 ex_libs => Extra libraries that are needed when
55 linking.
56
57 ar => The library archive command, the default is
58 "ar".
59 (NOTE: this is here for future use, it's
60 not implemented yet)
61 arflags => Flags to be used with the library archive
62 command.
63
64 ranlib => The library archive indexing command, the
65 default is 'ranlib' it it exists.
66
67 unistd => An alternative header to the typical
68 '<unistd.h>'. This is very rarely needed.
69
70 shared_extension => File name extension used for shared
71 libraries.
72 obj_extension => File name extension used for object files.
73 On unix, this defaults to ".o" (NOTE: this
74 is here for future use, it's not
75 implemented yet)
76 exe_extension => File name extension used for executable
77 files. On unix, this defaults to "" (NOTE:
78 this is here for future use, it's not
79 implemented yet)
80
81 thread_scheme => The type of threads is used on the
82 configured platform. Currently known
83 values are "(unknown)", "pthreads",
84 "uithreads" (a.k.a solaris threads) and
85 "winthreads". Except for "(unknown)", the
86 actual value is currently ignored but may
87 be used in the future. See further notes
88 below [2].
89 dso_scheme => The type of dynamic shared objects to build
90 for. This mostly comes into play with
91 engines, but can be used for other purposes
92 as well. Valid values are "DLFCN"
93 (dlopen() et al), "DLFCN_NO_H" (for systems
94 that use dlopen() et al but do not have
95 fcntl.h), "DL" (shl_load() et al), "WIN32"
96 and "VMS".
97 perlasm_scheme => The perlasm method used to created the
98 assembler files used when compiling with
99 assembler implementations.
100 shared_target => The shared library building method used.
101 This is a target found in Makefile.shared.
102 build_scheme => The scheme used to build up a Makefile.
103 In its simplest form, the value is a string
104 with the name of the build scheme.
105 The value may also take the form of a list
106 of strings, if the build_scheme is to have
107 some options. In this case, the first
108 string in the list is the name of the build
109 scheme.
110 Currently recognised build scheme is "unified".
111 For the "unified" build scheme, this item
112 *must* be an array with the first being the
113 word "unified" and the second being a word
114 to identify the platform family.
115
116 multilib => On systems that support having multiple
117 implementations of a library (typically a
118 32-bit and a 64-bit variant), this is used
119 to have the different variants in different
120 directories.
121
122 bn_ops => Building options (was just bignum options
123 in the earlier history of this option,
124 hence the name). This a string of words
125 that describe properties on the designated
126 target platform, such as the type of
127 integers used to build up the bitnum,
128 different ways to implement certain ciphers
129 and so on. To fully comprehend the
130 meaning, the best is to read the affected
131 source.
132 The valid words are:
133
134 BN_LLONG use 'unsigned long long' in
135 some bignum calculations.
136 This has no value when
137 SIXTY_FOUR_BIT or
138 SIXTY_FOUR_BIT_LONG is given.
139 RC4_CHAR makes the basic RC4 unit of
140 calculation an unsigned char.
141 SIXTY_FOUR_BIT processor registers
142 are 64 bits, long is
143 32 bits, long long is
144 64 bits.
145 SIXTY_FOUR_BIT_LONG processor registers
146 are 64 bits, long is
147 64 bits.
148 THIRTY_TWO_BIT processor registers
149 are 32 bits.
150 EXPORT_VAR_AS_FN for shared libraries,
151 export vars as
152 accessor functions.
153
154 apps_extra_src => Extra source to build apps/openssl, as
155 needed by the target.
156 cpuid_asm_src => assembler implementation of cpuid code as
157 well as OPENSSL_cleanse().
158 Default to mem_clr.c
159 bn_asm_src => Assembler implementation of core bignum
160 functions.
161 Defaults to bn_asm.c
162 ec_asm_src => Assembler implementation of core EC
163 functions.
164 des_asm_src => Assembler implementation of core DES
165 encryption functions.
166 Defaults to 'des_enc.c fcrypt_b.c'
167 aes_asm_src => Assembler implementation of core AES
168 functions.
169 Defaults to 'aes_core.c aes_cbc.c'
170 bf_asm_src => Assembler implementation of core BlowFish
171 functions.
172 Defaults to 'bf_enc.c'
173 md5_asm_src => Assembler implementation of core MD5
174 functions.
175 sha1_asm_src => Assembler implementation of core SHA1,
176 functions, and also possibly SHA256 and
177 SHA512 ones.
178 cast_asm_src => Assembler implementation of core CAST
179 functions.
180 Defaults to 'c_enc.c'
181 rc4_asm_src => Assembler implementation of core RC4
182 functions.
183 Defaults to 'rc4_enc.c rc4_skey.c'
184 rmd160_asm_src => Assembler implementation of core RMD160
185 functions.
186 rc5_asm_src => Assembler implementation of core RC5
187 functions.
188 Defaults to 'rc5_enc.c'
189 wp_asm_src => Assembler implementation of core WHIRLPOOL
190 functions.
191 cmll_asm_src => Assembler implementation of core CAMELLIA
192 functions.
193 Defaults to 'camellia.c cmll_misc.c cmll_cbc.c'
194 modes_asm_src => Assembler implementation of cipher modes,
195 currently the functions gcm_gmult_4bit and
196 gcm_ghash_4bit.
197 padlock_asm_src => Assembler implementation of core parts of
198 the padlock engine. This is mandatory on
199 any platform where the padlock engine might
200 actually be built.
201
202
203 [1] as part of the target configuration, one can have a key called
204 'inherit_from' that indicate what other configurations to inherit
205 data from. These are resolved recursively.
206
207 Inheritance works as a set of default values that can be overridden
208 by corresponding key values in the inheriting configuration.
209
210 Note 1: any configuration table can be used as a template.
211 Note 2: pure templates have the attribute 'template => 1' and
212 cannot be used as build targets.
213
214 If several configurations are given in the 'inherit_from' array,
215 the values of same attribute are concatenated with space
216 separation. With this, it's possible to have several smaller
217 templates for different configuration aspects that can be combined
218 into a complete configuration.
219
220 instead of a scalar value or an array, a value can be a code block
221 of the form 'sub { /* your code here */ }'. This code block will
222 be called with the list of inherited values for that key as
223 arguments. In fact, the concatenation of strings is really done
224 by using 'sub { join(" ",@_) }' on the list of inherited values.
225
226 An example:
227
228 "foo" => {
229 template => 1,
230 haha => "ha ha",
231 hoho => "ho",
232 ignored => "This should not appear in the end result",
233 },
234 "bar" => {
235 template => 1,
236 haha => "ah",
237 hoho => "haho",
238 hehe => "hehe"
239 },
240 "laughter" => {
241 inherit_from => [ "foo", "bar" ],
242 hehe => sub { join(" ",(@_,"!!!")) },
243 ignored => "",
244 }
245
246 The entry for "laughter" will become as follows after processing:
247
248 "laughter" => {
249 haha => "ha ha ah",
250 hoho => "ho haho",
251 hehe => "hehe !!!",
252 ignored => ""
253 }
254
255 [2] OpenSSL is built with threading capabilities unless the user
256 specifies 'no-threads'. The value of the key 'thread_scheme' may
257 be "(unknown)", in which case the user MUST give some compilation
258 flags to Configure.
259
260 [3] OpenSSL has three types of things to link from object files or
261 static libraries:
262
263 - shared libraries; that would be libcrypto and libssl.
264 - shared objects (sometimes called dynamic libraries); that would
265 be the engines.
266 - applications; those are apps/openssl and all the test apps.
267
268 Very roughly speaking, linking is done like this (words in braces
269 represent the configuration settings documented at the beginning
270 of this file):
271
272 shared libraries:
273 {ld} $(CFLAGS) {shared_ldflag} -shared -o libfoo.so \
274 -Wl,--whole-archive libfoo.a -Wl,--no-whole-archive \
275 {plib_lflags} -lcrypto {ex_libs}
276
277 shared objects:
278 {ld} $(CFLAGS) {shared_ldflag} -shared -o libeng.so \
279 blah1.o blah2.o {plib_lflags} -lcrypto {ex_libs}
280
281 applications:
282 {ld} $(CFLAGS) {lflags} -o app \
283 app1.o utils.o {plib_lflags} -lssl -lcrypto {ex_libs}
284
285
286 Historically, the target configurations came in form of a string with
287 values separated by colons. This use is deprecated. The string form
288 looked like this:
289
290 "target" => "{cc}:{cflags}:{unistd}:{thread_cflag}:{sys_id}:{lflags}:{bn_ops}:{cpuid_obj}:{bn_obj}:{ec_obj}:{des_obj}:{aes_obj}:{bf_obj}:{md5_obj}:{sha1_obj}:{cast_obj}:{rc4_obj}:{rmd160_obj}:{rc5_obj}:{wp_obj}:{cmll_obj}:{modes_obj}:{padlock_obj}:{perlasm_scheme}:{dso_scheme}:{shared_target}:{shared_cflag}:{shared_ldflag}:{shared_extension}:{ranlib}:{arflags}:{multilib}"
291
292
293 Build info files
294 ================
295
296 The build.info files that are spread over the source tree contain the
297 minimum information needed to build and distribute OpenSSL. It uses a
298 simple and yet fairly powerful language to determine what needs to be
299 built, from what sources, and other relationships between files.
300
301 For every build.info file, all file references are relative to the
302 directory of the build.info file for source files, and the
303 corresponding build directory for built files if the build tree
304 differs from the source tree.
305
306 When processed, every line is processed with the perl module
307 Text::Template, using the delimiters "{-" and "-}". The hashes
308 %config and %target are passed to the perl fragments, along with
309 $sourcedir and $builddir, which are the locations of the source
310 directory for the current build.info file and the corresponding build
311 directory, all relative to the top of the build tree.
312
313 To begin with, things to be built are declared by setting specific
314 variables:
315
316 PROGRAMS=foo bar
317 LIBS=libsomething
318 ENGINES=libeng
319 SCRIPTS=myhack
320 EXTRA=file1 file2
321
322 Note that the files mentioned for PROGRAMS, LIBS and ENGINES *must* be
323 without extensions. The build file templates will figure them out.
324
325 For each thing to be built, it is then possible to say what sources
326 they are built from:
327
328 PROGRAMS=foo bar
329 SOURCE[foo]=foo.c common.c
330 SOURCE[bar]=bar.c extra.c common.c
331
332 It's also possible to tell some other dependencies:
333
334 DEPEND[foo]=libsomething
335 DEPEND[libbar]=libsomethingelse
336
337 (it could be argued that 'libsomething' and 'libsomethingelse' are
338 source as well. However, the files given through SOURCE are expected
339 to be located in the source tree while files given through DEPEND are
340 expected to be located in the build tree)
341
342 It's also possible to depend on static libraries explicitely:
343
344 DEPEND[foo]=libsomething.a
345 DEPEND[libbar]=libsomethingelse.a
346
347 This should be rarely used, and care should be taken to make sure it's
348 only used when supported. For example, native Windows build doesn't
349 support build static libraries and DLLs at the same time, so using
350 static libraries on Windows can only be done when configured
351 'no-shared'.
352
353 For some libraries, we maintain files with public symbols and their
354 slot in a transfer vector (important on some platforms). It can be
355 declared like this:
356
357 ORDINALS[libcrypto]=crypto
358
359 The value is not the name of the file in question, but rather the
360 argument to util/mkdef.pl that indicates which file to use.
361
362 One some platforms, shared libraries come with a name that's different
363 from their static counterpart. That's declared as follows:
364
365 SHARED_NAME[libfoo]=cygfoo-{- $config{shlibver} -}
366
367 The example is from Cygwin, which has a required naming convention.
368
369 Sometimes, it makes sense to rename an output file, for example a
370 library:
371
372 RENAME[libfoo]=libbar
373
374 That lines has "libfoo" get renamed to "libbar". While it makes no
375 sense at all to just have a rename like that (why not just use
376 "libbar" everywhere?), it does make sense when it can be used
377 conditionally. See a little further below for an example.
378
379 In some cases, it's desirable to include some source files in the
380 shared form of a library only:
381
382 SHARED_SOURCE[libfoo]=dllmain.c
383
384 For any file to be built, it's also possible to tell what extra
385 include paths the build of their source files should use:
386
387 INCLUDE[foo]=include
388
389 In some cases, one might want to generate some source files from
390 others, that's done as follows:
391
392 GENERATE[foo.s]=asm/something.pl $(CFLAGS)
393 GENERATE[bar.s]=asm/bar.S
394
395 The value of each GENERATE line is a command line or part of it.
396 Configure places no rules on the command line, except the the first
397 item muct be the generator file. It is, however, entirely up to the
398 build file template to define exactly how those command lines should
399 be handled, how the output is captured and so on.
400
401 Sometimes, the generator file itself depends on other files, for
402 example if it is a perl script that depends on other perl modules.
403 This can be expressed using DEPEND like this:
404
405 DEPEND[asm/something.pl]=../perlasm/Foo.pm
406
407 There may also be cases where the exact file isn't easily specified,
408 but an inclusion directory still needs to be specified. INCLUDE can
409 be used in that case:
410
411 INCLUDE[asm/something.pl]=../perlasm
412
413 NOTE: GENERATE lines are limited to one command only per GENERATE.
414
415 As a last resort, it's possible to have raw build file lines, between
416 BEGINRAW and ENDRAW lines as follows:
417
418 BEGINRAW[Makefile(unix)]
419 haha.h: {- $builddir -}/Makefile
420 echo "/* haha */" > haha.h
421 ENDRAW[Makefile(unix)]
422
423 The word within square brackets is the build_file configuration item
424 or the build_file configuration item followed by the second word in the
425 build_scheme configuration item for the configured target within
426 parenthesis as shown above. For example, with the following relevant
427 configuration items:
428
429 build_file => "build.ninja"
430 build_scheme => [ "unified", "unix" ]
431
432 ... these lines will be considered:
433
434 BEGINRAW[build.ninja]
435 build haha.h: echo "/* haha */" > haha.h
436 ENDRAW[build.ninja]
437
438 BEGINRAW[build.ninja(unix)]
439 build hoho.h: echo "/* hoho */" > hoho.h
440 ENDRAW[build.ninja(unix)]
441
442 Should it be needed because the recipes within a RAW section might
443 clash with those generated by Configure, it's possible to tell it
444 not to generate them with the use of OVERRIDES, for example:
445
446 SOURCE[libfoo]=foo.c bar.c
447
448 OVERRIDES=bar.o
449 BEGINRAW[Makefile(unix)]
450 bar.o: bar.c
451 $(CC) $(CFLAGS) -DSPECIAL -c -o $@ $<
452 ENDRAW[Makefile(unix)]
453
454 See the documentation further up for more information on configuration
455 items.
456
457 Finally, you can have some simple conditional use of the build.info
458 information, looking like this:
459
460 IF[1]
461 something
462 ELSIF[2]
463 something other
464 ELSE
465 something else
466 ENDIF
467
468 The expression in square brackets is interpreted as a string in perl,
469 and will be seen as true if perl thinks it is, otherwise false. For
470 example, the above would have "something" used, since 1 is true.
471
472 Together with the use of Text::Template, this can be used as
473 conditions based on something in the passed variables, for example:
474
475 IF[{- $disabled{shared} -}]
476 LIBS=libcrypto
477 SOURCE[libcrypto]=...
478 ELSE
479 LIBS=libfoo
480 SOURCE[libfoo]=...
481 ENDIF
482
483 or:
484
485 # VMS has a cultural standard where all libraries are prefixed.
486 # For OpenSSL, the choice is 'ossl_'
487 IF[{- $config{target} =~ /^vms/ -}]
488 RENAME[libcrypto]=ossl_libcrypto
489 RENAME[libssl]=ossl_libssl
490 ENDIF
491
492
493 Build-file programming with the "unified" build system
494 ======================================================
495
496 "Build files" are called "Makefile" on Unix-like operating systems,
497 "descrip.mms" for MMS on VMS, "makefile" for nmake on Windows, etc.
498
499 To use the "unified" build system, the target configuration needs to
500 set the three items 'build_scheme', 'build_file' and 'build_command'.
501 In the rest of this section, we will assume that 'build_scheme' is set
502 to "unified" (see the configurations documentation above for the
503 details).
504
505 For any name given by 'build_file', the "unified" system expects a
506 template file in Configurations/ named like the build file, with
507 ".tmpl" appended, or in case of possible ambiguity, a combination of
508 the second 'build_scheme' list item and the 'build_file' name. For
509 example, if 'build_file' is set to "Makefile", the template could be
510 Configurations/Makefile.tmpl or Configurations/unix-Makefile.tmpl.
511 In case both Configurations/unix-Makefile.tmpl and
512 Configurations/Makefile.tmpl are present, the former takes
513 precedence.
514
515 The build-file template is processed with the perl module
516 Text::Template, using "{-" and "-}" as delimiters that enclose the
517 perl code fragments that generate configuration-dependent content.
518 Those perl fragments have access to all the hash variables from
519 configdata.pem.
520
521 The build-file template is expected to define at least the following
522 perl functions in a perl code fragment enclosed with "{-" and "-}".
523 They are all expected to return a string with the lines they produce.
524
525 generatesrc - function that produces build file lines to generate
526 a source file from some input.
527
528 It's called like this:
529
530 generatesrc(src => "PATH/TO/tobegenerated",
531 generator => [ "generatingfile", ... ]
532 generator_incs => [ "INCL/PATH", ... ]
533 generator_deps => [ "dep1", ... ]
534 generator => [ "generatingfile", ... ]
535 incs => [ "INCL/PATH", ... ],
536 deps => [ "dep1", ... ],
537 intent => one of "libs", "dso", "bin" );
538
539 'src' has the name of the file to be generated.
540 'generator' is the command or part of command to
541 generate the file, of which the first item is
542 expected to be the file to generate from.
543 generatesrc() is expected to analyse and figure out
544 exactly how to apply that file and how to capture
545 the result. 'generator_incs' and 'generator_deps'
546 are include directories and files that the generator
547 file itself depends on. 'incs' and 'deps' are
548 include directories and files that are used if $(CC)
549 is used as an intermediary step when generating the
550 end product (the file indicated by 'src'). 'intent'
551 indicates what the generated file is going to be
552 used for.
553
554 src2obj - function that produces build file lines to build an
555 object file from source files and associated data.
556
557 It's called like this:
558
559 src2obj(obj => "PATH/TO/objectfile",
560 srcs => [ "PATH/TO/sourcefile", ... ],
561 deps => [ "dep1", ... ],
562 incs => [ "INCL/PATH", ... ]
563 intent => one of "lib", "dso", "bin" );
564
565 'obj' has the intended object file *without*
566 extension, src2obj() is expected to add that.
567 'srcs' has the list of source files to build the
568 object file, with the first item being the source
569 file that directly corresponds to the object file.
570 'deps' is a list of explicit dependencies. 'incs'
571 is a list of include file directories. Finally,
572 'intent' indicates what this object file is going
573 to be used for.
574
575 obj2lib - function that produces build file lines to build a
576 static library file ("libfoo.a" in Unix terms) from
577 object files.
578
579 called like this:
580
581 obj2lib(lib => "PATH/TO/libfile",
582 objs => [ "PATH/TO/objectfile", ... ]);
583
584 'lib' has the intended library file name *without*
585 extension, obj2lib is expected to add that. 'objs'
586 has the list of object files (also *without*
587 extension) to build this library.
588
589 libobj2shlib - function that produces build file lines to build a
590 shareable object library file ("libfoo.so" in Unix
591 terms) from the corresponding static library file
592 or object files.
593
594 called like this:
595
596 libobj2shlib(shlib => "PATH/TO/shlibfile",
597 lib => "PATH/TO/libfile",
598 objs => [ "PATH/TO/objectfile", ... ],
599 deps => [ "PATH/TO/otherlibfile", ... ],
600 ordinals => [ "word", "/PATH/TO/ordfile" ]);
601
602 'lib' has the intended library file name *without*
603 extension, libobj2shlib is expected to add that.
604 'shlib' has the corresponding shared library name
605 *without* extension. 'deps' has the list of other
606 libraries (also *without* extension) this library
607 needs to be linked with. 'objs' has the list of
608 object files (also *without* extension) to build
609 this library. 'ordinals' MAY be present, and when
610 it is, its value is an array where the word is
611 "crypto" or "ssl" and the file is one of the ordinal
612 files util/libeay.num or util/ssleay.num in the
613 source directory.
614
615 This function has a choice; it can use the
616 corresponding static library as input to make the
617 shared library, or the list of object files.
618
619 obj2dso - function that produces build file lines to build a
620 dynamic shared object file from object files.
621
622 called like this:
623
624 obj2dso(lib => "PATH/TO/libfile",
625 objs => [ "PATH/TO/objectfile", ... ],
626 deps => [ "PATH/TO/otherlibfile",
627 ... ]);
628
629 This is almost the same as libobj2shlib, but the
630 intent is to build a shareable library that can be
631 loaded in runtime (a "plugin"...). The differences
632 are subtle, one of the most visible ones is that the
633 resulting shareable library is produced from object
634 files only.
635
636 obj2bin - function that produces build file lines to build an
637 executable file from object files.
638
639 called like this:
640
641 obj2bin(bin => "PATH/TO/binfile",
642 objs => [ "PATH/TO/objectfile", ... ],
643 deps => [ "PATH/TO/libfile", ... ]);
644
645 'bin' has the intended executable file name
646 *without* extension, obj2bin is expected to add
647 that. 'objs' has the list of object files (also
648 *without* extension) to build this library. 'deps'
649 has the list of library files (also *without*
650 extension) that the programs needs to be linked
651 with.
652
653 in2script - function that produces build file lines to build a
654 script file from some input.
655
656 called like this:
657
658 in2script(script => "PATH/TO/scriptfile",
659 sources => [ "PATH/TO/infile", ... ]);
660
661 'script' has the intended script file name.
662 'sources' has the list of source files to build the
663 resulting script from.
664
665 In all cases, file file paths are relative to the build tree top, and
666 the build file actions run with the build tree top as current working
667 directory.
668
669 Make sure to end the section with these functions with a string that
670 you thing is appropriate for the resulting build file. If nothing
671 else, end it like this:
672
673 ""; # Make sure no lingering values end up in the Makefile
674 -}