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