1# -*- Mode: perl -*- 2my %targets=( 3 DEFAULTS => { 4 template => 1, 5 6 cflags => "", 7 cppflags => "", 8 lflags => "", 9 defines => [], 10 includes => [], 11 lib_cflags => "", 12 lib_cppflags => "", 13 lib_defines => [], 14 thread_scheme => "(unknown)", # Assume we don't know 15 thread_defines => [], 16 17 apps_aux_src => "", 18 apps_init_src => "", 19 cpuid_asm_src => "mem_clr.c", 20 uplink_aux_src => "", 21 bn_asm_src => "bn_asm.c", 22 ec_asm_src => "", 23 des_asm_src => "des_enc.c fcrypt_b.c", 24 aes_asm_src => "aes_core.c aes_cbc.c", 25 bf_asm_src => "bf_enc.c", 26 md5_asm_src => "", 27 cast_asm_src => "c_enc.c", 28 rc4_asm_src => "rc4_enc.c rc4_skey.c", 29 rmd160_asm_src => "", 30 rc5_asm_src => "rc5_enc.c", 31 wp_asm_src => "wp_block.c", 32 cmll_asm_src => "camellia.c cmll_misc.c cmll_cbc.c", 33 modes_asm_src => "", 34 padlock_asm_src => "", 35 chacha_asm_src => "chacha_enc.c", 36 poly1305_asm_src => "", 37 keccak1600_asm_src => "keccak1600.c", 38 39 unistd => "<unistd.h>", 40 shared_target => "", 41 shared_cflag => "", 42 shared_defines => [], 43 shared_ldflag => "", 44 shared_rcflag => "", 45 shared_extension => "", 46 47 #### Defaults for the benefit of the config targets who don't inherit 48 #### a BASE and assume Unix defaults 49 #### THESE WILL DISAPPEAR IN OpenSSL 1.2 50 build_scheme => [ "unified", "unix" ], 51 build_file => "Makefile", 52 53 AR => "ar", 54 ARFLAGS => "r", 55 CC => "cc", 56 HASHBANGPERL => "/usr/bin/env perl", 57 RANLIB => sub { which("$config{cross_compile_prefix}ranlib") 58 ? "ranlib" : "" }, 59 RC => "windres", 60 61 #### THESE WILL BE ENABLED IN OpenSSL 1.2 62 #HASHBANGPERL => "PERL", # Only Unix actually cares 63 }, 64 65 BASE_common => { 66 template => 1, 67 68 enable => [], 69 disable => [], 70 71 defines => 72 sub { 73 my @defs = (); 74 push @defs, "ZLIB" unless $disabled{zlib}; 75 push @defs, "ZLIB_SHARED" unless $disabled{"zlib-dynamic"}; 76 return [ @defs ]; 77 }, 78 includes => 79 sub { 80 my @incs = (); 81 push @incs, $withargs{zlib_include} 82 if !$disabled{zlib} && $withargs{zlib_include}; 83 return [ @incs ]; 84 }, 85 }, 86 87 BASE_unix => { 88 inherit_from => [ "BASE_common" ], 89 template => 1, 90 91 AR => "ar", 92 ARFLAGS => "r", 93 CC => "cc", 94 lflags => 95 sub { $withargs{zlib_lib} ? "-L".$withargs{zlib_lib} : () }, 96 ex_libs => 97 sub { !defined($disabled{zlib}) 98 && defined($disabled{"zlib-dynamic"}) 99 ? "-lz" : () }, 100 HASHBANGPERL => "/usr/bin/env perl", # Only Unix actually cares 101 RANLIB => sub { which("$config{cross_compile_prefix}ranlib") 102 ? "ranlib" : "" }, 103 RC => "windres", 104 105 shared_extension => ".so", 106 107 build_scheme => [ "unified", "unix" ], 108 build_file => "Makefile", 109 }, 110 111 BASE_Windows => { 112 inherit_from => [ "BASE_common" ], 113 template => 1, 114 115 lib_defines => 116 sub { 117 my @defs = (); 118 unless ($disabled{"zlib-dynamic"}) { 119 my $zlib = $withargs{zlib_lib} // "ZLIB1"; 120 push @defs, 'LIBZ=' . (quotify("perl", $zlib))[0]; 121 } 122 return [ @defs ]; 123 }, 124 ex_libs => 125 sub { 126 unless ($disabled{zlib}) { 127 if (defined($disabled{"zlib-dynamic"})) { 128 return $withargs{zlib_lib} // "ZLIB1"; 129 } 130 } 131 return (); 132 }, 133 134 LD => "link", 135 LDFLAGS => "/nologo", 136 ldoutflag => "/out:", 137 AR => "lib", 138 ARFLAGS => "/nologo", 139 aroutflag => "/out:", 140 RC => "rc", 141 rcoutflag => "/fo", 142 MT => "mt", 143 MTFLAGS => "-nologo", 144 mtinflag => "-manifest ", 145 mtoutflag => "-outputresource:", 146 147 shared_extension => ".dll", 148 149 build_file => "makefile", 150 build_scheme => [ "unified", "windows" ], 151 }, 152 153 BASE_VMS => { 154 inherit_from => [ "BASE_common" ], 155 template => 1, 156 157 includes => 158 add(sub { 159 my @incs = (); 160 # GNV$ZLIB_INCLUDE is the standard logical name for later 161 # zlib incarnations. 162 push @incs, 'GNV$ZLIB_INCLUDE:' 163 if !$disabled{zlib} && !$withargs{zlib_include}; 164 return [ @incs ]; 165 }), 166 167 shared_extension => ".exe", 168 169 build_file => "descrip.mms", 170 build_scheme => [ "unified", "VMS" ], 171 }, 172 173 uplink_common => { 174 template => 1, 175 apps_init_src => add("../ms/applink.c"), 176 uplink_aux_src => add("../ms/uplink.c"), 177 defines => add("OPENSSL_USE_APPLINK"), 178 }, 179 x86_uplink => { 180 inherit_from => [ "uplink_common" ], 181 template => 1, 182 uplink_aux_src => add("uplink-x86.s"), 183 }, 184 x86_64_uplink => { 185 inherit_from => [ "uplink_common" ], 186 template => 1, 187 uplink_aux_src => add("uplink-x86_64.s"), 188 }, 189 ia64_uplink => { 190 inherit_from => [ "uplink_common" ], 191 template => 1, 192 uplink_aux_src => add("uplink-ia64.s"), 193 }, 194 195 x86_asm => { 196 template => 1, 197 cpuid_asm_src => "x86cpuid.s", 198 bn_asm_src => "bn-586.s co-586.s x86-mont.s x86-gf2m.s", 199 ec_asm_src => "ecp_nistz256.c ecp_nistz256-x86.s", 200 des_asm_src => "des-586.s crypt586.s", 201 aes_asm_src => "aes_core.c aes_cbc.c vpaes-x86.s aesni-x86.s", 202 bf_asm_src => "bf-586.s", 203 md5_asm_src => "md5-586.s", 204 cast_asm_src => "cast-586.s", 205 sha1_asm_src => "sha1-586.s sha256-586.s sha512-586.s", 206 rc4_asm_src => "rc4-586.s", 207 rmd160_asm_src => "rmd-586.s", 208 rc5_asm_src => "rc5-586.s", 209 wp_asm_src => "wp_block.c wp-mmx.s", 210 cmll_asm_src => "cmll-x86.s", 211 modes_asm_src => "ghash-x86.s", 212 padlock_asm_src => "e_padlock-x86.s", 213 chacha_asm_src => "chacha-x86.s", 214 poly1305_asm_src=> "poly1305-x86.s", 215 }, 216 x86_elf_asm => { 217 template => 1, 218 inherit_from => [ "x86_asm" ], 219 perlasm_scheme => "elf" 220 }, 221 x86_64_asm => { 222 template => 1, 223 cpuid_asm_src => "x86_64cpuid.s", 224 bn_asm_src => "asm/x86_64-gcc.c x86_64-mont.s x86_64-mont5.s x86_64-gf2m.s rsaz_exp.c rsaz-x86_64.s rsaz-avx2.s", 225 ec_asm_src => "ecp_nistz256.c ecp_nistz256-x86_64.s x25519-x86_64.s", 226 aes_asm_src => "aes_core.c aes_cbc.c vpaes-x86_64.s aesni-x86_64.s aesni-sha1-x86_64.s aesni-sha256-x86_64.s aesni-mb-x86_64.s", 227 md5_asm_src => "md5-x86_64.s", 228 sha1_asm_src => "sha1-x86_64.s sha256-x86_64.s sha512-x86_64.s sha1-mb-x86_64.s sha256-mb-x86_64.s", 229 rc4_asm_src => "rc4-x86_64.s rc4-md5-x86_64.s", 230 wp_asm_src => "wp-x86_64.s", 231 cmll_asm_src => "cmll-x86_64.s cmll_misc.c", 232 modes_asm_src => "ghash-x86_64.s aesni-gcm-x86_64.s", 233 padlock_asm_src => "e_padlock-x86_64.s", 234 chacha_asm_src => "chacha-x86_64.s", 235 poly1305_asm_src=> "poly1305-x86_64.s", 236 keccak1600_asm_src => "keccak1600-x86_64.s", 237 }, 238 ia64_asm => { 239 template => 1, 240 cpuid_asm_src => "ia64cpuid.s", 241 bn_asm_src => "bn-ia64.s ia64-mont.s", 242 aes_asm_src => "aes_core.c aes_cbc.c aes-ia64.s", 243 sha1_asm_src => "sha1-ia64.s sha256-ia64.s sha512-ia64.s", 244 modes_asm_src => "ghash-ia64.s", 245 perlasm_scheme => "void" 246 }, 247 sparcv9_asm => { 248 template => 1, 249 cpuid_asm_src => "sparcv9cap.c sparccpuid.S", 250 bn_asm_src => "asm/sparcv8plus.S sparcv9-mont.S sparcv9a-mont.S vis3-mont.S sparct4-mont.S sparcv9-gf2m.S", 251 ec_asm_src => "ecp_nistz256.c ecp_nistz256-sparcv9.S", 252 des_asm_src => "des_enc-sparc.S fcrypt_b.c dest4-sparcv9.S", 253 aes_asm_src => "aes_core.c aes_cbc.c aes-sparcv9.S aest4-sparcv9.S aesfx-sparcv9.S", 254 md5_asm_src => "md5-sparcv9.S", 255 sha1_asm_src => "sha1-sparcv9.S sha256-sparcv9.S sha512-sparcv9.S", 256 cmll_asm_src => "camellia.c cmll_misc.c cmll_cbc.c cmllt4-sparcv9.S", 257 modes_asm_src => "ghash-sparcv9.S", 258 poly1305_asm_src=> "poly1305-sparcv9.S", 259 perlasm_scheme => "void" 260 }, 261 sparcv8_asm => { 262 template => 1, 263 cpuid_asm_src => "", 264 bn_asm_src => "asm/sparcv8.S", 265 des_asm_src => "des_enc-sparc.S fcrypt_b.c", 266 perlasm_scheme => "void" 267 }, 268 alpha_asm => { 269 template => 1, 270 cpuid_asm_src => "alphacpuid.s", 271 bn_asm_src => "bn_asm.c alpha-mont.S", 272 sha1_asm_src => "sha1-alpha.S", 273 modes_asm_src => "ghash-alpha.S", 274 perlasm_scheme => "void" 275 }, 276 mips32_asm => { 277 template => 1, 278 bn_asm_src => "bn-mips.S mips-mont.S", 279 aes_asm_src => "aes_cbc.c aes-mips.S", 280 sha1_asm_src => "sha1-mips.S sha256-mips.S", 281 }, 282 mips64_asm => { 283 inherit_from => [ "mips32_asm" ], 284 template => 1, 285 sha1_asm_src => add("sha512-mips.S"), 286 poly1305_asm_src=> "poly1305-mips.S", 287 }, 288 s390x_asm => { 289 template => 1, 290 cpuid_asm_src => "s390xcap.c s390xcpuid.S", 291 bn_asm_src => "asm/s390x.S s390x-mont.S s390x-gf2m.s", 292 aes_asm_src => "aes-s390x.S aes-ctr.fake aes-xts.fake", 293 sha1_asm_src => "sha1-s390x.S sha256-s390x.S sha512-s390x.S", 294 rc4_asm_src => "rc4-s390x.s", 295 modes_asm_src => "ghash-s390x.S", 296 chacha_asm_src => "chacha-s390x.S", 297 poly1305_asm_src=> "poly1305-s390x.S", 298 keccak1600_asm_src => "keccak1600-s390x.S", 299 }, 300 armv4_asm => { 301 template => 1, 302 cpuid_asm_src => "armcap.c armv4cpuid.S", 303 bn_asm_src => "bn_asm.c armv4-mont.S armv4-gf2m.S", 304 ec_asm_src => "ecp_nistz256.c ecp_nistz256-armv4.S", 305 aes_asm_src => "aes_cbc.c aes-armv4.S bsaes-armv7.S aesv8-armx.S", 306 sha1_asm_src => "sha1-armv4-large.S sha256-armv4.S sha512-armv4.S", 307 modes_asm_src => "ghash-armv4.S ghashv8-armx.S", 308 chacha_asm_src => "chacha-armv4.S", 309 poly1305_asm_src=> "poly1305-armv4.S", 310 keccak1600_asm_src => "keccak1600-armv4.S", 311 perlasm_scheme => "void" 312 }, 313 aarch64_asm => { 314 template => 1, 315 cpuid_asm_src => "armcap.c arm64cpuid.S", 316 ec_asm_src => "ecp_nistz256.c ecp_nistz256-armv8.S", 317 bn_asm_src => "bn_asm.c armv8-mont.S", 318 aes_asm_src => "aes_core.c aes_cbc.c aesv8-armx.S vpaes-armv8.S", 319 sha1_asm_src => "sha1-armv8.S sha256-armv8.S sha512-armv8.S", 320 modes_asm_src => "ghashv8-armx.S", 321 chacha_asm_src => "chacha-armv8.S", 322 poly1305_asm_src=> "poly1305-armv8.S", 323 keccak1600_asm_src => "keccak1600-armv8.S", 324 }, 325 parisc11_asm => { 326 template => 1, 327 cpuid_asm_src => "pariscid.s", 328 bn_asm_src => "bn_asm.c parisc-mont.s", 329 aes_asm_src => "aes_core.c aes_cbc.c aes-parisc.s", 330 sha1_asm_src => "sha1-parisc.s sha256-parisc.s sha512-parisc.s", 331 rc4_asm_src => "rc4-parisc.s", 332 modes_asm_src => "ghash-parisc.s", 333 perlasm_scheme => "32" 334 }, 335 parisc20_64_asm => { 336 template => 1, 337 inherit_from => [ "parisc11_asm" ], 338 perlasm_scheme => "64", 339 }, 340 ppc32_asm => { 341 template => 1, 342 cpuid_asm_src => "ppccpuid.s ppccap.c", 343 bn_asm_src => "bn-ppc.s ppc-mont.s", 344 aes_asm_src => "aes_core.c aes_cbc.c aes-ppc.s vpaes-ppc.s aesp8-ppc.s", 345 sha1_asm_src => "sha1-ppc.s sha256-ppc.s sha512-ppc.s sha256p8-ppc.s sha512p8-ppc.s", 346 modes_asm_src => "ghashp8-ppc.s", 347 chacha_asm_src => "chacha-ppc.s", 348 poly1305_asm_src=> "poly1305-ppc.s poly1305-ppcfp.s", 349 }, 350 ppc64_asm => { 351 inherit_from => [ "ppc32_asm" ], 352 template => 1, 353 ec_asm_src => "ecp_nistz256.c ecp_nistz256-ppc64.s x25519-ppc64.s", 354 keccak1600_asm_src => "keccak1600-ppc64.s", 355 }, 356); 357