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