1## -*- mode: perl; -*- 2## Standard openssl configuration targets. 3 4# Helper functions for the Windows configs 5my $vc_win64a_info = {}; 6sub vc_win64a_info { 7 unless (%$vc_win64a_info) { 8 if (`nasm -v 2>NUL` =~ /NASM version ([0-9]+\.[0-9]+)/ && $1 >= 2.0) { 9 $vc_win64a_info = { AS => "nasm", 10 ASFLAGS => "-g", 11 asflags => "-Ox -f win64 -DNEAR", 12 asoutflag => "-o " }; 13 } elsif ($disabled{asm}) { 14 # assembler is still used to compile uplink shim 15 $vc_win64a_info = { AS => "ml64", 16 ASFLAGS => "/nologo /Zi", 17 asflags => "/c /Cp /Cx", 18 asoutflag => "/Fo" }; 19 } else { 20 $die->("NASM not found - make sure it's installed and available on %PATH%\n"); 21 $vc_win64a_info = { AS => "{unknown}", 22 ASFLAGS => "", 23 asflags => "", 24 asoutflag => "" }; 25 } 26 } 27 return $vc_win64a_info; 28} 29 30my $vc_win32_info = {}; 31sub vc_win32_info { 32 unless (%$vc_win32_info) { 33 my $ver=`nasm -v 2>NUL`; 34 my $vew=`nasmw -v 2>NUL`; 35 if ($ver ne "" || $vew ne "") { 36 $vc_win32_info = { AS => $ver ge $vew ? "nasm" : "nasmw", 37 ASFLAGS => "", 38 asflags => "-f win32", 39 asoutflag => "-o ", 40 perlasm_scheme => "win32n" }; 41 } elsif ($disabled{asm}) { 42 # not actually used, uplink shim is inlined into C code 43 $vc_win32_info = { AS => "ml", 44 ASFLAGS => "/nologo /Zi", 45 asflags => "/Cp /coff /c /Cx", 46 asoutflag => "/Fo", 47 perlasm_scheme => "win32" }; 48 } else { 49 $die->("NASM not found - make sure it's installed and available on %PATH%\n"); 50 $vc_win32_info = { AS => "{unknown}", 51 ASFLAGS => "", 52 asflags => "", 53 asoutflag => "", 54 perlasm_scheme => "win32" }; 55 } 56 } 57 return $vc_win32_info; 58} 59 60my $vc_wince_info = {}; 61sub vc_wince_info { 62 unless (%$vc_wince_info) { 63 # sanity check 64 $die->('%OSVERSION% is not defined') if (!defined(env('OSVERSION'))); 65 $die->('%PLATFORM% is not defined') if (!defined(env('PLATFORM'))); 66 $die->('%TARGETCPU% is not defined') if (!defined(env('TARGETCPU'))); 67 68 # 69 # Idea behind this is to mimic flags set by eVC++ IDE... 70 # 71 my $wcevers = env('OSVERSION'); # WCENNN 72 my $wcevernum; 73 my $wceverdotnum; 74 if ($wcevers =~ /^WCE([1-9])([0-9]{2})$/) { 75 $wcevernum = "$1$2"; 76 $wceverdotnum = "$1.$2"; 77 } else { 78 $die->('%OSVERSION% value is insane'); 79 $wcevernum = "{unknown}"; 80 $wceverdotnum = "{unknown}"; 81 } 82 my $wcecdefs = "-D_WIN32_WCE=$wcevernum -DUNDER_CE=$wcevernum"; # -D_WIN32_WCE=NNN 83 my $wcelflag = "/subsystem:windowsce,$wceverdotnum"; # ...,N.NN 84 85 my $wceplatf = env('PLATFORM'); 86 87 $wceplatf =~ tr/a-z0-9 /A-Z0-9_/; 88 $wcecdefs .= " -DWCE_PLATFORM_$wceplatf"; 89 90 my $wcetgt = env('TARGETCPU'); # just shorter name... 91 SWITCH: for($wcetgt) { 92 /^X86/ && do { $wcecdefs.=" -Dx86 -D_X86_ -D_i386_ -Di_386_"; 93 $wcelflag.=" /machine:X86"; last; }; 94 /^ARMV4[IT]/ && do { $wcecdefs.=" -DARM -D_ARM_ -D$wcetgt"; 95 $wcecdefs.=" -DTHUMB -D_THUMB_" if($wcetgt=~/T$/); 96 $wcecdefs.=" -QRarch4T -QRinterwork-return"; 97 $wcelflag.=" /machine:THUMB"; last; }; 98 /^ARM/ && do { $wcecdefs.=" -DARM -D_ARM_ -D$wcetgt"; 99 $wcelflag.=" /machine:ARM"; last; }; 100 /^MIPSIV/ && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000 -D$wcetgt"; 101 $wcecdefs.=" -D_MIPS64 -QMmips4 -QMn32"; 102 $wcelflag.=" /machine:MIPSFPU"; last; }; 103 /^MIPS16/ && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000 -D$wcetgt"; 104 $wcecdefs.=" -DMIPSII -QMmips16"; 105 $wcelflag.=" /machine:MIPS16"; last; }; 106 /^MIPSII/ && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000 -D$wcetgt"; 107 $wcecdefs.=" -QMmips2"; 108 $wcelflag.=" /machine:MIPS"; last; }; 109 /^R4[0-9]{3}/ && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000"; 110 $wcelflag.=" /machine:MIPS"; last; }; 111 /^SH[0-9]/ && do { $wcecdefs.=" -D$wcetgt -D_${wcetgt}_ -DSHx"; 112 $wcecdefs.=" -Qsh4" if ($wcetgt =~ /^SH4/); 113 $wcelflag.=" /machine:$wcetgt"; last; }; 114 { $wcecdefs.=" -D$wcetgt -D_${wcetgt}_"; 115 $wcelflag.=" /machine:$wcetgt"; last; }; 116 } 117 118 $vc_wince_info = { cppflags => $wcecdefs, 119 lflags => $wcelflag }; 120 } 121 return $vc_wince_info; 122} 123 124# Helper functions for the VMS configs 125my $vms_info = {}; 126sub vms_info { 127 my $pointer_size_str = $config{target} =~ m|-p(\d+)$| ? $1 : ""; 128 129 # For the case where Configure iterate through all config targets, such 130 # as when listing them and their details, we reset info if the pointer 131 # size changes. 132 if (%$vms_info && $vms_info->{pointer_size} ne $pointer_size_str) { 133 $vms_info = {}; 134 } 135 136 unless (%$vms_info) { 137 $vms_info->{disable_warns} = [ ]; 138 $vms_info->{pointer_size} = $pointer_size_str; 139 if ($pointer_size_str eq "64") { 140 `PIPE CC /NOCROSS_REFERENCE /NOLIST /NOOBJECT /WARNINGS = DISABLE = ( MAYLOSEDATA3, EMPTYFILE ) NL: 2> NL:`; 141 if ($? == 0) { 142 push @{$vms_info->{disable_warns}}, "MAYLOSEDATA3"; 143 } 144 } 145 146 unless ($disabled{zlib}) { 147 my $default_zlib = 'GNV$LIBZSHR' . $pointer_size_str; 148 if (defined($disabled{"zlib-dynamic"})) { 149 $vms_info->{zlib} = $withargs{zlib_lib} || "$default_zlib/SHARE"; 150 } else { 151 $vms_info->{def_zlib} = $withargs{zlib_lib} || $default_zlib; 152 # In case the --with-zlib-lib value contains something like 153 # /SHARE or /LIB or so at the end, remove it. 154 $vms_info->{def_zlib} =~ s|/.*$||g; 155 } 156 } 157 158 if ($config{target} =~ /-ia64/) { 159 `PIPE ias -H 2> NL:`; 160 if ($? == 0) { 161 $vms_info->{AS} = "ias"; 162 $vms_info->{ASFLAGS} = '-d debug'; 163 $vms_info->{asflags} = '"-N" vms_upcase'; 164 $vms_info->{asoutflag} = "-o "; 165 $vms_info->{perlasm_scheme} = "ias"; 166 } 167 } 168 } 169 return $vms_info; 170} 171 172my %targets = ( 173 174#### Basic configs that should work on any 32-bit box 175 "gcc" => { 176 inherit_from => [ "BASE_unix" ], 177 CC => "gcc", 178 CFLAGS => picker(debug => "-O0 -g", 179 release => "-O3"), 180 thread_scheme => "(unknown)", 181 bn_ops => "BN_LLONG", 182 }, 183 "cc" => { 184 inherit_from => [ "BASE_unix" ], 185 CC => "cc", 186 CFLAGS => "-O", 187 thread_scheme => "(unknown)", 188 }, 189 190#### VOS Configurations 191 "vos-gcc" => { 192 inherit_from => [ "BASE_unix" ], 193 CC => "gcc", 194 CFLAGS => picker(default => "-Wall", 195 debug => "-O0 -g", 196 release => "-O3"), 197 cppflags => "-D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES", 198 lib_cppflags => "-DB_ENDIAN", 199 thread_scheme => "(unknown)", 200 sys_id => "VOS", 201 lflags => add("-Wl,-map"), 202 bn_ops => "BN_LLONG", 203 shared_extension => ".so", 204 }, 205 206#### Solaris configurations 207 "solaris-common" => { 208 inherit_from => [ "BASE_unix" ], 209 template => 1, 210 lib_cppflags => "-DFILIO_H", 211 ex_libs => add("-lsocket -lnsl -ldl"), 212 dso_scheme => "dlfcn", 213 thread_scheme => "pthreads", 214 shared_target => "self", 215 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 216 shared_ldflag => "-Wl,-Bsymbolic", 217 shared_defflag => "-Wl,-M,", 218 shared_sonameflag=> "-Wl,-h,", 219 }, 220#### Solaris x86 with GNU C setups 221 "solaris-x86-gcc" => { 222 # NB. GNU C has to be configured to use GNU assembler, and not 223 # /usr/ccs/bin/as. Failure to comply will result in compile 224 # failures [at least] in 32-bit build. 225 inherit_from => [ "solaris-common", asm("x86_elf_asm") ], 226 CC => "gcc", 227 CFLAGS => add_before(picker(default => "-Wall", 228 debug => "-O0 -g", 229 release => "-O3 -fomit-frame-pointer")), 230 cflags => add(threads("-pthread")), 231 lib_cppflags => add("-DL_ENDIAN"), 232 ex_libs => add(threads("-pthread")), 233 bn_ops => "BN_LLONG", 234 shared_cflag => "-fPIC", 235 shared_ldflag => add_before("-shared -static-libgcc"), 236 }, 237 "solaris64-x86_64-gcc" => { 238 # -shared -static-libgcc might appear controversial, but modules 239 # taken from static libgcc do not have relocations and linking 240 # them into our shared objects doesn't have any negative side 241 # effects. On the contrary, doing so makes it possible to use 242 # gcc shared build with Sun C. Given that gcc generates faster 243 # code [thanks to inline assembler], I would actually recommend 244 # to consider using gcc shared build even with vendor compiler:-) 245 # -- <appro@openssl.org> 246 inherit_from => [ "solaris-common", asm("x86_64_asm") ], 247 CC => "gcc", 248 CFLAGS => add_before(picker(default => "-Wall", 249 debug => "-O0 -g", 250 release => "-O3")), 251 cflags => add_before("-m64", threads("-pthread")), 252 lib_cppflags => add("-DL_ENDIAN"), 253 ex_libs => add(threads("-pthread")), 254 bn_ops => "SIXTY_FOUR_BIT_LONG", 255 perlasm_scheme => "elf", 256 shared_cflag => "-fPIC", 257 shared_ldflag => add_before("-shared -static-libgcc"), 258 multilib => "/64", 259 }, 260 261#### Solaris x86 with Sun C setups 262 # There used to be solaris-x86-cc target, but it was removed, 263 # primarily because vendor assembler can't assemble our modules 264 # with -KPIC flag. As result it, assembly support, was not even 265 # available as option. But its lack means lack of side-channel 266 # resistant code, which is incompatible with security by today's 267 # standards. Fortunately gcc is readily available prepackaged 268 # option, which we can firmly point at... 269 # 270 # On related note, solaris64-x86_64-cc target won't compile code 271 # paths utilizing AVX and post-Haswell instruction extensions. 272 # Consider switching to solaris64-x86_64-gcc even here... 273 # 274 "solaris64-x86_64-cc" => { 275 inherit_from => [ "solaris-common", asm("x86_64_asm") ], 276 CC => "cc", 277 CFLAGS => add_before(picker(debug => "-g", 278 release => "-xO5 -xdepend -xbuiltin")), 279 cflags => add_before("-xarch=generic64 -xstrconst -Xa"), 280 cppflags => add(threads("-D_REENTRANT")), 281 lib_cppflags => add("-DL_ENDIAN"), 282 thread_scheme => "pthreads", 283 lflags => add(threads("-mt")), 284 ex_libs => add(threads("-lpthread")), 285 bn_ops => "SIXTY_FOUR_BIT_LONG", 286 perlasm_scheme => "elf", 287 shared_cflag => "-KPIC", 288 shared_ldflag => add_before("-G -dy -z text"), 289 multilib => "/64", 290 }, 291 292#### SPARC Solaris with GNU C setups 293 "solaris-sparcv7-gcc" => { 294 inherit_from => [ "solaris-common" ], 295 CC => "gcc", 296 CFLAGS => add_before(picker(default => "-Wall", 297 debug => "-O0 -g", 298 release => "-O3")), 299 cflags => add(threads("-pthread")), 300 lib_cppflags => add("-DB_ENDIAN -DBN_DIV2W"), 301 ex_libs => add(threads("-pthread")), 302 bn_ops => "BN_LLONG RC4_CHAR", 303 shared_cflag => "-fPIC", 304 shared_ldflag => add_before("-shared"), 305 }, 306 "solaris-sparcv8-gcc" => { 307 inherit_from => [ "solaris-sparcv7-gcc", asm("sparcv8_asm") ], 308 cflags => add_before("-mcpu=v8"), 309 }, 310 "solaris-sparcv9-gcc" => { 311 # -m32 should be safe to add as long as driver recognizes 312 # -mcpu=ultrasparc 313 inherit_from => [ "solaris-sparcv7-gcc", asm("sparcv9_asm") ], 314 cflags => add_before("-m32 -mcpu=ultrasparc"), 315 }, 316 "solaris64-sparcv9-gcc" => { 317 inherit_from => [ "solaris-sparcv9-gcc" ], 318 cflags => sub { my $f=join(" ",@_); $f =~ s/\-m32/-m64/; $f; }, 319 bn_ops => "BN_LLONG RC4_CHAR", 320 multilib => "/64", 321 }, 322 323#### SPARC Solaris with Sun C setups 324# SC4.0 doesn't pass 'make test', upgrade to SC5.0 or SC4.2. 325# SC4.2 is ok, better than gcc even on bn as long as you tell it -xarch=v8 326# SC5.0 note: Compiler common patch 107357-01 or later is required! 327 "solaris-sparcv7-cc" => { 328 inherit_from => [ "solaris-common" ], 329 CC => "cc", 330 CFLAGS => add_before(picker(debug => "-g", 331 release => "-xO5 -xdepend")), 332 cflags => add_before("-xstrconst -Xa"), 333 cppflags => add(threads("-D_REENTRANT")), 334 lib_cppflags => add("-DB_ENDIAN -DBN_DIV2W"), 335 lflags => add(threads("-mt")), 336 ex_libs => add(threads("-lpthread")), 337 bn_ops => "BN_LLONG RC4_CHAR", 338 shared_cflag => "-KPIC", 339 shared_ldflag => add_before("-G -dy -z text"), 340 }, 341#### 342 "solaris-sparcv8-cc" => { 343 inherit_from => [ "solaris-sparcv7-cc", asm("sparcv8_asm") ], 344 cflags => add_before("-xarch=v8"), 345 }, 346 "solaris-sparcv9-cc" => { 347 inherit_from => [ "solaris-sparcv7-cc", asm("sparcv9_asm") ], 348 cflags => add_before("-xarch=v8plus"), 349 }, 350 "solaris64-sparcv9-cc" => { 351 inherit_from => [ "solaris-sparcv7-cc", asm("sparcv9_asm") ], 352 cflags => add_before("-xarch=v9"), 353 bn_ops => "BN_LLONG RC4_CHAR", 354 multilib => "/64", 355 }, 356 357#### IRIX 6.x configs 358# Only N32 and N64 ABIs are supported. 359 "irix-common" => { 360 inherit_from => [ "BASE_unix" ], 361 template => 1, 362 cppflags => threads("-D_SGI_MP_SOURCE"), 363 lib_cppflags => "-DB_ENDIAN", 364 ex_libs => add(threads("-lpthread")), 365 thread_scheme => "pthreads", 366 dso_scheme => "dlfcn", 367 shared_target => "self", 368 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 369 shared_ldflag => "-shared -Wl,-Bsymbolic", 370 shared_sonameflag=> "-Wl,-soname,", 371 }, 372 "irix-mips3-gcc" => { 373 inherit_from => [ "irix-common", asm("mips64_asm") ], 374 CC => "gcc", 375 CFLAGS => picker(debug => "-g -O0", 376 release => "-O3"), 377 LDFLAGS => "-static-libgcc", 378 cflags => "-mabi=n32", 379 bn_ops => "RC4_CHAR SIXTY_FOUR_BIT", 380 perlasm_scheme => "n32", 381 multilib => "32", 382 }, 383 "irix-mips3-cc" => { 384 inherit_from => [ "irix-common", asm("mips64_asm") ], 385 CC => "cc", 386 CFLAGS => picker(debug => "-g -O0", 387 release => "-O2"), 388 cflags => "-n32 -mips3 -use_readonly_const -G0 -rdata_shared", 389 bn_ops => "RC4_CHAR SIXTY_FOUR_BIT", 390 perlasm_scheme => "n32", 391 multilib => "32", 392 }, 393 # N64 ABI builds. 394 "irix64-mips4-gcc" => { 395 inherit_from => [ "irix-common", asm("mips64_asm") ], 396 CC => "gcc", 397 CFLAGS => picker(debug => "-g -O0", 398 release => "-O3"), 399 LDFLAGS => "-static-libgcc", 400 cflags => "-mabi=64 -mips4", 401 bn_ops => "RC4_CHAR SIXTY_FOUR_BIT_LONG", 402 perlasm_scheme => "64", 403 multilib => "64", 404 }, 405 "irix64-mips4-cc" => { 406 inherit_from => [ "irix-common", asm("mips64_asm") ], 407 CC => "cc", 408 CFLAGS => picker(debug => "-g -O0", 409 release => "-O2"), 410 cflags => "-64 -mips4 -use_readonly_const -G0 -rdata_shared", 411 bn_ops => "RC4_CHAR SIXTY_FOUR_BIT_LONG", 412 perlasm_scheme => "64", 413 multilib => "64", 414 }, 415 416#### Unified HP-UX ANSI C configs. 417# Special notes: 418# - Originally we were optimizing at +O4 level. It should be noted 419# that the only difference between +O3 and +O4 is global inter- 420# procedural analysis. As it has to be performed during the link 421# stage the compiler leaves behind certain pseudo-code in lib*.a 422# which might be release or even patch level specific. Generating 423# the machine code for and analyzing the *whole* program appears 424# to be *extremely* memory demanding while the performance gain is 425# actually questionable. The situation is intensified by the default 426# HP-UX data set size limit (infamous 'maxdsiz' tunable) of 64MB 427# which is way too low for +O4. In other words, doesn't +O3 make 428# more sense? 429# - Keep in mind that the HP compiler by default generates code 430# suitable for execution on the host you're currently compiling at. 431# If the toolkit is meant to be used on various PA-RISC processors 432# consider './Configure hpux-parisc-[g]cc +DAportable'. 433# - -DMD32_XARRAY triggers workaround for compiler bug we ran into in 434# 32-bit message digests. (For the moment of this writing) HP C 435# doesn't seem to "digest" too many local variables (they make "him" 436# chew forever:-). For more details look-up MD32_XARRAY comment in 437# crypto/sha/sha_local.h. 438# - originally there were 32-bit hpux-parisc2-* targets. They were 439# scrapped, because a) they were not interchangeable with other 32-bit 440# targets; b) performance-critical 32-bit assembly modules implement 441# even PA-RISC 2.0-specific code paths, which are chosen at run-time, 442# thus adequate performance is provided even with PA-RISC 1.1 build. 443 "hpux-common" => { 444 inherit_from => [ "BASE_unix" ], 445 template => 1, 446 defines => add("_XOPEN_SOURCE", "_XOPEN_SOURCE_EXTENDED", 447 "_HPUX_ALT_XOPEN_SOCKET_API"), 448 lib_cppflags => "-DB_ENDIAN", 449 thread_scheme => "pthreads", 450 dso_scheme => "dlfcn", # overridden in 32-bit PA-RISC builds 451 shared_target => "self", 452 bin_lflags => "-Wl,+s,+cdp,../:,+cdp,./:", 453 shared_ldflag => "-Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+cdp,../:,+cdp,./:", 454 shared_sonameflag=> "-Wl,+h,", 455 }, 456 "hpux-parisc-gcc" => { 457 inherit_from => [ "hpux-common" ], 458 CC => "gcc", 459 CFLAGS => picker(debug => "-O0 -g", 460 release => "-O3"), 461 cflags => add(threads("-pthread")), 462 lib_cppflags => add("-DBN_DIV2W"), 463 ex_libs => add("-ldld", threads("-pthread")), 464 bn_ops => "BN_LLONG RC4_CHAR", 465 dso_scheme => "dl", 466 shared_cflag => "-fPIC", 467 shared_ldflag => add_before("-shared"), 468 shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)", 469 }, 470 "hpux-parisc1_1-gcc" => { 471 inherit_from => [ "hpux-parisc-gcc", asm("parisc11_asm") ], 472 multilib => "/pa1.1", 473 }, 474 "hpux64-parisc2-gcc" => { 475 inherit_from => [ "hpux-common", asm("parisc20_64_asm") ], 476 CC => "gcc", 477 CFLAGS => combine(picker(debug => "-O0 -g", 478 release => "-O3")), 479 cflags => add(threads("-pthread")), 480 ex_libs => add("-ldl", threads("-pthread")), 481 bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", 482 shared_cflag => "-fpic", 483 shared_ldflag => add_before("-shared"), 484 shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)", 485 multilib => "/pa20_64", 486 }, 487 488 # More attempts at unified 10.X and 11.X targets for HP C compiler. 489 "hpux-parisc-cc" => { 490 inherit_from => [ "hpux-common" ], 491 CC => "cc", 492 CFLAGS => picker(debug => "+O0 +d -g", 493 release => "+O3"), 494 cflags => "+Optrs_strongly_typed -Ae +ESlit", 495 cppflags => threads("-D_REENTRANT"), 496 lib_cppflags => add("-DBN_DIV2W -DMD32_XARRAY"), 497 ex_libs => add("-ldld", threads("-lpthread")), 498 bn_ops => "RC4_CHAR", 499 dso_scheme => "dl", 500 shared_cflag => "+Z", 501 shared_ldflag => add_before("-b"), 502 shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)", 503 }, 504 "hpux-parisc1_1-cc" => { 505 inherit_from => [ "hpux-parisc-cc", asm("parisc11_asm") ], 506 cflags => add_before("+DA1.1"), 507 multilib => "/pa1.1", 508 }, 509 "hpux64-parisc2-cc" => { 510 inherit_from => [ "hpux-common", asm("parisc20_64_asm") ], 511 CC => "cc", 512 CFLAGS => picker(debug => "+O0 +d -g", 513 release => "+O3") , 514 cflags => "+DD64 +Optrs_strongly_typed -Ae +ESlit", 515 cppflags => threads("-D_REENTRANT") , 516 lib_cppflags => add("-DMD32_XARRAY"), 517 ex_libs => add("-ldl", threads("-lpthread")), 518 bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", 519 shared_cflag => "+Z", 520 shared_ldflag => add_before("-b"), 521 shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)", 522 multilib => "/pa20_64", 523 }, 524 525 # HP/UX IA-64 targets 526 "hpux-ia64-cc" => { 527 inherit_from => [ "hpux-common", asm("ia64_asm") ], 528 CC => "cc", 529 CFLAGS => picker(debug => "+O0 +d -g", 530 release => "+O2"), 531 cflags => "-Ae +DD32 +Olit=all -z", 532 cppflags => add(threads("-D_REENTRANT")), 533 ex_libs => add("-ldl", threads("-lpthread")), 534 bn_ops => "SIXTY_FOUR_BIT", 535 shared_cflag => "+Z", 536 shared_ldflag => add_before("-b"), 537 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 538 multilib => "/hpux32", 539 }, 540 "hpux64-ia64-cc" => { 541 inherit_from => [ "hpux-common", asm("ia64_asm") ], 542 CC => "cc", 543 CFLAGS => picker(debug => "+O0 +d -g", 544 release => "+O3"), 545 cflags => "-Ae +DD64 +Olit=all -z", 546 cppflags => threads("-D_REENTRANT"), 547 ex_libs => add("-ldl", threads("-lpthread")), 548 bn_ops => "SIXTY_FOUR_BIT_LONG", 549 shared_cflag => "+Z", 550 shared_ldflag => add_before("-b"), 551 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 552 multilib => "/hpux64", 553 }, 554 # GCC builds... 555 "hpux-ia64-gcc" => { 556 inherit_from => [ "hpux-common", asm("ia64_asm") ], 557 CC => "gcc", 558 CFLAGS => picker(debug => "-O0 -g", 559 release => "-O3"), 560 cflags => add(threads("-pthread")), 561 ex_libs => add("-ldl", threads("-pthread")), 562 bn_ops => "SIXTY_FOUR_BIT", 563 shared_cflag => "-fpic", 564 shared_ldflag => add_before("-shared"), 565 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 566 multilib => "/hpux32", 567 }, 568 "hpux64-ia64-gcc" => { 569 inherit_from => [ "hpux-common", asm("ia64_asm") ], 570 CC => "gcc", 571 CFLAGS => picker(debug => "-O0 -g", 572 release => "-O3"), 573 cflags => combine("-mlp64", threads("-pthread")), 574 ex_libs => add("-ldl", threads("-pthread")), 575 bn_ops => "SIXTY_FOUR_BIT_LONG", 576 shared_cflag => "-fpic", 577 shared_ldflag => add_before("-shared"), 578 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 579 multilib => "/hpux64", 580 }, 581 582#### HP MPE/iX http://jazz.external.hp.com/src/openssl/ 583 "MPE/iX-gcc" => { 584 inherit_from => [ "BASE_unix" ], 585 CC => "gcc", 586 CFLAGS => "-O3", 587 cppflags => "-D_POSIX_SOURCE -D_SOCKET_SOURCE", 588 includes => [ "/SYSLOG/PUB" ], 589 lib_cppflags => "-DBN_DIV2W", 590 sys_id => "MPE", 591 lflags => add("-L/SYSLOG/PUB"), 592 ex_libs => add("-lsyslog -lsocket -lcurses"), 593 thread_scheme => "(unknown)", 594 bn_ops => "BN_LLONG", 595 }, 596 597#### DEC Alpha Tru64 targets. Tru64 is marketing name for OSF/1 version 4 598#### and forward. In reality 'uname -s' still returns "OSF1". Originally 599#### there were even osf1-* configs targeting prior versions provided, 600#### but not anymore... 601 "tru64-alpha-gcc" => { 602 inherit_from => [ "BASE_unix", asm("alpha_asm") ], 603 CC => "gcc", 604 CFLAGS => "-O3", 605 cflags => add("-std=c9x", threads("-pthread")), 606 cppflags => "-D_XOPEN_SOURCE=500 -D_OSF_SOURCE", 607 ex_libs => add("-lrt", threads("-pthread")), # for mlock(2) 608 bn_ops => "SIXTY_FOUR_BIT_LONG", 609 thread_scheme => "pthreads", 610 dso_scheme => "dlfcn", 611 shared_target => "alpha-osf1-shared", 612 shared_extension => ".so", 613 }, 614 "tru64-alpha-cc" => { 615 inherit_from => [ "BASE_unix", asm("alpha_asm") ], 616 CC => "cc", 617 CFLAGS => "-tune host -fast", 618 cflags => add("-std1 -readonly_strings", 619 threads("-pthread")), 620 cppflags => "-D_XOPEN_SOURCE=500 -D_OSF_SOURCE", 621 ex_libs => add("-lrt", threads("-pthread")), # for mlock(2) 622 bn_ops => "SIXTY_FOUR_BIT_LONG", 623 thread_scheme => "pthreads", 624 dso_scheme => "dlfcn", 625 shared_target => "alpha-osf1-shared", 626 shared_ldflag => "-msym", 627 shared_extension => ".so", 628 }, 629 630#### 631#### Variety of LINUX:-) 632#### 633# *-generic* is endian-neutral target, but ./config is free to 634# throw in -D[BL]_ENDIAN, whichever appropriate... 635 "linux-generic32" => { 636 inherit_from => [ "BASE_unix" ], 637 CC => "gcc", 638 CXX => "g++", 639 CFLAGS => picker(default => "-Wall", 640 debug => "-O0 -g", 641 release => "-O3"), 642 CXXFLAGS => picker(default => "-Wall", 643 debug => "-O0 -g", 644 release => "-O3"), 645 cflags => threads("-pthread"), 646 cxxflags => combine("-std=c++11", threads("-pthread")), 647 lib_cppflags => "-DOPENSSL_USE_NODELETE", 648 ex_libs => add("-ldl", threads("-pthread")), 649 bn_ops => "BN_LLONG RC4_CHAR", 650 thread_scheme => "pthreads", 651 dso_scheme => "dlfcn", 652 shared_target => "linux-shared", 653 shared_cflag => "-fPIC", 654 shared_ldflag => sub { $disabled{pinshared} ? () : "-Wl,-znodelete" }, 655 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 656 enable => [ "afalgeng" ], 657 }, 658 "linux-generic64" => { 659 inherit_from => [ "linux-generic32" ], 660 bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", 661 }, 662 663 "linux-ppc" => { 664 inherit_from => [ "linux-generic32", asm("ppc32_asm") ], 665 perlasm_scheme => "linux32", 666 }, 667 "linux-ppc64" => { 668 inherit_from => [ "linux-generic64", asm("ppc64_asm") ], 669 cflags => add("-m64"), 670 cxxflags => add("-m64"), 671 lib_cppflags => add("-DB_ENDIAN"), 672 perlasm_scheme => "linux64", 673 multilib => "64", 674 }, 675 "linux-ppc64le" => { 676 inherit_from => [ "linux-generic64", asm("ppc64_asm") ], 677 cflags => add("-m64"), 678 cxxflags => add("-m64"), 679 lib_cppflags => add("-DL_ENDIAN"), 680 perlasm_scheme => "linux64le", 681 }, 682 683 "linux-armv4" => { 684 ################################################################ 685 # Note that -march is not among compiler options in linux-armv4 686 # target description. Not specifying one is intentional to give 687 # you choice to: 688 # 689 # a) rely on your compiler default by not specifying one; 690 # b) specify your target platform explicitly for optimal 691 # performance, e.g. -march=armv6 or -march=armv7-a; 692 # c) build "universal" binary that targets *range* of platforms 693 # by specifying minimum and maximum supported architecture; 694 # 695 # As for c) option. It actually makes no sense to specify 696 # maximum to be less than ARMv7, because it's the least 697 # requirement for run-time switch between platform-specific 698 # code paths. And without run-time switch performance would be 699 # equivalent to one for minimum. Secondly, there are some 700 # natural limitations that you'd have to accept and respect. 701 # Most notably you can *not* build "universal" binary for 702 # big-endian platform. This is because ARMv7 processor always 703 # picks instructions in little-endian order. Another similar 704 # limitation is that -mthumb can't "cross" -march=armv6t2 705 # boundary, because that's where it became Thumb-2. Well, this 706 # limitation is a bit artificial, because it's not really 707 # impossible, but it's deemed too tricky to support. And of 708 # course you have to be sure that your binutils are actually 709 # up to the task of handling maximum target platform. With all 710 # this in mind here is an example of how to configure 711 # "universal" build: 712 # 713 # ./Configure linux-armv4 -march=armv6 -D__ARM_MAX_ARCH__=8 714 # 715 inherit_from => [ "linux-generic32", asm("armv4_asm") ], 716 perlasm_scheme => "linux32", 717 }, 718 "linux-aarch64" => { 719 inherit_from => [ "linux-generic64", asm("aarch64_asm") ], 720 perlasm_scheme => "linux64", 721 }, 722 "linux-arm64ilp32" => { # https://wiki.linaro.org/Platform/arm64-ilp32 723 inherit_from => [ "linux-generic32", asm("aarch64_asm") ], 724 cflags => add("-mabi=ilp32"), 725 cxxflags => add("-mabi=ilp32"), 726 bn_ops => "SIXTY_FOUR_BIT RC4_CHAR", 727 perlasm_scheme => "linux64", 728 }, 729 730 "linux-mips32" => { 731 # Configure script adds minimally required -march for assembly 732 # support, if no -march was specified at command line. 733 inherit_from => [ "linux-generic32", asm("mips32_asm") ], 734 cflags => add("-mabi=32"), 735 cxxflags => add("-mabi=32"), 736 perlasm_scheme => "o32", 737 }, 738 # mips32 and mips64 below refer to contemporary MIPS Architecture 739 # specifications, MIPS32 and MIPS64, rather than to kernel bitness. 740 "linux-mips64" => { 741 inherit_from => [ "linux-generic32", asm("mips64_asm") ], 742 cflags => add("-mabi=n32"), 743 cxxflags => add("-mabi=n32"), 744 bn_ops => "SIXTY_FOUR_BIT RC4_CHAR", 745 perlasm_scheme => "n32", 746 multilib => "32", 747 }, 748 "linux64-mips64" => { 749 inherit_from => [ "linux-generic64", asm("mips64_asm") ], 750 cflags => add("-mabi=64"), 751 cxxflags => add("-mabi=64"), 752 perlasm_scheme => "64", 753 multilib => "64", 754 }, 755 756 #### IA-32 targets... 757 #### These two targets are a bit aged and are to be used on older Linux 758 #### machines where gcc doesn't understand -m32 and -m64 759 "linux-elf" => { 760 inherit_from => [ "linux-generic32", asm("x86_elf_asm") ], 761 CFLAGS => add(picker(release => "-fomit-frame-pointer")), 762 lib_cppflags => add("-DL_ENDIAN"), 763 bn_ops => "BN_LLONG", 764 }, 765 "linux-aout" => { 766 inherit_from => [ "BASE_unix", asm("x86_asm") ], 767 CC => "gcc", 768 CFLAGS => add(picker(default => "-Wall", 769 debug => "-O0 -g", 770 release => "-O3 -fomit-frame-pointer")), 771 lib_cppflags => add("-DL_ENDIAN"), 772 bn_ops => "BN_LLONG", 773 thread_scheme => "(unknown)", 774 perlasm_scheme => "a.out", 775 }, 776 777 #### X86 / X86_64 targets 778 "linux-x86" => { 779 inherit_from => [ "linux-generic32", asm("x86_asm") ], 780 CFLAGS => add(picker(release => "-fomit-frame-pointer")), 781 cflags => add("-m32"), 782 cxxflags => add("-m32"), 783 lib_cppflags => add("-DL_ENDIAN"), 784 bn_ops => "BN_LLONG", 785 perlasm_scheme => "elf", 786 }, 787 "linux-x86-clang" => { 788 inherit_from => [ "linux-x86" ], 789 CC => "clang", 790 CXX => "clang++", 791 }, 792 "linux-x86_64" => { 793 inherit_from => [ "linux-generic64", asm("x86_64_asm") ], 794 cflags => add("-m64"), 795 cxxflags => add("-m64"), 796 lib_cppflags => add("-DL_ENDIAN"), 797 bn_ops => "SIXTY_FOUR_BIT_LONG", 798 perlasm_scheme => "elf", 799 multilib => "64", 800 }, 801 "linux-x86_64-clang" => { 802 inherit_from => [ "linux-x86_64" ], 803 CC => "clang", 804 CXX => "clang++", 805 }, 806 "linux-x32" => { 807 inherit_from => [ "linux-generic32", asm("x86_64_asm") ], 808 cflags => add("-mx32"), 809 cxxflags => add("-mx32"), 810 lib_cppflags => add("-DL_ENDIAN"), 811 bn_ops => "SIXTY_FOUR_BIT", 812 perlasm_scheme => "elf32", 813 multilib => "x32", 814 }, 815 816 "linux-ia64" => { 817 inherit_from => [ "linux-generic64", asm("ia64_asm") ], 818 bn_ops => "SIXTY_FOUR_BIT_LONG", 819 }, 820 821 "linux64-s390x" => { 822 inherit_from => [ "linux-generic64", asm("s390x_asm") ], 823 cflags => add("-m64"), 824 cxxflags => add("-m64"), 825 lib_cppflags => add("-DB_ENDIAN"), 826 perlasm_scheme => "64", 827 multilib => "64", 828 }, 829 "linux32-s390x" => { 830 #### So called "highgprs" target for z/Architecture CPUs 831 # "Highgprs" is kernel feature first implemented in Linux 832 # 2.6.32, see /proc/cpuinfo. The idea is to preserve most 833 # significant bits of general purpose registers not only 834 # upon 32-bit process context switch, but even on 835 # asynchronous signal delivery to such process. This makes 836 # it possible to deploy 64-bit instructions even in legacy 837 # application context and achieve better [or should we say 838 # adequate] performance. The build is binary compatible with 839 # linux-generic32, and the idea is to be able to install the 840 # resulting libcrypto.so alongside generic one, e.g. as 841 # /lib/highgprs/libcrypto.so.x.y, for ldconfig and run-time 842 # linker to autodiscover. Unfortunately it doesn't work just 843 # yet, because of couple of bugs in glibc 844 # sysdeps/s390/dl-procinfo.c affecting ldconfig and ld.so.1... 845 # 846 inherit_from => [ "linux-generic32", asm("s390x_asm") ], 847 cflags => add("-m31 -Wa,-mzarch"), 848 cxxflags => add("-m31 -Wa,-mzarch"), 849 lib_cppflags => add("-DB_ENDIAN"), 850 bn_asm_src => sub { my $r=join(" ",@_); $r=~s|asm/s390x\.S|bn_asm.c|; $r; }, 851 perlasm_scheme => "31", 852 multilib => "/highgprs", 853 }, 854 855 #### SPARC Linux setups 856 "linux-sparcv8" => { 857 inherit_from => [ "linux-generic32", asm("sparcv8_asm") ], 858 cflags => add("-mcpu=v8"), 859 cxxflags => add("-mcpu=v8"), 860 lib_cppflags => add("-DB_ENDIAN -DBN_DIV2W"), 861 }, 862 "linux-sparcv9" => { 863 # it's a real mess with -mcpu=ultrasparc option under Linux, 864 # but -Wa,-Av8plus should do the trick no matter what. 865 inherit_from => [ "linux-generic32", asm("sparcv9_asm") ], 866 cflags => add("-m32 -mcpu=ultrasparc -Wa,-Av8plus"), 867 cxxflags => add("-m32 -mcpu=ultrasparc -Wa,-Av8plus"), 868 lib_cppflags => add("-DB_ENDIAN -DBN_DIV2W"), 869 }, 870 "linux64-sparcv9" => { 871 # GCC 3.1 is a requirement 872 inherit_from => [ "linux-generic64", asm("sparcv9_asm") ], 873 cflags => add("-m64 -mcpu=ultrasparc"), 874 cxxflags => add("-m64 -mcpu=ultrasparc"), 875 lib_cppflags => add("-DB_ENDIAN"), 876 bn_ops => "BN_LLONG RC4_CHAR", 877 multilib => "64", 878 }, 879 880 "linux-alpha-gcc" => { 881 inherit_from => [ "linux-generic64", asm("alpha_asm") ], 882 lib_cppflags => add("-DL_ENDIAN"), 883 bn_ops => "SIXTY_FOUR_BIT_LONG", 884 }, 885 "linux-c64xplus" => { 886 inherit_from => [ "BASE_unix" ], 887 # TI_CGT_C6000_7.3.x is a requirement 888 CC => "cl6x", 889 CFLAGS => "-o2 -ox -ms", 890 cflags => "--linux -ea=.s -eo=.o -mv6400+ -pden", 891 cxxflags => "--linux -ea=.s -eo=.o -mv6400+ -pden", 892 cppflags => combine("-DOPENSSL_SMALL_FOOTPRINT", 893 threads("-D_REENTRANT")), 894 bn_ops => "BN_LLONG", 895 cpuid_asm_src => "c64xpluscpuid.s", 896 bn_asm_src => "asm/bn-c64xplus.asm c64xplus-gf2m.s", 897 aes_asm_src => "aes-c64xplus.s aes_cbc.c aes-ctr.fake", 898 sha1_asm_src => "sha1-c64xplus.s sha256-c64xplus.s sha512-c64xplus.s", 899 rc4_asm_src => "rc4-c64xplus.s", 900 modes_asm_src => "ghash-c64xplus.s", 901 chacha_asm_src => "chacha-c64xplus.s", 902 poly1305_asm_src => "poly1305-c64xplus.s", 903 thread_scheme => "pthreads", 904 perlasm_scheme => "void", 905 dso_scheme => "dlfcn", 906 shared_target => "linux-shared", 907 shared_cflag => "--pic", 908 shared_ldflag => add("-z --sysv --shared"), 909 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 910 ranlib => "true", 911 }, 912 913#### *BSD 914 "BSD-generic32" => { 915 # As for thread cflag. Idea is to maintain "collective" set of 916 # flags, which would cover all BSD flavors. -pthread applies 917 # to them all, but is treated differently. OpenBSD expands is 918 # as -D_POSIX_THREAD -lc_r, which is sufficient. FreeBSD 4.x 919 # expands it as -lc_r, which has to be accompanied by explicit 920 # -D_THREAD_SAFE and sometimes -D_REENTRANT. FreeBSD 5.x 921 # expands it as -lc_r, which seems to be sufficient? 922 inherit_from => [ "BASE_unix" ], 923 CC => "cc", 924 CFLAGS => picker(default => "-Wall", 925 debug => "-O0 -g", 926 release => "-O3"), 927 cflags => threads("-pthread"), 928 cppflags => threads("-D_THREAD_SAFE -D_REENTRANT"), 929 ex_libs => add(threads("-pthread")), 930 enable => add("devcryptoeng"), 931 bn_ops => "BN_LLONG", 932 thread_scheme => "pthreads", 933 dso_scheme => "dlfcn", 934 shared_target => "bsd-gcc-shared", 935 shared_cflag => "-fPIC", 936 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 937 }, 938 "BSD-generic64" => { 939 inherit_from => [ "BSD-generic32" ], 940 bn_ops => "SIXTY_FOUR_BIT_LONG", 941 }, 942 943 "BSD-x86" => { 944 inherit_from => [ "BSD-generic32", asm("x86_asm") ], 945 CFLAGS => add(picker(release => "-fomit-frame-pointer")), 946 lib_cppflags => add("-DL_ENDIAN"), 947 bn_ops => "BN_LLONG", 948 shared_target => "bsd-shared", 949 perlasm_scheme => "a.out", 950 }, 951 "BSD-x86-elf" => { 952 inherit_from => [ "BSD-x86" ], 953 perlasm_scheme => "elf", 954 }, 955 956 "BSD-sparcv8" => { 957 inherit_from => [ "BSD-generic32", asm("sparcv8_asm") ], 958 cflags => add("-mcpu=v8"), 959 lib_cppflags => add("-DB_ENDIAN"), 960 }, 961 "BSD-sparc64" => { 962 # -DMD32_REG_T=int doesn't actually belong in sparc64 target, it 963 # simply *happens* to work around a compiler bug in gcc 3.3.3, 964 # triggered by RIPEMD160 code. 965 inherit_from => [ "BSD-generic64", asm("sparcv9_asm") ], 966 lib_cppflags => add("-DB_ENDIAN -DMD32_REG_T=int"), 967 bn_ops => "BN_LLONG", 968 }, 969 970 "BSD-ia64" => { 971 inherit_from => [ "BSD-generic64", asm("ia64_asm") ], 972 lib_cppflags => add("-DL_ENDIAN"), 973 bn_ops => "SIXTY_FOUR_BIT_LONG", 974 }, 975 976 "BSD-x86_64" => { 977 inherit_from => [ "BSD-generic64", asm("x86_64_asm") ], 978 lib_cppflags => add("-DL_ENDIAN"), 979 bn_ops => "SIXTY_FOUR_BIT_LONG", 980 perlasm_scheme => "elf", 981 }, 982 983 "bsdi-elf-gcc" => { 984 inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], 985 CC => "gcc", 986 CFLAGS => "-fomit-frame-pointer -O3 -Wall", 987 lib_cppflags => "-DPERL5 -DL_ENDIAN", 988 ex_libs => add("-ldl"), 989 bn_ops => "BN_LLONG", 990 thread_scheme => "(unknown)", 991 dso_scheme => "dlfcn", 992 shared_target => "bsd-gcc-shared", 993 shared_cflag => "-fPIC", 994 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 995 }, 996 997 "nextstep" => { 998 inherit_from => [ "BASE_unix" ], 999 CC => "cc", 1000 CFLAGS => "-O -Wall", 1001 unistd => "<libc.h>", 1002 bn_ops => "BN_LLONG", 1003 thread_scheme => "(unknown)", 1004 }, 1005 "nextstep3.3" => { 1006 inherit_from => [ "BASE_unix" ], 1007 CC => "cc", 1008 CFLAGS => "-O3 -Wall", 1009 unistd => "<libc.h>", 1010 bn_ops => "BN_LLONG", 1011 thread_scheme => "(unknown)", 1012 }, 1013 1014#### SCO/Caldera targets. 1015# 1016# Originally we had like unixware-*, unixware-*-pentium, unixware-*-p6, etc. 1017# Now we only have blended unixware-* as it's the only one used by ./config. 1018# If you want to optimize for particular microarchitecture, bypass ./config 1019# and './Configure unixware-7 -Kpentium_pro' or whatever appropriate. 1020# Note that not all targets include assembler support. Mostly because of 1021# lack of motivation to support out-of-date platforms with out-of-date 1022# compiler drivers and assemblers. 1023# 1024# UnixWare 2.0x fails destest with -O. 1025 "unixware-2.0" => { 1026 inherit_from => [ "BASE_unix" ], 1027 CC => "cc", 1028 cflags => threads("-Kthread"), 1029 lib_cppflags => "-DFILIO_H -DNO_STRINGS_H", 1030 ex_libs => add("-lsocket -lnsl -lresolv -lx"), 1031 thread_scheme => "uithreads", 1032 }, 1033 "unixware-2.1" => { 1034 inherit_from => [ "BASE_unix" ], 1035 CC => "cc", 1036 CFLAGS => "-O", 1037 cflags => threads("-Kthread"), 1038 lib_cppflags => "-DFILIO_H", 1039 ex_libs => add("-lsocket -lnsl -lresolv -lx"), 1040 thread_scheme => "uithreads", 1041 }, 1042 "unixware-7" => { 1043 inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], 1044 CC => "cc", 1045 CFLAGS => "-O", 1046 cflags => combine("-Kalloca", threads("-Kthread")), 1047 lib_cppflags => "-DFILIO_H", 1048 ex_libs => add("-lsocket -lnsl"), 1049 thread_scheme => "uithreads", 1050 bn_ops => "BN_LLONG", 1051 perlasm_scheme => "elf-1", 1052 dso_scheme => "dlfcn", 1053 shared_target => "svr5-shared", 1054 shared_cflag => "-Kpic", 1055 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 1056 }, 1057 "unixware-7-gcc" => { 1058 inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], 1059 CC => "gcc", 1060 CFLAGS => "-O3 -fomit-frame-pointer -Wall", 1061 cppflags => add(threads("-D_REENTRANT")), 1062 lib_cppflags => add("-DL_ENDIAN -DFILIO_H"), 1063 ex_libs => add("-lsocket -lnsl"), 1064 bn_ops => "BN_LLONG", 1065 thread_scheme => "pthreads", 1066 perlasm_scheme => "elf-1", 1067 dso_scheme => "dlfcn", 1068 shared_target => "gnu-shared", 1069 shared_cflag => "-fPIC", 1070 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 1071 }, 1072# SCO 5 - Ben Laurie says the -O breaks the SCO cc. 1073 "sco5-cc" => { 1074 inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], 1075 cc => "cc", 1076 cflags => "-belf", 1077 ex_libs => add("-lsocket -lnsl"), 1078 thread_scheme => "(unknown)", 1079 perlasm_scheme => "elf-1", 1080 dso_scheme => "dlfcn", 1081 shared_target => "svr3-shared", 1082 shared_cflag => "-Kpic", 1083 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 1084 }, 1085 "sco5-gcc" => { 1086 inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], 1087 cc => "gcc", 1088 cflags => "-O3 -fomit-frame-pointer", 1089 ex_libs => add("-lsocket -lnsl"), 1090 bn_ops => "BN_LLONG", 1091 thread_scheme => "(unknown)", 1092 perlasm_scheme => "elf-1", 1093 dso_scheme => "dlfcn", 1094 shared_target => "svr3-shared", 1095 shared_cflag => "-fPIC", 1096 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 1097 }, 1098 1099#### IBM's AIX. 1100 # Below targets assume AIX >=5. Caveat lector. If you are accustomed 1101 # to control compilation "bitness" by setting $OBJECT_MODE environment 1102 # variable, then you should know that in OpenSSL case it's considered 1103 # only in ./config. Once configured, build procedure remains "deaf" to 1104 # current value of $OBJECT_MODE. 1105 "aix-common" => { 1106 inherit_from => [ "BASE_unix" ], 1107 template => 1, 1108 sys_id => "AIX", 1109 lib_cppflags => "-DB_ENDIAN", 1110 lflags => "-Wl,-bsvr4", 1111 thread_scheme => "pthreads", 1112 dso_scheme => "dlfcn", 1113 shared_target => "self", 1114 module_ldflags => "-Wl,-G,-bsymbolic,-bnoentry", 1115 shared_ldflag => "-Wl,-G,-bsymbolic,-bnoentry", 1116 shared_defflag => "-Wl,-bE:", 1117 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 1118 dso_extension => ".so", 1119 lib_extension => shared("_a.a"), 1120 shared_extension_simple => shared(".a"), 1121 }, 1122 "aix-gcc" => { 1123 inherit_from => [ "aix-common", asm("ppc32_asm") ], 1124 CC => "gcc", 1125 CFLAGS => picker(debug => "-O0 -g", 1126 release => "-O"), 1127 cflags => add(threads("-pthread")), 1128 ex_libs => threads("-pthread"), 1129 bn_ops => "BN_LLONG RC4_CHAR", 1130 perlasm_scheme => "aix32", 1131 shared_ldflag => add_before("-shared -static-libgcc"), 1132 AR => add("-X32"), 1133 RANLIB => add("-X32"), 1134 }, 1135 "aix64-gcc" => { 1136 inherit_from => [ "aix-common", asm("ppc64_asm") ], 1137 CC => "gcc", 1138 CFLAGS => picker(debug => "-O0 -g", 1139 release => "-O"), 1140 cflags => combine("-maix64", threads("-pthread")), 1141 ex_libs => threads("-pthread"), 1142 bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", 1143 perlasm_scheme => "aix64", 1144 shared_ldflag => add_before("-shared -static-libgcc"), 1145 shared_extension => "64.so.\$(SHLIB_VERSION_NUMBER)", 1146 AR => add("-X64"), 1147 RANLIB => add("-X64"), 1148 }, 1149 "aix-cc" => { 1150 inherit_from => [ "aix-common", asm("ppc32_asm") ], 1151 CC => "cc", 1152 CFLAGS => picker(debug => "-O0 -g", 1153 release => "-O"), 1154 cflags => combine("-q32 -qmaxmem=16384 -qro -qroconst", 1155 threads("-qthreaded")), 1156 cppflags => threads("-D_THREAD_SAFE"), 1157 ex_libs => threads("-lpthreads"), 1158 bn_ops => "BN_LLONG RC4_CHAR", 1159 perlasm_scheme => "aix32", 1160 shared_cflag => "-qpic", 1161 AR => add("-X32"), 1162 RANLIB => add("-X32"), 1163 }, 1164 "aix64-cc" => { 1165 inherit_from => [ "aix-common", asm("ppc64_asm") ], 1166 CC => "cc", 1167 CFLAGS => picker(debug => "-O0 -g", 1168 release => "-O"), 1169 cflags => combine("-q64 -qmaxmem=16384 -qro -qroconst", 1170 threads("-qthreaded")), 1171 cppflags => threads("-D_THREAD_SAFE"), 1172 ex_libs => threads("-lpthreads"), 1173 bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", 1174 perlasm_scheme => "aix64", 1175 dso_scheme => "dlfcn", 1176 shared_cflag => "-qpic", 1177 shared_extension => "64.so.\$(SHLIB_VERSION_NUMBER)", 1178 AR => add("-X64"), 1179 RANLIB => add("-X64"), 1180 }, 1181 1182# SIEMENS BS2000/OSD: an EBCDIC-based mainframe 1183 "BS2000-OSD" => { 1184 inherit_from => [ "BASE_unix" ], 1185 CC => "c89", 1186 CFLAGS => "-O", 1187 cflags => "-XLLML -XLLMK -XL", 1188 cppflags => "-DCHARSET_EBCDIC", 1189 lib_cppflags => "-DB_ENDIAN", 1190 ex_libs => add("-lsocket -lnsl"), 1191 bn_ops => "THIRTY_TWO_BIT RC4_CHAR", 1192 thread_scheme => "(unknown)", 1193 }, 1194 1195#### Visual C targets 1196# 1197# Win64 targets, WIN64I denotes IA-64/Itanium and WIN64A - AMD64 1198# 1199# Note about /wd4090, disable warning C4090. This warning returns false 1200# positives in some situations. Disabling it altogether masks both 1201# legitimate and false cases, but as we compile on multiple platforms, 1202# we rely on other compilers to catch legitimate cases. 1203# 1204# Also note that we force threads no matter what. Configuring "no-threads" 1205# is ignored. 1206# 1207# UNICODE is defined in VC-common and applies to all targets. It used to 1208# be an opt-in option for VC-WIN32, but not anymore. The original reason 1209# was because ANSI API was *native* system interface for no longer 1210# supported Windows 9x. Keep in mind that UNICODE only affects how 1211# OpenSSL libraries interact with underlying OS, it doesn't affect API 1212# that OpenSSL presents to application. 1213 1214 "VC-common" => { 1215 inherit_from => [ "BASE_Windows" ], 1216 template => 1, 1217 CC => "cl", 1218 CPP => '$(CC) /EP /C', 1219 CFLAGS => "/W3 /wd4090 /nologo", 1220 LDFLAGS => add("/debug"), 1221 coutflag => "/Fo", 1222 defines => add("OPENSSL_SYS_WIN32", "WIN32_LEAN_AND_MEAN", 1223 "UNICODE", "_UNICODE", 1224 "_CRT_SECURE_NO_DEPRECATE", 1225 "_WINSOCK_DEPRECATED_NO_WARNINGS"), 1226 lib_cflags => add("/Zi /Fdossl_static.pdb"), 1227 lib_defines => add("L_ENDIAN"), 1228 dso_cflags => "/Zi /Fddso.pdb", 1229 bin_cflags => "/Zi /Fdapp.pdb", 1230 shared_ldflag => "/dll", 1231 shared_target => "win-shared", # meaningless except it gives Configure a hint 1232 thread_scheme => "winthreads", 1233 dso_scheme => "win32", 1234 apps_aux_src => add("win32_init.c"), 1235 bn_ops => "EXPORT_VAR_AS_FN", 1236 # additional parameter to build_scheme denotes install-path "flavour" 1237 build_scheme => add("VC-common", { separator => undef }), 1238 }, 1239 "VC-noCE-common" => { 1240 inherit_from => [ "VC-common" ], 1241 template => 1, 1242 CFLAGS => add(picker(debug => '/Od', 1243 release => '/O2')), 1244 cflags => add(picker(default => '/Gs0 /GF /Gy', 1245 debug => 1246 sub { 1247 ($disabled{shared} ? "" : "/MDd"); 1248 }, 1249 release => 1250 sub { 1251 ($disabled{shared} ? "" : "/MD"); 1252 })), 1253 defines => add(picker(default => [], # works as type cast 1254 debug => [ "DEBUG", "_DEBUG" ])), 1255 lib_cflags => add(sub { $disabled{shared} ? "/MT /Zl" : () }), 1256 # Following might/should appears controversial, i.e. defining 1257 # /MDd without evaluating $disabled{shared}. It works in 1258 # non-shared build because static library is compiled with /Zl 1259 # and bares no reference to specific RTL. And it works in 1260 # shared build because multiple /MDd options are not prohibited. 1261 # But why /MDd in static build? Well, basically this is just a 1262 # reference point, which allows to catch eventual errors that 1263 # would prevent those who want to wrap OpenSSL into own .DLL. 1264 # Why not /MD in release build then? Well, some are likely to 1265 # prefer [non-debug] openssl.exe to be free from Micorosoft RTL 1266 # redistributable. 1267 bin_cflags => add(picker(debug => "/MDd", 1268 release => sub { $disabled{shared} ? "/MT" : () }, 1269 )), 1270 bin_lflags => add("/subsystem:console /opt:ref"), 1271 ex_libs => add(sub { 1272 my @ex_libs = (); 1273 push @ex_libs, 'ws2_32.lib' unless $disabled{sock}; 1274 push @ex_libs, 'gdi32.lib advapi32.lib crypt32.lib user32.lib'; 1275 return join(" ", @ex_libs); 1276 }), 1277 }, 1278 "VC-WIN64-common" => { 1279 inherit_from => [ "VC-noCE-common" ], 1280 template => 1, 1281 ex_libs => add(sub { 1282 my @ex_libs = (); 1283 push @ex_libs, 'bufferoverflowu.lib' if (`cl 2>&1` =~ /14\.00\.4[0-9]{4}\./); 1284 return join(" ", @_, @ex_libs); 1285 }), 1286 bn_ops => add("SIXTY_FOUR_BIT"), 1287 }, 1288 "VC-WIN64I" => { 1289 inherit_from => [ "VC-WIN64-common", asm("ia64_asm"), 1290 sub { $disabled{shared} ? () : "ia64_uplink" } ], 1291 AS => "ias", 1292 ASFLAGS => "-d debug", 1293 asoutflag => "-o ", 1294 sys_id => "WIN64I", 1295 bn_asm_src => sub { return undef unless @_; 1296 my $r=join(" ",@_); $r=~s|bn-ia64.s|bn_asm.c|; $r; }, 1297 perlasm_scheme => "ias", 1298 multilib => "-ia64", 1299 }, 1300 "VC-WIN64A" => { 1301 inherit_from => [ "VC-WIN64-common", asm("x86_64_asm"), 1302 sub { $disabled{shared} ? () : "x86_64_uplink" } ], 1303 AS => sub { vc_win64a_info()->{AS} }, 1304 ASFLAGS => sub { vc_win64a_info()->{ASFLAGS} }, 1305 asoutflag => sub { vc_win64a_info()->{asoutflag} }, 1306 asflags => sub { vc_win64a_info()->{asflags} }, 1307 sys_id => "WIN64A", 1308 bn_asm_src => sub { return undef unless @_; 1309 my $r=join(" ",@_); $r=~s|asm/x86_64-gcc|bn_asm|; $r; }, 1310 perlasm_scheme => "auto", 1311 multilib => "-x64", 1312 }, 1313 "VC-WIN32" => { 1314 inherit_from => [ "VC-noCE-common", asm("x86_asm"), 1315 sub { $disabled{shared} ? () : "uplink_common" } ], 1316 AS => sub { vc_win32_info()->{AS} }, 1317 ASFLAGS => sub { vc_win32_info()->{ASFLAGS} }, 1318 asoutflag => sub { vc_win32_info()->{asoutflag} }, 1319 asflags => sub { vc_win32_info()->{asflags} }, 1320 sys_id => "WIN32", 1321 bn_ops => add("BN_LLONG"), 1322 perlasm_scheme => sub { vc_win32_info()->{perlasm_scheme} }, 1323 # "WOW" stands for "Windows on Windows", and "VC-WOW" engages 1324 # some installation path heuristics in windows-makefile.tmpl... 1325 build_scheme => add("VC-WOW", { separator => undef }), 1326 }, 1327 "VC-CE" => { 1328 inherit_from => [ "VC-common" ], 1329 CFLAGS => add(picker(debug => "/Od", 1330 release => "/O1i")), 1331 CPPDEFINES => picker(debug => [ "DEBUG", "_DEBUG" ]), 1332 LDFLAGS => add("/nologo /opt:ref"), 1333 cflags => 1334 combine('/GF /Gy', 1335 sub { vc_wince_info()->{cflags}; }, 1336 sub { `cl 2>&1` =~ /Version ([0-9]+)\./ && $1>=14 1337 ? ($disabled{shared} ? " /MT" : " /MD") 1338 : " /MC"; }), 1339 cppflags => sub { vc_wince_info()->{cppflags}; }, 1340 lib_defines => add("NO_CHMOD", "OPENSSL_SMALL_FOOTPRINT"), 1341 lib_cppflags => sub { vc_wince_info()->{cppflags}; }, 1342 includes => 1343 add(combine(sub { defined(env('WCECOMPAT')) 1344 ? '$(WCECOMPAT)/include' : (); }, 1345 sub { defined(env('PORTSDK_LIBPATH')) 1346 ? '$(PORTSDK_LIBPATH)/../../include' 1347 : (); })), 1348 lflags => add(combine(sub { vc_wince_info()->{lflags}; }, 1349 sub { defined(env('PORTSDK_LIBPATH')) 1350 ? "/entry:mainCRTstartup" : (); })), 1351 sys_id => "WINCE", 1352 bn_ops => add("BN_LLONG"), 1353 ex_libs => add(sub { 1354 my @ex_libs = (); 1355 push @ex_libs, 'ws2.lib' unless $disabled{sock}; 1356 push @ex_libs, 'crypt32.lib'; 1357 if (defined(env('WCECOMPAT'))) { 1358 my $x = '$(WCECOMPAT)/lib'; 1359 if (-f "$x/env('TARGETCPU')/wcecompatex.lib") { 1360 $x .= '/$(TARGETCPU)/wcecompatex.lib'; 1361 } else { 1362 $x .= '/wcecompatex.lib'; 1363 } 1364 push @ex_libs, $x; 1365 } 1366 push @ex_libs, '$(PORTSDK_LIBPATH)/portlib.lib' 1367 if (defined(env('PORTSDK_LIBPATH'))); 1368 push @ex_libs, ' /nodefaultlib coredll.lib corelibc.lib' 1369 if (env('TARGETCPU') eq "X86"); 1370 return @ex_libs; 1371 }), 1372 }, 1373 1374#### MinGW 1375 "mingw" => { 1376 inherit_from => [ "BASE_unix", asm("x86_asm"), 1377 sub { $disabled{shared} ? () : "x86_uplink" } ], 1378 CC => "gcc", 1379 CFLAGS => picker(default => "-Wall", 1380 debug => "-g -O0", 1381 release => "-O3 -fomit-frame-pointer"), 1382 cflags => "-m32", 1383 cppflags => combine("-DUNICODE -D_UNICODE -DWIN32_LEAN_AND_MEAN", 1384 threads("-D_MT")), 1385 lib_cppflags => "-DL_ENDIAN", 1386 sys_id => "MINGW32", 1387 ex_libs => add("-lws2_32 -lgdi32 -lcrypt32"), 1388 bn_ops => "BN_LLONG EXPORT_VAR_AS_FN", 1389 thread_scheme => "winthreads", 1390 perlasm_scheme => "coff", 1391 dso_scheme => "win32", 1392 shared_target => "mingw-shared", 1393 shared_cppflags => add("_WINDLL"), 1394 shared_ldflag => "-static-libgcc", 1395 shared_rcflag => "--target=pe-i386", 1396 shared_extension => ".dll", 1397 multilib => "", 1398 apps_aux_src => add("win32_init.c"), 1399 # "WOW" stands for "Windows on Windows", and that word engages 1400 # some installation path heuristics in unix-Makefile.tmpl... 1401 build_scheme => add("WOW", { separator => undef }), 1402 1403 }, 1404 "mingw64" => { 1405 # As for OPENSSL_USE_APPLINK. Applink makes it possible to use 1406 # .dll compiled with one compiler with application compiled with 1407 # another compiler. It's possible to engage Applink support in 1408 # mingw64 build, but it's not done, because till mingw64 1409 # supports structured exception handling, one can't seriously 1410 # consider its binaries for using with non-mingw64 run-time 1411 # environment. And as mingw64 is always consistent with itself, 1412 # Applink is never engaged and can as well be omitted. 1413 inherit_from => [ "BASE_unix", asm("x86_64_asm") ], 1414 CC => "gcc", 1415 CFLAGS => picker(default => "-Wall", 1416 debug => "-g -O0", 1417 release => "-O3"), 1418 cflags => "-m64", 1419 cppflags => combine("-DUNICODE -D_UNICODE -DWIN32_LEAN_AND_MEAN", 1420 threads("-D_MT")), 1421 lib_cppflags => "-DL_ENDIAN", 1422 sys_id => "MINGW64", 1423 ex_libs => add("-lws2_32 -lgdi32 -lcrypt32"), 1424 bn_ops => "SIXTY_FOUR_BIT EXPORT_VAR_AS_FN", 1425 thread_scheme => "winthreads", 1426 perlasm_scheme => "mingw64", 1427 dso_scheme => "win32", 1428 shared_target => "mingw-shared", 1429 shared_cppflags => add("_WINDLL"), 1430 shared_ldflag => "-static-libgcc", 1431 shared_rcflag => "--target=pe-x86-64", 1432 shared_extension => ".dll", 1433 multilib => "64", 1434 apps_aux_src => add("win32_init.c"), 1435 }, 1436 1437#### UEFI 1438 "UEFI" => { 1439 inherit_from => [ "BASE_unix" ], 1440 CC => "cc", 1441 CFLAGS => "-O", 1442 lib_cppflags => "-DL_ENDIAN", 1443 sys_id => "UEFI", 1444 }, 1445 1446#### UWIN 1447 "UWIN" => { 1448 inherit_from => [ "BASE_unix" ], 1449 CC => "cc", 1450 CFLAGS => "-O -Wall", 1451 lib_cppflags => "-DTERMIOS -DL_ENDIAN", 1452 sys_id => "UWIN", 1453 bn_ops => "BN_LLONG", 1454 dso_scheme => "win32", 1455 }, 1456 1457#### Cygwin 1458 "Cygwin-x86" => { 1459 inherit_from => [ "BASE_unix", asm("x86_asm") ], 1460 CC => "gcc", 1461 CFLAGS => picker(default => "-Wall", 1462 debug => "-g -O0", 1463 release => "-O3 -fomit-frame-pointer"), 1464 lib_cppflags => "-DTERMIOS -DL_ENDIAN", 1465 sys_id => "CYGWIN", 1466 bn_ops => "BN_LLONG", 1467 thread_scheme => "pthread", 1468 perlasm_scheme => "coff", 1469 dso_scheme => "dlfcn", 1470 shared_target => "cygwin-shared", 1471 shared_cppflags => "-D_WINDLL", 1472 shared_extension => ".dll", 1473 }, 1474 "Cygwin-x86_64" => { 1475 inherit_from => [ "BASE_unix", asm("x86_64_asm") ], 1476 CC => "gcc", 1477 CFLAGS => picker(default => "-Wall", 1478 debug => "-g -O0", 1479 release => "-O3"), 1480 lib_cppflags => "-DTERMIOS -DL_ENDIAN", 1481 sys_id => "CYGWIN", 1482 bn_ops => "SIXTY_FOUR_BIT_LONG", 1483 thread_scheme => "pthread", 1484 perlasm_scheme => "mingw64", 1485 dso_scheme => "dlfcn", 1486 shared_target => "cygwin-shared", 1487 shared_cppflags => "-D_WINDLL", 1488 shared_extension => ".dll", 1489 }, 1490 # Backward compatibility for those using this target 1491 "Cygwin" => { 1492 inherit_from => [ "Cygwin-x86" ] 1493 }, 1494 # In case someone constructs the Cygwin target name themself 1495 "Cygwin-i386" => { 1496 inherit_from => [ "Cygwin-x86" ] 1497 }, 1498 "Cygwin-i486" => { 1499 inherit_from => [ "Cygwin-x86" ] 1500 }, 1501 "Cygwin-i586" => { 1502 inherit_from => [ "Cygwin-x86" ] 1503 }, 1504 "Cygwin-i686" => { 1505 inherit_from => [ "Cygwin-x86" ] 1506 }, 1507 1508##### MacOS X (a.k.a. Darwin) setup 1509 "darwin-common" => { 1510 inherit_from => [ "BASE_unix" ], 1511 template => 1, 1512 CC => "cc", 1513 CFLAGS => picker(debug => "-g -O0", 1514 release => "-O3"), 1515 cppflags => threads("-D_REENTRANT"), 1516 lflags => "-Wl,-search_paths_first", 1517 sys_id => "MACOSX", 1518 bn_ops => "BN_LLONG RC4_CHAR", 1519 thread_scheme => "pthreads", 1520 perlasm_scheme => "osx32", 1521 dso_scheme => "dlfcn", 1522 ranlib => "ranlib -c", 1523 shared_target => "darwin-shared", 1524 shared_cflag => "-fPIC", 1525 shared_extension => ".\$(SHLIB_VERSION_NUMBER).dylib", 1526 }, 1527 # Option "freeze" such as -std=gnu9x can't negatively interfere 1528 # with future defaults for below two targets, because MacOS X 1529 # for PPC has no future, it was discontinued by vendor in 2009. 1530 "darwin-ppc-cc" => { 1531 inherit_from => [ "darwin-common", asm("ppc32_asm") ], 1532 cflags => add("-arch ppc -std=gnu9x -Wa,-force_cpusubtype_ALL"), 1533 lib_cppflags => add("-DB_ENDIAN"), 1534 shared_cflag => add("-fno-common"), 1535 perlasm_scheme => "osx32", 1536 }, 1537 "darwin64-ppc-cc" => { 1538 inherit_from => [ "darwin-common", asm("ppc64_asm") ], 1539 cflags => add("-arch ppc64 -std=gnu9x"), 1540 lib_cppflags => add("-DB_ENDIAN"), 1541 bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", 1542 perlasm_scheme => "osx64", 1543 }, 1544 "darwin-i386-cc" => { 1545 inherit_from => [ "darwin-common", asm("x86_asm") ], 1546 CFLAGS => add(picker(release => "-fomit-frame-pointer")), 1547 cflags => add("-arch i386"), 1548 lib_cppflags => add("-DL_ENDIAN"), 1549 bn_ops => "BN_LLONG RC4_INT", 1550 perlasm_scheme => "macosx", 1551 }, 1552 "darwin64-x86_64-cc" => { 1553 inherit_from => [ "darwin-common", asm("x86_64_asm") ], 1554 CFLAGS => add("-Wall"), 1555 cflags => add("-arch x86_64"), 1556 lib_cppflags => add("-DL_ENDIAN"), 1557 bn_ops => "SIXTY_FOUR_BIT_LONG", 1558 perlasm_scheme => "macosx", 1559 }, 1560 1561##### GNU Hurd 1562 "hurd-x86" => { 1563 inherit_from => [ "BASE_unix" ], 1564 inherit_from => [ asm("x86_elf_asm") ], 1565 CC => "gcc", 1566 CFLAGS => "-O3 -fomit-frame-pointer -Wall", 1567 cflags => threads("-pthread"), 1568 lib_cppflags => "-DL_ENDIAN", 1569 ex_libs => add("-ldl", threads("-pthread")), 1570 bn_ops => "BN_LLONG", 1571 thread_scheme => "pthreads", 1572 dso_scheme => "dlfcn", 1573 shared_target => "linux-shared", 1574 shared_cflag => "-fPIC", 1575 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 1576 }, 1577 1578##### VxWorks for various targets 1579 "vxworks-ppc60x" => { 1580 inherit_from => [ "BASE_unix" ], 1581 CC => "ccppc", 1582 CFLAGS => "-O2 -Wall -fstrength-reduce", 1583 cflags => "-mrtp -mhard-float -mstrict-align -fno-implicit-fp -fno-builtin -fno-strict-aliasing", 1584 cppflags => combine("-D_REENTRANT -DPPC32_fp60x -DCPU=PPC32", 1585 "_DTOOL_FAMILY=gnu -DTOOL=gnu", 1586 "-I\$(WIND_BASE)/target/usr/h", 1587 "-I\$(WIND_BASE)/target/usr/h/wrn/coreip"), 1588 sys_id => "VXWORKS", 1589 lflags => add("-L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/common"), 1590 ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000"), 1591 }, 1592 "vxworks-ppcgen" => { 1593 inherit_from => [ "BASE_unix" ], 1594 CC => "ccppc", 1595 CFLAGS => "-O1 -Wall", 1596 cflags => "-mrtp -msoft-float -mstrict-align -fno-builtin -fno-strict-aliasing", 1597 cppflags => combine("-D_REENTRANT -DPPC32 -DCPU=PPC32", 1598 "-DTOOL_FAMILY=gnu -DTOOL=gnu", 1599 "-I\$(WIND_BASE)/target/usr/h", 1600 "-I\$(WIND_BASE)/target/usr/h/wrn/coreip"), 1601 sys_id => "VXWORKS", 1602 lflags => add("-L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/sfcommon"), 1603 ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000"), 1604 }, 1605 "vxworks-ppc405" => { 1606 inherit_from => [ "BASE_unix" ], 1607 CC => "ccppc", 1608 CFLAGS => "-g", 1609 cflags => "-msoft-float -mlongcall", 1610 cppflags => combine("-D_REENTRANT -DPPC32 -DCPU=PPC405", 1611 "-DTOOL_FAMILY=gnu -DTOOL=gnu", 1612 "-I\$(WIND_BASE)/target/h"), 1613 sys_id => "VXWORKS", 1614 lflags => add("-r"), 1615 }, 1616 "vxworks-ppc750" => { 1617 inherit_from => [ "BASE_unix" ], 1618 CC => "ccppc", 1619 CFLAGS => "-ansi -fvolatile -Wall \$(DEBUG_FLAG)", 1620 cflags => "-nostdinc -fno-builtin -fno-for-scope -fsigned-char -msoft-float -mlongcall", 1621 cppflags => combine("-DPPC750 -D_REENTRANT -DCPU=PPC604", 1622 "-I\$(WIND_BASE)/target/h"), 1623 sys_id => "VXWORKS", 1624 lflags => add("-r"), 1625 }, 1626 "vxworks-ppc750-debug" => { 1627 inherit_from => [ "BASE_unix" ], 1628 CC => "ccppc", 1629 CFLAGS => "-ansi -fvolatile -Wall -g", 1630 cflags => "-nostdinc -fno-builtin -fno-for-scope -fsigned-char -msoft-float -mlongcall", 1631 cppflags => combine("-DPPC750 -D_REENTRANT -DCPU=PPC604", 1632 "-DPEDANTIC -DDEBUG", 1633 "-I\$(WIND_BASE)/target/h"), 1634 sys_id => "VXWORKS", 1635 lflags => add("-r"), 1636 }, 1637 "vxworks-ppc860" => { 1638 inherit_from => [ "BASE_unix" ], 1639 CC => "ccppc", 1640 cflags => "-nostdinc -msoft-float", 1641 cppflags => combine("-DCPU=PPC860 -DNO_STRINGS_H", 1642 "-I\$(WIND_BASE)/target/h"), 1643 sys_id => "VXWORKS", 1644 lflags => add("-r"), 1645 }, 1646 "vxworks-simlinux" => { 1647 inherit_from => [ "BASE_unix" ], 1648 CC => "ccpentium", 1649 cflags => "-B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -fno-builtin -fno-defer-pop", 1650 cppflags => combine("-D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\"", 1651 "-DL_ENDIAN -DCPU=SIMLINUX -DNO_STRINGS_H", 1652 "-DTOOL_FAMILY=gnu -DTOOL=gnu", 1653 "-DOPENSSL_NO_HW_PADLOCK", 1654 "-I\$(WIND_BASE)/target/h", 1655 "-I\$(WIND_BASE)/target/h/wrn/coreip"), 1656 sys_id => "VXWORKS", 1657 lflags => add("-r"), 1658 ranlib => "ranlibpentium", 1659 }, 1660 "vxworks-mips" => { 1661 inherit_from => [ "BASE_unix", asm("mips32_asm") ], 1662 CC => "ccmips", 1663 CFLAGS => "-O -G 0", 1664 cflags => "-mrtp -mips2 -B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -msoft-float -mno-branch-likely -fno-builtin -fno-defer-pop", 1665 cppflags => combine("-D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\"", 1666 "-DCPU=MIPS32 -DNO_STRINGS_H", 1667 "-DTOOL_FAMILY=gnu -DTOOL=gnu", 1668 "-DOPENSSL_NO_HW_PADLOCK", 1669 threads("-D_REENTRANT"), 1670 "-I\$(WIND_BASE)/target/h", 1671 "-I\$(WIND_BASE)/target/h/wrn/coreip"), 1672 sys_id => "VXWORKS", 1673 lflags => add("-L \$(WIND_BASE)/target/usr/lib/mips/MIPSI32/sfcommon"), 1674 ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000"), 1675 thread_scheme => "pthreads", 1676 perlasm_scheme => "o32", 1677 ranlib => "ranlibmips", 1678 }, 1679 1680#### uClinux 1681 "uClinux-dist" => { 1682 inherit_from => [ "BASE_unix" ], 1683 CC => sub { env('CC') }, 1684 cppflags => threads("-D_REENTRANT"), 1685 ex_libs => add("\$(LDLIBS)"), 1686 bn_ops => "BN_LLONG", 1687 thread_scheme => "pthreads", 1688 dso_scheme => sub { env('LIBSSL_dlfcn') }, 1689 shared_target => "linux-shared", 1690 shared_cflag => "-fPIC", 1691 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 1692 ranlib => sub { env('RANLIB') }, 1693 }, 1694 "uClinux-dist64" => { 1695 inherit_from => [ "BASE_unix" ], 1696 CC => sub { env('CC') }, 1697 cppflags => threads("-D_REENTRANT"), 1698 ex_libs => add("\$(LDLIBS)"), 1699 bn_ops => "SIXTY_FOUR_BIT_LONG", 1700 thread_scheme => "pthreads", 1701 dso_scheme => sub { env('LIBSSL_dlfcn') }, 1702 shared_target => "linux-shared", 1703 shared_cflag => "-fPIC", 1704 shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", 1705 ranlib => sub { env('RANLIB') }, 1706 }, 1707 1708 ##### VMS 1709 # Most things happen in vms-generic. 1710 # Note that vms_info extracts the pointer size from the end of 1711 # the target name, and will assume that anything matching /-p\d+$/ 1712 # indicates the pointer size setting for the desired target. 1713 "vms-generic" => { 1714 inherit_from => [ "BASE_VMS" ], 1715 template => 1, 1716 CC => "CC/DECC", 1717 CPP => '$(CC)/PREPROCESS_ONLY=SYS$OUTPUT:', 1718 CFLAGS => 1719 combine(picker(default => "/STANDARD=(ISOC94,RELAXED)/NOLIST/PREFIX=ALL", 1720 debug => "/NOOPTIMIZE/DEBUG", 1721 release => "/OPTIMIZE/NODEBUG"), 1722 sub { my @warnings = 1723 @{vms_info()->{disable_warns}}; 1724 @warnings 1725 ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : (); }), 1726 lib_defines => 1727 add("OPENSSL_USE_NODELETE", 1728 sub { 1729 return vms_info()->{def_zlib} 1730 ? "LIBZ=\"\"\"".vms_info()->{def_zlib}."\"\"\"" : (); 1731 }), 1732 lflags => picker(default => "/MAP='F\$PARSE(\".MAP\",\"\$\@\")'", 1733 debug => "/DEBUG/TRACEBACK", 1734 release => "/NODEBUG/NOTRACEBACK"), 1735 lib_cflags => add("/NAMES=(AS_IS,SHORTENED)/EXTERN_MODEL=STRICT_REFDEF"), 1736 # no_inst_lib_cflags is used instead of lib_cflags by descrip.mms.tmpl 1737 # for object files belonging to selected internal libraries 1738 no_inst_lib_cflags => "", 1739 ex_libs => add(sub { return vms_info()->{zlib} || (); }), 1740 shared_target => "vms-shared", 1741 dso_scheme => "vms", 1742 thread_scheme => "pthreads", 1743 1744 AS => sub { vms_info()->{AS} }, 1745 ASFLAGS => sub { vms_info()->{ASFLAGS} }, 1746 asoutflag => sub { vms_info()->{asoutflag} }, 1747 asflags => sub { vms_info()->{asflags} }, 1748 perlasm_scheme => sub { vms_info()->{perlasm_scheme} }, 1749 1750 disable => add('pinshared'), 1751 1752 apps_aux_src => "vms_term_sock.c", 1753 apps_init_src => "vms_decc_init.c", 1754 }, 1755 1756 # From HELP CC/POINTER_SIZE: 1757 # 1758 # ---------- 1759 # LONG[=ARGV] The compiler assumes 64-bit pointers. If the ARGV option to 1760 # LONG or 64 is present, the main argument argv will be an 1761 # array of long pointers instead of an array of short pointers. 1762 # 1763 # 64[=ARGV] Same as LONG. 1764 # ---------- 1765 # 1766 # We don't want the hassle of dealing with 32-bit pointers with argv, so 1767 # we force it to have 64-bit pointers, see the added cflags in the -p64 1768 # config targets below. 1769 1770 "vms-alpha" => { 1771 inherit_from => [ "vms-generic" ], 1772 bn_ops => "SIXTY_FOUR_BIT RC4_INT", 1773 pointer_size => "", 1774 }, 1775 "vms-alpha-p32" => { 1776 inherit_from => [ "vms-alpha" ], 1777 cflags => add("/POINTER_SIZE=32"), 1778 pointer_size => "32", 1779 }, 1780 "vms-alpha-p64" => { 1781 inherit_from => [ "vms-alpha" ], 1782 cflags => add("/POINTER_SIZE=64=ARGV"), 1783 pointer_size => "64", 1784 }, 1785 "vms-ia64" => { 1786 inherit_from => [ "vms-generic", 1787 sub { vms_info()->{AS} 1788 ? asm("ia64_asm")->() : () } ], 1789 bn_ops => "SIXTY_FOUR_BIT RC4_INT", 1790 pointer_size => "", 1791 1792 modes_asm_src => "", # Because ghash-ia64.s doesn't work on VMS 1793 }, 1794 "vms-ia64-p32" => { 1795 inherit_from => [ "vms-ia64" ], 1796 cflags => add("/POINTER_SIZE=32"), 1797 pointer_size => "32", 1798 }, 1799 "vms-ia64-p64" => { 1800 inherit_from => [ "vms-ia64" ], 1801 cflags => add("/POINTER_SIZE=64=ARGV"), 1802 pointer_size => "64", 1803 }, 1804 1805); 1806