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