Link _chkstk.o from FIPSLIB_D.
[openssl.git] / util / pl / VC-32.pl
1 #!/usr/local/bin/perl
2 # VCw32lib.pl - the file for Visual C++ 4.[01] for windows NT, static libraries
3 #
4
5 $ssl=   "ssleay32";
6
7 if ($fips && !$shlib)
8         {
9         $crypto="libeayfips32";
10         $crypto_compat = "libeaycompat32.lib";
11         }
12 else
13         {
14         $crypto="libeay32";
15         }
16
17 $o='\\';
18 $cp='copy nul+';        # Timestamps get stuffed otherwise
19 $rm='del';
20
21 $zlib_lib="zlib1.lib";
22
23 # C compiler stuff
24 $cc='cl';
25 $cflags=' /MD /W3 /WX /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32';
26 $cflags.=' -D_CRT_SECURE_NO_DEPRECATE';         # shut up VC8
27 $cflags.=' -D_CRT_NONSTDC_NO_DEPRECATE';        # shut up VC8
28 $lflags="/nologo /subsystem:console /machine:I386 /opt:ref";
29 $mlflags='';
30
31 $out_def="out32";
32 $tmp_def="tmp32";
33 $inc_def="inc32";
34
35 if ($debug)
36         {
37         $cflags=" /MDd /W3 /WX /Zi /Yd /Od /nologo -DOPENSSL_SYSNAME_WIN32 -D_DEBUG -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -DDEBUG -DDSO_WIN32";
38         $lflags.=" /debug";
39         $mlflags.=' /debug';
40         }
41 $cflags .= " -DOPENSSL_SYSNAME_WINNT" if $NT == 1;
42
43 $obj='.obj';
44 $ofile="/Fo";
45
46 # EXE linking stuff
47 $link="link";
48 $efile="/out:";
49 $exep='.exe';
50 if ($no_sock)
51         { $ex_libs=""; }
52 else    { $ex_libs="wsock32.lib user32.lib gdi32.lib"; }
53
54 # static library stuff
55 $mklib='lib';
56 $ranlib='';
57 $plib="";
58 $libp=".lib";
59 $shlibp=($shlib)?".dll":".lib";
60 $lfile='/out:';
61
62 $shlib_ex_obj="";
63 $app_ex_obj="setargv.obj";
64 if ($nasm) {
65         $asm='nasmw -f win32';
66         $afile='-o ';
67 } else {
68         $asm='ml /Cp /coff /c /Cx';
69         $asm.=" /Zi" if $debug;
70         $afile='/Fo';
71 }
72
73 $bn_asm_obj='';
74 $bn_asm_src='';
75 $des_enc_obj='';
76 $des_enc_src='';
77 $bf_enc_obj='';
78 $bf_enc_src='';
79
80 if (!$no_asm && !$fips)
81         {
82         $bn_asm_obj='crypto\bn\asm\bn_win32.obj';
83         $bn_asm_src='crypto\bn\asm\bn_win32.asm';
84         $des_enc_obj='crypto\des\asm\d_win32.obj crypto\des\asm\y_win32.obj';
85         $des_enc_src='crypto\des\asm\d_win32.asm crypto\des\asm\y_win32.asm';
86         $bf_enc_obj='crypto\bf\asm\b_win32.obj';
87         $bf_enc_src='crypto\bf\asm\b_win32.asm';
88         $cast_enc_obj='crypto\cast\asm\c_win32.obj';
89         $cast_enc_src='crypto\cast\asm\c_win32.asm';
90         $rc4_enc_obj='crypto\rc4\asm\r4_win32.obj';
91         $rc4_enc_src='crypto\rc4\asm\r4_win32.asm';
92         $rc5_enc_obj='crypto\rc5\asm\r5_win32.obj';
93         $rc5_enc_src='crypto\rc5\asm\r5_win32.asm';
94         $md5_asm_obj='crypto\md5\asm\m5_win32.obj';
95         $md5_asm_src='crypto\md5\asm\m5_win32.asm';
96         $sha1_asm_obj='crypto\sha\asm\s1_win32.obj';
97         $sha1_asm_src='crypto\sha\asm\s1_win32.asm';
98         $rmd160_asm_obj='crypto\ripemd\asm\rm_win32.obj';
99         $rmd160_asm_src='crypto\ripemd\asm\rm_win32.asm';
100         $cflags.=" -DBN_ASM -DMD5_ASM -DSHA1_ASM -DRMD160_ASM";
101         }
102
103 if ($shlib)
104         {
105         $mlflags.=" $lflags /dll";
106 #       $cflags =~ s| /MD| /MT|;
107         $lib_cflag=" -D_WINDLL";
108         $out_def="out32dll";
109         $tmp_def="tmp32dll";
110         }
111
112 $cflags.=" /Fd$out_def";
113
114 sub do_lib_rule
115         {
116         local($objs,$target,$name,$shlib,$ign,$base_addr) = @_;
117         local($ret,$Name);
118
119         $taget =~ s/\//$o/g if $o ne '/';
120         ($Name=$name) =~ tr/a-z/A-Z/;
121         my $base_arg;
122         if ($base_addr ne "")
123                 {
124                 $base_arg= " /base:$base_addr";
125                 }
126         else
127                 {
128                 $base_arg = "";
129                 }
130
131
132 #       $target="\$(LIB_D)$o$target";
133         if (!$shlib)
134                 {
135 #               $ret.="\t\$(RM) \$(O_$Name)\n";
136                 $ret.="$target: $objs\n";
137                 $ex =' advapi32.lib';
138                 $ex.=" \$(FIPSLIB_d)${o}_chkstk.o" if $fips && $target =~ /O_CRYPTO/;
139                 $ret.="\t\$(MKLIB) $lfile$target @<<\n  $objs $ex\n<<\n";
140                 }
141         else
142                 {
143                 local($ex)=($target =~ /O_SSL/)?' $(L_CRYPTO)':'';
144                 $ex.=' wsock32.lib gdi32.lib advapi32.lib user32.lib';
145                 $ex.=" $zlib_lib" if $zlib_opt == 1 && $target =~ /O_CRYPTO/;
146                 if ($fips && $target =~ /O_CRYPTO/)
147                         {
148                         $ex.=" \$(FIPSLIB_D)ms${o}_chkstk.o";
149                         $ret.="$target: $objs \$(PREMAIN_DSO_EXE)\n";
150                         $ret.="\tSET FIPS_LINK=\$(LINK)\n";
151                         $ret.="\tSET FIPS_CC=\$(CC)\n";
152                         $ret.="\tSET FIPS_CC_ARGS=/Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c\n";
153                         $ret.="\tSET PREMAIN_DSO_EXE=\$(PREMAIN_DSO_EXE)\n";
154                         $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n";
155                         $ret.="\tSET FIPS_TARGET=$target\n";
156                         $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n";
157                         $ret.="\t\$(FIPSLINK) \$(MLFLAGS) $base_arg $efile$target ";
158                         $ret.="/def:ms/${Name}.def @<<\n  \$(SHLIB_EX_OBJ) $objs ";
159                         $ret.="\$(OBJ_D)${o}fips_premain.obj $ex\n<<\n";
160                         }
161                 else
162                         {
163                         $ret.="$target: $objs\n";
164                         $ret.="\t\$(LINK) \$(MLFLAGS) $base_arg $efile$target /def:ms/${Name}.def @<<\n  \$(SHLIB_EX_OBJ) $objs $ex\n<<\n";
165                         }
166                 }
167         $ret.="\n";
168         return($ret);
169         }
170
171 sub do_link_rule
172         {
173         local($target,$files,$dep_libs,$libs,$standalone)=@_;
174         local($ret,$_);
175         $file =~ s/\//$o/g if $o ne '/';
176         $n=&bname($targer);
177         $ret.="$target: $files $dep_libs\n";
178         if ($standalone)
179                 {
180                 $ret.="  \$(LINK) \$(LFLAGS) $efile$target @<<\n\t";
181                 $ret.="\$(FIPSLIB_D)${o}_chkstk.o " if ($files =~ /O_FIPSCANISTER/);
182                 $ret.="$files $libs\n<<\n";
183                 }
184         elsif ($fips && !$shlib)
185                 {
186                 $ret.="\tSET FIPS_LINK=\$(LINK)\n";
187                 $ret.="\tSET FIPS_CC=\$(CC)\n";
188                 $ret.="\tSET FIPS_CC_ARGS=/Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c\n";
189                 $ret.="\tSET PREMAIN_DSO_EXE=\n";
190                 $ret.="\tSET FIPS_TARGET=$target\n";
191                 $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n";
192                 $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n";
193                 $ret.="  \$(FIPSLINK) \$(LFLAGS) $efile$target @<<\n";
194                 $ret.="  \$(APP_EX_OBJ) $files \$(OBJ_D)${o}fips_premain.obj $libs\n<<\n";
195                 }
196         else
197                 {
198                 $ret.="  \$(LINK) \$(LFLAGS) $efile$target @<<\n";
199                 $ret.="  \$(APP_EX_OBJ) $files $libs\n<<\n";
200                 }
201         $ret.="\n";
202         return($ret);
203         }
204
205 sub do_rlink_rule
206         {
207         local($target,$files,$dep_libs,$libs)=@_;
208         local($ret,$_);
209
210         $file =~ s/\//$o/g if $o ne '/';
211         $n=&bname($targer);
212         $ret.="$target: $files $dep_libs\n";
213         $ret.="  \$(MKCANISTER) $target <<\n";
214         $ret.="INPUT($files)\n<<\n";
215         $ret.="\n";
216         return($ret);
217         }
218
219
220 1;