xref: /freebsd/crypto/openssl/Configurations/README.md (revision e0c4386e7e71d93b0edc0c8fa156263fc4a8b0b6)
1*e0c4386eSCy SchubertIntro
2*e0c4386eSCy Schubert=====
3*e0c4386eSCy Schubert
4*e0c4386eSCy SchubertThis directory contains a few sets of files that are used for
5*e0c4386eSCy Schubertconfiguration in diverse ways:
6*e0c4386eSCy Schubert
7*e0c4386eSCy Schubert    *.conf      Target platform configurations, please read
8*e0c4386eSCy Schubert                'Configurations of OpenSSL target platforms' for more
9*e0c4386eSCy Schubert                information.
10*e0c4386eSCy Schubert    *.tmpl      Build file templates, please read 'Build-file
11*e0c4386eSCy Schubert                programming with the "unified" build system' as well
12*e0c4386eSCy Schubert                as 'Build info files' for more information.
13*e0c4386eSCy Schubert    *.pm        Helper scripts / modules for the main `Configure`
14*e0c4386eSCy Schubert                script.  See 'Configure helper scripts for more
15*e0c4386eSCy Schubert                information.
16*e0c4386eSCy Schubert
17*e0c4386eSCy SchubertConfigurations of OpenSSL target platforms
18*e0c4386eSCy Schubert==========================================
19*e0c4386eSCy Schubert
20*e0c4386eSCy SchubertConfiguration targets are a collection of facts that we know about
21*e0c4386eSCy Schubertdifferent platforms and their capabilities.  We organise them in a
22*e0c4386eSCy Schuberthash table, where each entry represent a specific target.
23*e0c4386eSCy Schubert
24*e0c4386eSCy SchubertNote that configuration target names must be unique across all config
25*e0c4386eSCy Schubertfiles.  The Configure script does check that a config file doesn't
26*e0c4386eSCy Schuberthave config targets that shadow config targets from other files.
27*e0c4386eSCy Schubert
28*e0c4386eSCy SchubertIn each table entry, the following keys are significant:
29*e0c4386eSCy Schubert
30*e0c4386eSCy Schubert        inherit_from    => Other targets to inherit values from.
31*e0c4386eSCy Schubert                           Explained further below. [1]
32*e0c4386eSCy Schubert        template        => Set to 1 if this isn't really a platform
33*e0c4386eSCy Schubert                           target.  Instead, this target is a template
34*e0c4386eSCy Schubert                           upon which other targets can be built.
35*e0c4386eSCy Schubert                           Explained further below.  [1]
36*e0c4386eSCy Schubert
37*e0c4386eSCy Schubert        sys_id          => System identity for systems where that
38*e0c4386eSCy Schubert                           is difficult to determine automatically.
39*e0c4386eSCy Schubert
40*e0c4386eSCy Schubert        enable          => Enable specific configuration features.
41*e0c4386eSCy Schubert                           This MUST be an array of words.
42*e0c4386eSCy Schubert        disable         => Disable specific configuration features.
43*e0c4386eSCy Schubert                           This MUST be an array of words.
44*e0c4386eSCy Schubert                           Note: if the same feature is both enabled
45*e0c4386eSCy Schubert                           and disabled, disable wins.
46*e0c4386eSCy Schubert
47*e0c4386eSCy Schubert        as              => The assembler command.  This is not always
48*e0c4386eSCy Schubert                           used (for example on Unix, where the C
49*e0c4386eSCy Schubert                           compiler is used instead).
50*e0c4386eSCy Schubert        asflags         => Default assembler command flags [4].
51*e0c4386eSCy Schubert        cpp             => The C preprocessor command, normally not
52*e0c4386eSCy Schubert                           given, as the build file defaults are
53*e0c4386eSCy Schubert                           usually good enough.
54*e0c4386eSCy Schubert        cppflags        => Default C preprocessor flags [4].
55*e0c4386eSCy Schubert        defines         => As an alternative, macro definitions may be
56*e0c4386eSCy Schubert                           given here instead of in 'cppflags' [4].
57*e0c4386eSCy Schubert                           If given here, they MUST be as an array of
58*e0c4386eSCy Schubert                           the string such as "MACRO=value", or just
59*e0c4386eSCy Schubert                           "MACRO" for definitions without value.
60*e0c4386eSCy Schubert        includes        => As an alternative, inclusion directories
61*e0c4386eSCy Schubert                           may be given here instead of in 'cppflags'
62*e0c4386eSCy Schubert                           [4].  If given here, the MUST be an array
63*e0c4386eSCy Schubert                           of strings, one directory specification
64*e0c4386eSCy Schubert                           each.
65*e0c4386eSCy Schubert        cc              => The C compiler command, usually one of "cc",
66*e0c4386eSCy Schubert                           "gcc" or "clang".  This command is normally
67*e0c4386eSCy Schubert                           also used to link object files and
68*e0c4386eSCy Schubert                           libraries into the final program.
69*e0c4386eSCy Schubert        cxx             => The C++ compiler command, usually one of
70*e0c4386eSCy Schubert                           "c++", "g++" or "clang++".  This command is
71*e0c4386eSCy Schubert                           also used when linking a program where at
72*e0c4386eSCy Schubert                           least one of the object file is made from
73*e0c4386eSCy Schubert                           C++ source.
74*e0c4386eSCy Schubert        cflags          => Defaults C compiler flags [4].
75*e0c4386eSCy Schubert        cxxflags        => Default  C++ compiler flags [4].  If unset,
76*e0c4386eSCy Schubert                           it gets the same value as cflags.
77*e0c4386eSCy Schubert
78*e0c4386eSCy Schubert        (linking is a complex thing, see [3] below)
79*e0c4386eSCy Schubert        ld              => Linker command, usually not defined
80*e0c4386eSCy Schubert                           (meaning the compiler command is used
81*e0c4386eSCy Schubert                           instead).
82*e0c4386eSCy Schubert                           (NOTE: this is here for future use, it's
83*e0c4386eSCy Schubert                           not implemented yet)
84*e0c4386eSCy Schubert        lflags          => Default flags used when linking apps,
85*e0c4386eSCy Schubert                           shared libraries or DSOs [4].
86*e0c4386eSCy Schubert        ex_libs         => Extra libraries that are needed when
87*e0c4386eSCy Schubert                           linking shared libraries, DSOs or programs.
88*e0c4386eSCy Schubert                           The value is also assigned to Libs.private
89*e0c4386eSCy Schubert                           in $(libdir)/pkgconfig/libcrypto.pc.
90*e0c4386eSCy Schubert
91*e0c4386eSCy Schubert        shared_cppflags => Extra C preprocessor flags used when
92*e0c4386eSCy Schubert                           processing C files for shared libraries.
93*e0c4386eSCy Schubert        shared_cflag    => Extra C compiler flags used when compiling
94*e0c4386eSCy Schubert                           for shared libraries, typically something
95*e0c4386eSCy Schubert                           like "-fPIC".
96*e0c4386eSCy Schubert        shared_ldflag   => Extra linking flags used when linking
97*e0c4386eSCy Schubert                           shared libraries.
98*e0c4386eSCy Schubert        module_cppflags
99*e0c4386eSCy Schubert        module_cflags
100*e0c4386eSCy Schubert        module_ldflags  => Has the same function as the corresponding
101*e0c4386eSCy Schubert                           'shared_' attributes, but for building DSOs.
102*e0c4386eSCy Schubert                           When unset, they get the same values as the
103*e0c4386eSCy Schubert                           corresponding 'shared_' attributes.
104*e0c4386eSCy Schubert
105*e0c4386eSCy Schubert        ar              => The library archive command, the default is
106*e0c4386eSCy Schubert                           "ar".
107*e0c4386eSCy Schubert                           (NOTE: this is here for future use, it's
108*e0c4386eSCy Schubert                           not implemented yet)
109*e0c4386eSCy Schubert        arflags         => Flags to be used with the library archive
110*e0c4386eSCy Schubert                           command.  On Unix, this includes the
111*e0c4386eSCy Schubert                           command letter, 'r' by default.
112*e0c4386eSCy Schubert
113*e0c4386eSCy Schubert        ranlib          => The library archive indexing command, the
114*e0c4386eSCy Schubert                           default is 'ranlib' it it exists.
115*e0c4386eSCy Schubert
116*e0c4386eSCy Schubert        unistd          => An alternative header to the typical
117*e0c4386eSCy Schubert                           '<unistd.h>'.  This is very rarely needed.
118*e0c4386eSCy Schubert
119*e0c4386eSCy Schubert        shared_extension => File name extension used for shared
120*e0c4386eSCy Schubert                            libraries.
121*e0c4386eSCy Schubert        obj_extension   => File name extension used for object files.
122*e0c4386eSCy Schubert                           On unix, this defaults to ".o" (NOTE: this
123*e0c4386eSCy Schubert                           is here for future use, it's not
124*e0c4386eSCy Schubert                           implemented yet)
125*e0c4386eSCy Schubert        exe_extension   => File name extension used for executable
126*e0c4386eSCy Schubert                           files.  On unix, this defaults to "" (NOTE:
127*e0c4386eSCy Schubert                           this is here for future use, it's not
128*e0c4386eSCy Schubert                           implemented yet)
129*e0c4386eSCy Schubert        shlib_variant   => A "variant" identifier inserted between the base
130*e0c4386eSCy Schubert                           shared library name and the extension.  On "unixy"
131*e0c4386eSCy Schubert                           platforms (BSD, Linux, Solaris, MacOS/X, ...) this
132*e0c4386eSCy Schubert                           supports installation of custom OpenSSL libraries
133*e0c4386eSCy Schubert                           that don't conflict with other builds of OpenSSL
134*e0c4386eSCy Schubert                           installed on the system.  The variant identifier
135*e0c4386eSCy Schubert                           becomes part of the SONAME of the library and also
136*e0c4386eSCy Schubert                           any symbol versions (symbol versions are not used or
137*e0c4386eSCy Schubert                           needed with MacOS/X).  For example, on a system
138*e0c4386eSCy Schubert                           where a default build would normally create the SSL
139*e0c4386eSCy Schubert                           shared library as 'libssl.so -> libssl.so.1.1' with
140*e0c4386eSCy Schubert                           the value of the symlink as the SONAME, a target
141*e0c4386eSCy Schubert                           definition that sets 'shlib_variant => "-abc"' will
142*e0c4386eSCy Schubert                           create 'libssl.so -> libssl-abc.so.1.1', again with
143*e0c4386eSCy Schubert                           an SONAME equal to the value of the symlink.  The
144*e0c4386eSCy Schubert                           symbol versions associated with the variant library
145*e0c4386eSCy Schubert                           would then be 'OPENSSL_ABC_<version>' rather than
146*e0c4386eSCy Schubert                           the default 'OPENSSL_<version>'. The string inserted
147*e0c4386eSCy Schubert                           into symbol versions is obtained by mapping all
148*e0c4386eSCy Schubert                           letters in the "variant" identifier to upper case
149*e0c4386eSCy Schubert                           and all non-alphanumeric characters to '_'.
150*e0c4386eSCy Schubert
151*e0c4386eSCy Schubert        thread_scheme   => The type of threads is used on the
152*e0c4386eSCy Schubert                           configured platform.  Currently known
153*e0c4386eSCy Schubert                           values are "(unknown)", "pthreads",
154*e0c4386eSCy Schubert                           "uithreads" (a.k.a solaris threads) and
155*e0c4386eSCy Schubert                           "winthreads".  Except for "(unknown)", the
156*e0c4386eSCy Schubert                           actual value is currently ignored but may
157*e0c4386eSCy Schubert                           be used in the future.  See further notes
158*e0c4386eSCy Schubert                           below [2].
159*e0c4386eSCy Schubert        dso_scheme      => The type of dynamic shared objects to build
160*e0c4386eSCy Schubert                           for.  This mostly comes into play with
161*e0c4386eSCy Schubert                           modules, but can be used for other purposes
162*e0c4386eSCy Schubert                           as well.  Valid values are "DLFCN"
163*e0c4386eSCy Schubert                           (dlopen() et al), "DLFCN_NO_H" (for systems
164*e0c4386eSCy Schubert                           that use dlopen() et al but do not have
165*e0c4386eSCy Schubert                           fcntl.h), "DL" (shl_load() et al), "WIN32"
166*e0c4386eSCy Schubert                           and "VMS".
167*e0c4386eSCy Schubert        asm_arch        => The architecture to be used for compiling assembly
168*e0c4386eSCy Schubert                           source.  This acts as a selector in build.info files.
169*e0c4386eSCy Schubert        uplink_arch     => The architecture to be used for compiling uplink
170*e0c4386eSCy Schubert                           source.  This acts as a selector in build.info files.
171*e0c4386eSCy Schubert                           This is separate from asm_arch because it's compiled
172*e0c4386eSCy Schubert                           even when 'no-asm' is given, even though it contains
173*e0c4386eSCy Schubert                           assembler source.
174*e0c4386eSCy Schubert        perlasm_scheme  => The perlasm method used to create the
175*e0c4386eSCy Schubert                           assembler files used when compiling with
176*e0c4386eSCy Schubert                           assembler implementations.
177*e0c4386eSCy Schubert        shared_target   => The shared library building method used.
178*e0c4386eSCy Schubert                           This serves multiple purposes:
179*e0c4386eSCy Schubert                           - as index for targets found in shared_info.pl.
180*e0c4386eSCy Schubert                           - as linker script generation selector.
181*e0c4386eSCy Schubert                           To serve both purposes, the index for shared_info.pl
182*e0c4386eSCy Schubert                           should end with '-shared', and this suffix will be
183*e0c4386eSCy Schubert                           removed for use as a linker script generation
184*e0c4386eSCy Schubert                           selector.  Note that the latter is only used if
185*e0c4386eSCy Schubert                           'shared_defflag' is defined.
186*e0c4386eSCy Schubert        build_scheme    => The scheme used to build up a Makefile.
187*e0c4386eSCy Schubert                           In its simplest form, the value is a string
188*e0c4386eSCy Schubert                           with the name of the build scheme.
189*e0c4386eSCy Schubert                           The value may also take the form of a list
190*e0c4386eSCy Schubert                           of strings, if the build_scheme is to have
191*e0c4386eSCy Schubert                           some options.  In this case, the first
192*e0c4386eSCy Schubert                           string in the list is the name of the build
193*e0c4386eSCy Schubert                           scheme.
194*e0c4386eSCy Schubert                           Currently recognised build scheme is "unified".
195*e0c4386eSCy Schubert                           For the "unified" build scheme, this item
196*e0c4386eSCy Schubert                           *must* be an array with the first being the
197*e0c4386eSCy Schubert                           word "unified" and the second being a word
198*e0c4386eSCy Schubert                           to identify the platform family.
199*e0c4386eSCy Schubert
200*e0c4386eSCy Schubert        multilib        => On systems that support having multiple
201*e0c4386eSCy Schubert                           implementations of a library (typically a
202*e0c4386eSCy Schubert                           32-bit and a 64-bit variant), this is used
203*e0c4386eSCy Schubert                           to have the different variants in different
204*e0c4386eSCy Schubert                           directories.
205*e0c4386eSCy Schubert
206*e0c4386eSCy Schubert        bn_ops          => Building options (was just bignum options in
207*e0c4386eSCy Schubert                           the earlier history of this option, hence the
208*e0c4386eSCy Schubert                           name). This is a string of words that describe
209*e0c4386eSCy Schubert                           algorithms' implementation parameters that
210*e0c4386eSCy Schubert                           are optimal for the designated target platform,
211*e0c4386eSCy Schubert                           such as the type of integers used to build up
212*e0c4386eSCy Schubert                           the bignum, different ways to implement certain
213*e0c4386eSCy Schubert                           ciphers and so on. To fully comprehend the
214*e0c4386eSCy Schubert                           meaning, the best is to read the affected
215*e0c4386eSCy Schubert                           source.
216*e0c4386eSCy Schubert                           The valid words are:
217*e0c4386eSCy Schubert
218*e0c4386eSCy Schubert                           THIRTY_TWO_BIT       bignum limbs are 32 bits,
219*e0c4386eSCy Schubert                                                this is default if no
220*e0c4386eSCy Schubert                                                option is specified, it
221*e0c4386eSCy Schubert                                                works on any supported
222*e0c4386eSCy Schubert                                                system [unless "wider"
223*e0c4386eSCy Schubert                                                limb size is implied in
224*e0c4386eSCy Schubert                                                assembly code];
225*e0c4386eSCy Schubert                           BN_LLONG             bignum limbs are 32 bits,
226*e0c4386eSCy Schubert                                                but 64-bit 'unsigned long
227*e0c4386eSCy Schubert                                                long' is used internally
228*e0c4386eSCy Schubert                                                in calculations;
229*e0c4386eSCy Schubert                           SIXTY_FOUR_BIT_LONG  bignum limbs are 64 bits
230*e0c4386eSCy Schubert                                                and sizeof(long) is 8;
231*e0c4386eSCy Schubert                           SIXTY_FOUR_BIT       bignums limbs are 64 bits,
232*e0c4386eSCy Schubert                                                but execution environment
233*e0c4386eSCy Schubert                                                is ILP32;
234*e0c4386eSCy Schubert                           RC4_CHAR             RC4 key schedule is made
235*e0c4386eSCy Schubert                                                up of 'unsigned char's;
236*e0c4386eSCy Schubert                                                Note: should not be used
237*e0c4386eSCy Schubert                                                for new configuration
238*e0c4386eSCy Schubert                                                targets
239*e0c4386eSCy Schubert                           RC4_INT              RC4 key schedule is made
240*e0c4386eSCy Schubert                                                up of 'unsigned int's;
241*e0c4386eSCy Schubert                                                Note: should not be used
242*e0c4386eSCy Schubert                                                for new configuration
243*e0c4386eSCy Schubert                                                targets
244*e0c4386eSCy Schubert
245*e0c4386eSCy Schubert[1] as part of the target configuration, one can have a key called
246*e0c4386eSCy Schubert  `inherit_from` that indicates what other configurations to inherit
247*e0c4386eSCy Schubert  data from.  These are resolved recursively.
248*e0c4386eSCy Schubert
249*e0c4386eSCy Schubert  Inheritance works as a set of default values that can be overridden
250*e0c4386eSCy Schubert  by corresponding key values in the inheriting configuration.
251*e0c4386eSCy Schubert
252*e0c4386eSCy Schubert  Note 1: any configuration table can be used as a template.
253*e0c4386eSCy Schubert  Note 2: pure templates have the attribute `template => 1` and
254*e0c4386eSCy Schubert          cannot be used as build targets.
255*e0c4386eSCy Schubert
256*e0c4386eSCy Schubert  If several configurations are given in the `inherit_from` array,
257*e0c4386eSCy Schubert  the values of same attribute are concatenated with space
258*e0c4386eSCy Schubert  separation.  With this, it's possible to have several smaller
259*e0c4386eSCy Schubert  templates for different configuration aspects that can be combined
260*e0c4386eSCy Schubert  into a complete configuration.
261*e0c4386eSCy Schubert
262*e0c4386eSCy Schubert  Instead of a scalar value or an array, a value can be a code block
263*e0c4386eSCy Schubert  of the form `sub { /* your code here */ }`.  This code block will
264*e0c4386eSCy Schubert  be called with the list of inherited values for that key as
265*e0c4386eSCy Schubert  arguments.  In fact, the concatenation of strings is really done
266*e0c4386eSCy Schubert  by using `sub { join(" ",@_) }` on the list of inherited values.
267*e0c4386eSCy Schubert
268*e0c4386eSCy Schubert  An example:
269*e0c4386eSCy Schubert
270*e0c4386eSCy Schubert        "foo" => {
271*e0c4386eSCy Schubert                template => 1,
272*e0c4386eSCy Schubert                haha => "ha ha",
273*e0c4386eSCy Schubert                hoho => "ho",
274*e0c4386eSCy Schubert                ignored => "This should not appear in the end result",
275*e0c4386eSCy Schubert        },
276*e0c4386eSCy Schubert        "bar" => {
277*e0c4386eSCy Schubert                template => 1,
278*e0c4386eSCy Schubert                haha => "ah",
279*e0c4386eSCy Schubert                hoho => "haho",
280*e0c4386eSCy Schubert                hehe => "hehe"
281*e0c4386eSCy Schubert        },
282*e0c4386eSCy Schubert        "laughter" => {
283*e0c4386eSCy Schubert                inherit_from => [ "foo", "bar" ],
284*e0c4386eSCy Schubert                hehe => sub { join(" ",(@_,"!!!")) },
285*e0c4386eSCy Schubert                ignored => "",
286*e0c4386eSCy Schubert        }
287*e0c4386eSCy Schubert
288*e0c4386eSCy Schubert        The entry for "laughter" will become as follows after processing:
289*e0c4386eSCy Schubert
290*e0c4386eSCy Schubert        "laughter" => {
291*e0c4386eSCy Schubert                haha => "ha ha ah",
292*e0c4386eSCy Schubert                hoho => "ho haho",
293*e0c4386eSCy Schubert                hehe => "hehe !!!",
294*e0c4386eSCy Schubert                ignored => ""
295*e0c4386eSCy Schubert        }
296*e0c4386eSCy Schubert
297*e0c4386eSCy Schubert[2] OpenSSL is built with threading capabilities unless the user
298*e0c4386eSCy Schubert  specifies `no-threads`.  The value of the key `thread_scheme` may
299*e0c4386eSCy Schubert  be `(unknown)`, in which case the user MUST give some compilation
300*e0c4386eSCy Schubert  flags to `Configure`.
301*e0c4386eSCy Schubert
302*e0c4386eSCy Schubert[3] OpenSSL has three types of things to link from object files or
303*e0c4386eSCy Schubert  static libraries:
304*e0c4386eSCy Schubert
305*e0c4386eSCy Schubert  - shared libraries; that would be libcrypto and libssl.
306*e0c4386eSCy Schubert  - shared objects (sometimes called dynamic libraries);  that would
307*e0c4386eSCy Schubert    be the modules.
308*e0c4386eSCy Schubert  - applications; those are apps/openssl and all the test apps.
309*e0c4386eSCy Schubert
310*e0c4386eSCy Schubert  Very roughly speaking, linking is done like this (words in braces
311*e0c4386eSCy Schubert  represent the configuration settings documented at the beginning
312*e0c4386eSCy Schubert  of this file):
313*e0c4386eSCy Schubert
314*e0c4386eSCy Schubert    shared libraries:
315*e0c4386eSCy Schubert        {ld} $(CFLAGS) {lflags} {shared_ldflag} -o libfoo.so \
316*e0c4386eSCy Schubert            foo/something.o foo/somethingelse.o {ex_libs}
317*e0c4386eSCy Schubert
318*e0c4386eSCy Schubert    shared objects:
319*e0c4386eSCy Schubert        {ld} $(CFLAGS) {lflags} {module_ldflags} -o libeng.so \
320*e0c4386eSCy Schubert            blah1.o blah2.o -lcrypto {ex_libs}
321*e0c4386eSCy Schubert
322*e0c4386eSCy Schubert    applications:
323*e0c4386eSCy Schubert        {ld} $(CFLAGS) {lflags} -o app \
324*e0c4386eSCy Schubert            app1.o utils.o -lssl -lcrypto {ex_libs}
325*e0c4386eSCy Schubert
326*e0c4386eSCy Schubert[4] There are variants of these attribute, prefixed with `lib_`,
327*e0c4386eSCy Schubert  `dso_` or `bin_`.  Those variants replace the unprefixed attribute
328*e0c4386eSCy Schubert  when building library, DSO or program modules specifically.
329*e0c4386eSCy Schubert
330*e0c4386eSCy SchubertHistorically, the target configurations came in form of a string with
331*e0c4386eSCy Schubertvalues separated by colons.  This use is deprecated.  The string form
332*e0c4386eSCy Schubertlooked like this:
333*e0c4386eSCy Schubert
334*e0c4386eSCy Schubert    "target" => "{cc}:{cflags}:{unistd}:{thread_cflag}:{sys_id}:{lflags}:
335*e0c4386eSCy Schubert                 {bn_ops}:{cpuid_obj}:{bn_obj}:{ec_obj}:{des_obj}:{aes_obj}:
336*e0c4386eSCy Schubert                 {bf_obj}:{md5_obj}:{sha1_obj}:{cast_obj}:{rc4_obj}:
337*e0c4386eSCy Schubert                 {rmd160_obj}:{rc5_obj}:{wp_obj}:{cmll_obj}:{modes_obj}:
338*e0c4386eSCy Schubert                 {padlock_obj}:{perlasm_scheme}:{dso_scheme}:{shared_target}:
339*e0c4386eSCy Schubert                 {shared_cflag}:{shared_ldflag}:{shared_extension}:{ranlib}:
340*e0c4386eSCy Schubert                 {arflags}:{multilib}"
341*e0c4386eSCy Schubert
342*e0c4386eSCy SchubertBuild info files
343*e0c4386eSCy Schubert================
344*e0c4386eSCy Schubert
345*e0c4386eSCy SchubertThe `build.info` files that are spread over the source tree contain the
346*e0c4386eSCy Schubertminimum information needed to build and distribute OpenSSL.  It uses a
347*e0c4386eSCy Schubertsimple and yet fairly powerful language to determine what needs to be
348*e0c4386eSCy Schubertbuilt, from what sources, and other relationships between files.
349*e0c4386eSCy Schubert
350*e0c4386eSCy SchubertFor every `build.info` file, all file references are relative to the
351*e0c4386eSCy Schubertdirectory of the `build.info` file for source files, and the
352*e0c4386eSCy Schubertcorresponding build directory for built files if the build tree
353*e0c4386eSCy Schubertdiffers from the source tree.
354*e0c4386eSCy Schubert
355*e0c4386eSCy SchubertWhen processed, every line is processed with the perl module
356*e0c4386eSCy SchubertText::Template, using the delimiters `{-` and `-}`.  The hashes
357*e0c4386eSCy Schubert`%config` and `%target` are passed to the perl fragments, along with
358*e0c4386eSCy Schubert$sourcedir and $builddir, which are the locations of the source
359*e0c4386eSCy Schubertdirectory for the current `build.info` file and the corresponding build
360*e0c4386eSCy Schubertdirectory, all relative to the top of the build tree.
361*e0c4386eSCy Schubert
362*e0c4386eSCy Schubert`Configure` only knows inherently about the top `build.info` file.  For
363*e0c4386eSCy Schubertany other directory that has one, further directories to look into
364*e0c4386eSCy Schubertmust be indicated like this:
365*e0c4386eSCy Schubert
366*e0c4386eSCy Schubert    SUBDIRS=something someelse
367*e0c4386eSCy Schubert
368*e0c4386eSCy SchubertOn to things to be built; they are declared by setting specific
369*e0c4386eSCy Schubertvariables:
370*e0c4386eSCy Schubert
371*e0c4386eSCy Schubert    PROGRAMS=foo bar
372*e0c4386eSCy Schubert    LIBS=libsomething
373*e0c4386eSCy Schubert    MODULES=libeng
374*e0c4386eSCy Schubert    SCRIPTS=myhack
375*e0c4386eSCy Schubert
376*e0c4386eSCy SchubertNote that the files mentioned for PROGRAMS, LIBS and MODULES *must* be
377*e0c4386eSCy Schubertwithout extensions.  The build file templates will figure them out.
378*e0c4386eSCy Schubert
379*e0c4386eSCy SchubertFor each thing to be built, it is then possible to say what sources
380*e0c4386eSCy Schubertthey are built from:
381*e0c4386eSCy Schubert
382*e0c4386eSCy Schubert    PROGRAMS=foo bar
383*e0c4386eSCy Schubert    SOURCE[foo]=foo.c common.c
384*e0c4386eSCy Schubert    SOURCE[bar]=bar.c extra.c common.c
385*e0c4386eSCy Schubert
386*e0c4386eSCy SchubertIt's also possible to tell some other dependencies:
387*e0c4386eSCy Schubert
388*e0c4386eSCy Schubert    DEPEND[foo]=libsomething
389*e0c4386eSCy Schubert    DEPEND[libbar]=libsomethingelse
390*e0c4386eSCy Schubert
391*e0c4386eSCy Schubert(it could be argued that 'libsomething' and 'libsomethingelse' are
392*e0c4386eSCy Schubertsource as well.  However, the files given through SOURCE are expected
393*e0c4386eSCy Schubertto be located in the source tree while files given through DEPEND are
394*e0c4386eSCy Schubertexpected to be located in the build tree)
395*e0c4386eSCy Schubert
396*e0c4386eSCy SchubertIt's also possible to depend on static libraries explicitly:
397*e0c4386eSCy Schubert
398*e0c4386eSCy Schubert    DEPEND[foo]=libsomething.a
399*e0c4386eSCy Schubert    DEPEND[libbar]=libsomethingelse.a
400*e0c4386eSCy Schubert
401*e0c4386eSCy SchubertThis should be rarely used, and care should be taken to make sure it's
402*e0c4386eSCy Schubertonly used when supported.  For example, native Windows build doesn't
403*e0c4386eSCy Schubertsupport building static libraries and DLLs at the same time, so using
404*e0c4386eSCy Schubertstatic libraries on Windows can only be done when configured
405*e0c4386eSCy Schubert`no-shared`.
406*e0c4386eSCy Schubert
407*e0c4386eSCy SchubertIn some cases, it's desirable to include some source files in the
408*e0c4386eSCy Schubertshared form of a library only:
409*e0c4386eSCy Schubert
410*e0c4386eSCy Schubert    SHARED_SOURCE[libfoo]=dllmain.c
411*e0c4386eSCy Schubert
412*e0c4386eSCy SchubertFor any file to be built, it's also possible to tell what extra
413*e0c4386eSCy Schubertinclude paths the build of their source files should use:
414*e0c4386eSCy Schubert
415*e0c4386eSCy Schubert    INCLUDE[foo]=include
416*e0c4386eSCy Schubert
417*e0c4386eSCy SchubertIt's also possible to specify C macros that should be defined:
418*e0c4386eSCy Schubert
419*e0c4386eSCy Schubert    DEFINE[foo]=FOO BAR=1
420*e0c4386eSCy Schubert
421*e0c4386eSCy SchubertIn some cases, one might want to generate some source files from
422*e0c4386eSCy Schubertothers, that's done as follows:
423*e0c4386eSCy Schubert
424*e0c4386eSCy Schubert    GENERATE[foo.s]=asm/something.pl $(CFLAGS)
425*e0c4386eSCy Schubert    GENERATE[bar.s]=asm/bar.S
426*e0c4386eSCy Schubert
427*e0c4386eSCy SchubertThe value of each GENERATE line is a command line or part of it.
428*e0c4386eSCy SchubertConfigure places no rules on the command line, except that the first
429*e0c4386eSCy Schubertitem must be the generator file.  It is, however, entirely up to the
430*e0c4386eSCy Schubertbuild file template to define exactly how those command lines should
431*e0c4386eSCy Schubertbe handled, how the output is captured and so on.
432*e0c4386eSCy Schubert
433*e0c4386eSCy SchubertSometimes, the generator file itself depends on other files, for
434*e0c4386eSCy Schubertexample if it is a perl script that depends on other perl modules.
435*e0c4386eSCy SchubertThis can be expressed using DEPEND like this:
436*e0c4386eSCy Schubert
437*e0c4386eSCy Schubert    DEPEND[asm/something.pl]=../perlasm/Foo.pm
438*e0c4386eSCy Schubert
439*e0c4386eSCy SchubertThere may also be cases where the exact file isn't easily specified,
440*e0c4386eSCy Schubertbut an inclusion directory still needs to be specified.  INCLUDE can
441*e0c4386eSCy Schubertbe used in that case:
442*e0c4386eSCy Schubert
443*e0c4386eSCy Schubert    INCLUDE[asm/something.pl]=../perlasm
444*e0c4386eSCy Schubert
445*e0c4386eSCy SchubertNOTE: GENERATE lines are limited to one command only per GENERATE.
446*e0c4386eSCy Schubert
447*e0c4386eSCy SchubertFinally, you can have some simple conditional use of the `build.info`
448*e0c4386eSCy Schubertinformation, looking like this:
449*e0c4386eSCy Schubert
450*e0c4386eSCy Schubert    IF[1]
451*e0c4386eSCy Schubert     something
452*e0c4386eSCy Schubert    ELSIF[2]
453*e0c4386eSCy Schubert     something other
454*e0c4386eSCy Schubert    ELSE
455*e0c4386eSCy Schubert     something else
456*e0c4386eSCy Schubert    ENDIF
457*e0c4386eSCy Schubert
458*e0c4386eSCy SchubertThe expression in square brackets is interpreted as a string in perl,
459*e0c4386eSCy Schubertand will be seen as true if perl thinks it is, otherwise false.  For
460*e0c4386eSCy Schubertexample, the above would have "something" used, since 1 is true.
461*e0c4386eSCy Schubert
462*e0c4386eSCy SchubertTogether with the use of Text::Template, this can be used as
463*e0c4386eSCy Schubertconditions based on something in the passed variables, for example:
464*e0c4386eSCy Schubert
465*e0c4386eSCy Schubert    IF[{- $disabled{shared} -}]
466*e0c4386eSCy Schubert      LIBS=libcrypto
467*e0c4386eSCy Schubert      SOURCE[libcrypto]=...
468*e0c4386eSCy Schubert    ELSE
469*e0c4386eSCy Schubert      LIBS=libfoo
470*e0c4386eSCy Schubert      SOURCE[libfoo]=...
471*e0c4386eSCy Schubert    ENDIF
472*e0c4386eSCy Schubert
473*e0c4386eSCy SchubertBuild-file programming with the "unified" build system
474*e0c4386eSCy Schubert======================================================
475*e0c4386eSCy Schubert
476*e0c4386eSCy Schubert"Build files" are called `Makefile` on Unix-like operating systems,
477*e0c4386eSCy Schubert`descrip.mms` for MMS on VMS, `makefile` for `nmake` on Windows, etc.
478*e0c4386eSCy Schubert
479*e0c4386eSCy SchubertTo use the "unified" build system, the target configuration needs to
480*e0c4386eSCy Schubertset the three items `build_scheme`, `build_file` and `build_command`.
481*e0c4386eSCy SchubertIn the rest of this section, we will assume that `build_scheme` is set
482*e0c4386eSCy Schubertto "unified" (see the configurations documentation above for the
483*e0c4386eSCy Schubertdetails).
484*e0c4386eSCy Schubert
485*e0c4386eSCy SchubertFor any name given by `build_file`, the "unified" system expects a
486*e0c4386eSCy Schuberttemplate file in `Configurations/` named like the build file, with
487*e0c4386eSCy Schubert`.tmpl` appended, or in case of possible ambiguity, a combination of
488*e0c4386eSCy Schubertthe second `build_scheme` list item and the `build_file` name.  For
489*e0c4386eSCy Schubertexample, if `build_file` is set to `Makefile`, the template could be
490*e0c4386eSCy Schubert`Configurations/Makefile.tmpl` or `Configurations/unix-Makefile.tmpl`.
491*e0c4386eSCy SchubertIn case both `Configurations/unix-Makefile.tmpl` and
492*e0c4386eSCy Schubert`Configurations/Makefile.tmpl` are present, the former takes precedence.
493*e0c4386eSCy Schubert
494*e0c4386eSCy SchubertThe build-file template is processed with the perl module
495*e0c4386eSCy SchubertText::Template, using `{-` and `-}` as delimiters that enclose the
496*e0c4386eSCy Schubertperl code fragments that generate configuration-dependent content.
497*e0c4386eSCy SchubertThose perl fragments have access to all the hash variables from
498*e0c4386eSCy Schubertconfigdata.pem.
499*e0c4386eSCy Schubert
500*e0c4386eSCy SchubertThe build-file template is expected to define at least the following
501*e0c4386eSCy Schubertperl functions in a perl code fragment enclosed with `{-` and `-}`.
502*e0c4386eSCy SchubertThey are all expected to return a string with the lines they produce.
503*e0c4386eSCy Schubert
504*e0c4386eSCy Schubert    generatesrc - function that produces build file lines to generate
505*e0c4386eSCy Schubert                  a source file from some input.
506*e0c4386eSCy Schubert
507*e0c4386eSCy Schubert                  It's called like this:
508*e0c4386eSCy Schubert
509*e0c4386eSCy Schubert                        generatesrc(src => "PATH/TO/tobegenerated",
510*e0c4386eSCy Schubert                                    generator => [ "generatingfile", ... ]
511*e0c4386eSCy Schubert                                    generator_incs => [ "INCL/PATH", ... ]
512*e0c4386eSCy Schubert                                    generator_deps => [ "dep1", ... ]
513*e0c4386eSCy Schubert                                    generator => [ "generatingfile", ... ]
514*e0c4386eSCy Schubert                                    incs => [ "INCL/PATH", ... ],
515*e0c4386eSCy Schubert                                    deps => [ "dep1", ... ],
516*e0c4386eSCy Schubert                                    intent => one of "libs", "dso", "bin" );
517*e0c4386eSCy Schubert
518*e0c4386eSCy Schubert                  'src' has the name of the file to be generated.
519*e0c4386eSCy Schubert                  'generator' is the command or part of command to
520*e0c4386eSCy Schubert                  generate the file, of which the first item is
521*e0c4386eSCy Schubert                  expected to be the file to generate from.
522*e0c4386eSCy Schubert                  generatesrc() is expected to analyse and figure out
523*e0c4386eSCy Schubert                  exactly how to apply that file and how to capture
524*e0c4386eSCy Schubert                  the result.  'generator_incs' and 'generator_deps'
525*e0c4386eSCy Schubert                  are include directories and files that the generator
526*e0c4386eSCy Schubert                  file itself depends on.  'incs' and 'deps' are
527*e0c4386eSCy Schubert                  include directories and files that are used if $(CC)
528*e0c4386eSCy Schubert                  is used as an intermediary step when generating the
529*e0c4386eSCy Schubert                  end product (the file indicated by 'src').  'intent'
530*e0c4386eSCy Schubert                  indicates what the generated file is going to be
531*e0c4386eSCy Schubert                  used for.
532*e0c4386eSCy Schubert
533*e0c4386eSCy Schubert    src2obj     - function that produces build file lines to build an
534*e0c4386eSCy Schubert                  object file from source files and associated data.
535*e0c4386eSCy Schubert
536*e0c4386eSCy Schubert                  It's called like this:
537*e0c4386eSCy Schubert
538*e0c4386eSCy Schubert                        src2obj(obj => "PATH/TO/objectfile",
539*e0c4386eSCy Schubert                                srcs => [ "PATH/TO/sourcefile", ... ],
540*e0c4386eSCy Schubert                                deps => [ "dep1", ... ],
541*e0c4386eSCy Schubert                                incs => [ "INCL/PATH", ... ]
542*e0c4386eSCy Schubert                                intent => one of "lib", "dso", "bin" );
543*e0c4386eSCy Schubert
544*e0c4386eSCy Schubert                  'obj' has the intended object file with '.o'
545*e0c4386eSCy Schubert                  extension, src2obj() is expected to change it to
546*e0c4386eSCy Schubert                  something more suitable for the platform.
547*e0c4386eSCy Schubert                  'srcs' has the list of source files to build the
548*e0c4386eSCy Schubert                  object file, with the first item being the source
549*e0c4386eSCy Schubert                  file that directly corresponds to the object file.
550*e0c4386eSCy Schubert                  'deps' is a list of explicit dependencies.  'incs'
551*e0c4386eSCy Schubert                  is a list of include file directories.  Finally,
552*e0c4386eSCy Schubert                  'intent' indicates what this object file is going
553*e0c4386eSCy Schubert                  to be used for.
554*e0c4386eSCy Schubert
555*e0c4386eSCy Schubert    obj2lib     - function that produces build file lines to build a
556*e0c4386eSCy Schubert                  static library file ("libfoo.a" in Unix terms) from
557*e0c4386eSCy Schubert                  object files.
558*e0c4386eSCy Schubert
559*e0c4386eSCy Schubert                  called like this:
560*e0c4386eSCy Schubert
561*e0c4386eSCy Schubert                        obj2lib(lib => "PATH/TO/libfile",
562*e0c4386eSCy Schubert                                objs => [ "PATH/TO/objectfile", ... ]);
563*e0c4386eSCy Schubert
564*e0c4386eSCy Schubert                  'lib' has the intended library file name *without*
565*e0c4386eSCy Schubert                  extension, obj2lib is expected to add that.  'objs'
566*e0c4386eSCy Schubert                  has the list of object files to build this library.
567*e0c4386eSCy Schubert
568*e0c4386eSCy Schubert    libobj2shlib - backward compatibility function that's used the
569*e0c4386eSCy Schubert                  same way as obj2shlib (described next), and was
570*e0c4386eSCy Schubert                  expected to build the shared library from the
571*e0c4386eSCy Schubert                  corresponding static library when that was suitable.
572*e0c4386eSCy Schubert                  NOTE: building a shared library from a static
573*e0c4386eSCy Schubert                  library is now DEPRECATED, as they no longer share
574*e0c4386eSCy Schubert                  object files.  Attempting to do this will fail.
575*e0c4386eSCy Schubert
576*e0c4386eSCy Schubert    obj2shlib   - function that produces build file lines to build a
577*e0c4386eSCy Schubert                  shareable object library file ("libfoo.so" in Unix
578*e0c4386eSCy Schubert                  terms) from the corresponding object files.
579*e0c4386eSCy Schubert
580*e0c4386eSCy Schubert                  called like this:
581*e0c4386eSCy Schubert
582*e0c4386eSCy Schubert                        obj2shlib(shlib => "PATH/TO/shlibfile",
583*e0c4386eSCy Schubert                                  lib => "PATH/TO/libfile",
584*e0c4386eSCy Schubert                                  objs => [ "PATH/TO/objectfile", ... ],
585*e0c4386eSCy Schubert                                  deps => [ "PATH/TO/otherlibfile", ... ]);
586*e0c4386eSCy Schubert
587*e0c4386eSCy Schubert                  'lib' has the base (static) library ffile name
588*e0c4386eSCy Schubert                  *without* extension.  This is useful in case
589*e0c4386eSCy Schubert                  supporting files are needed (such as import
590*e0c4386eSCy Schubert                  libraries on Windows).
591*e0c4386eSCy Schubert                  'shlib' has the corresponding shared library name
592*e0c4386eSCy Schubert                  *without* extension.  'deps' has the list of other
593*e0c4386eSCy Schubert                  libraries (also *without* extension) this library
594*e0c4386eSCy Schubert                  needs to be linked with.  'objs' has the list of
595*e0c4386eSCy Schubert                  object files to build this library.
596*e0c4386eSCy Schubert
597*e0c4386eSCy Schubert    obj2dso     - function that produces build file lines to build a
598*e0c4386eSCy Schubert                  dynamic shared object file from object files.
599*e0c4386eSCy Schubert
600*e0c4386eSCy Schubert                  called like this:
601*e0c4386eSCy Schubert
602*e0c4386eSCy Schubert                        obj2dso(lib => "PATH/TO/libfile",
603*e0c4386eSCy Schubert                                objs => [ "PATH/TO/objectfile", ... ],
604*e0c4386eSCy Schubert                                deps => [ "PATH/TO/otherlibfile",
605*e0c4386eSCy Schubert                                ... ]);
606*e0c4386eSCy Schubert
607*e0c4386eSCy Schubert                  This is almost the same as obj2shlib, but the
608*e0c4386eSCy Schubert                  intent is to build a shareable library that can be
609*e0c4386eSCy Schubert                  loaded in runtime (a "plugin"...).
610*e0c4386eSCy Schubert
611*e0c4386eSCy Schubert    obj2bin     - function that produces build file lines to build an
612*e0c4386eSCy Schubert                  executable file from object files.
613*e0c4386eSCy Schubert
614*e0c4386eSCy Schubert                  called like this:
615*e0c4386eSCy Schubert
616*e0c4386eSCy Schubert                        obj2bin(bin => "PATH/TO/binfile",
617*e0c4386eSCy Schubert                                objs => [ "PATH/TO/objectfile", ... ],
618*e0c4386eSCy Schubert                                deps => [ "PATH/TO/libfile", ... ]);
619*e0c4386eSCy Schubert
620*e0c4386eSCy Schubert                  'bin' has the intended executable file name
621*e0c4386eSCy Schubert                  *without* extension, obj2bin is expected to add
622*e0c4386eSCy Schubert                  that.  'objs' has the list of object files to build
623*e0c4386eSCy Schubert                  this library.  'deps' has the list of library files
624*e0c4386eSCy Schubert                  (also *without* extension) that the programs needs
625*e0c4386eSCy Schubert                  to be linked with.
626*e0c4386eSCy Schubert
627*e0c4386eSCy Schubert    in2script   - function that produces build file lines to build a
628*e0c4386eSCy Schubert                  script file from some input.
629*e0c4386eSCy Schubert
630*e0c4386eSCy Schubert                  called like this:
631*e0c4386eSCy Schubert
632*e0c4386eSCy Schubert                        in2script(script => "PATH/TO/scriptfile",
633*e0c4386eSCy Schubert                                  sources => [ "PATH/TO/infile", ... ]);
634*e0c4386eSCy Schubert
635*e0c4386eSCy Schubert                  'script' has the intended script file name.
636*e0c4386eSCy Schubert                  'sources' has the list of source files to build the
637*e0c4386eSCy Schubert                  resulting script from.
638*e0c4386eSCy Schubert
639*e0c4386eSCy SchubertIn all cases, file file paths are relative to the build tree top, and
640*e0c4386eSCy Schubertthe build file actions run with the build tree top as current working
641*e0c4386eSCy Schubertdirectory.
642*e0c4386eSCy Schubert
643*e0c4386eSCy SchubertMake sure to end the section with these functions with a string that
644*e0c4386eSCy Schubertyou thing is appropriate for the resulting build file.  If nothing
645*e0c4386eSCy Schubertelse, end it like this:
646*e0c4386eSCy Schubert
647*e0c4386eSCy Schubert      "";       # Make sure no lingering values end up in the Makefile
648*e0c4386eSCy Schubert    -}
649*e0c4386eSCy Schubert
650*e0c4386eSCy SchubertConfigure helper scripts
651*e0c4386eSCy Schubert========================
652*e0c4386eSCy Schubert
653*e0c4386eSCy SchubertConfigure uses helper scripts in this directory:
654*e0c4386eSCy Schubert
655*e0c4386eSCy SchubertChecker scripts
656*e0c4386eSCy Schubert---------------
657*e0c4386eSCy Schubert
658*e0c4386eSCy SchubertThese scripts are per platform family, to check the integrity of the
659*e0c4386eSCy Schuberttools used for configuration and building.  The checker script used is
660*e0c4386eSCy Schuberteither `{build_platform}-{build_file}-checker.pm` or
661*e0c4386eSCy Schubert`{build_platform}-checker.pm`, where `{build_platform}` is the second
662*e0c4386eSCy Schubert`build_scheme` list element from the configuration target data, and
663*e0c4386eSCy Schubert`{build_file}` is `build_file` from the same target data.
664*e0c4386eSCy Schubert
665*e0c4386eSCy SchubertIf the check succeeds, the script is expected to end with a non-zero
666*e0c4386eSCy Schubertexpression.  If the check fails, the script can end with a zero, or
667*e0c4386eSCy Schubertwith a `die`.
668