Home | History | Annotate | Line # | Download | only in Configurations
      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