summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/util/pl/VC-32.pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/util/pl/VC-32.pl')
-rw-r--r--src/lib/libcrypto/util/pl/VC-32.pl341
1 files changed, 110 insertions, 231 deletions
diff --git a/src/lib/libcrypto/util/pl/VC-32.pl b/src/lib/libcrypto/util/pl/VC-32.pl
index 8eb3c6c4bd..c3e29fda96 100644
--- a/src/lib/libcrypto/util/pl/VC-32.pl
+++ b/src/lib/libcrypto/util/pl/VC-32.pl
@@ -4,21 +4,7 @@
4# 4#
5 5
6$ssl= "ssleay32"; 6$ssl= "ssleay32";
7 7$crypto="libeay32";
8if ($fips && !$shlib)
9 {
10 $crypto="libeayfips32";
11 $crypto_compat = "libeaycompat32.lib";
12 }
13else
14 {
15 $crypto="libeay32";
16 }
17
18if ($fipscanisterbuild)
19 {
20 $fips_canister_path = "\$(LIB_D)\\fipscanister.lib";
21 }
22 8
23$o='\\'; 9$o='\\';
24$cp='$(PERL) util/copy.pl'; 10$cp='$(PERL) util/copy.pl';
@@ -27,6 +13,10 @@ $rm='del /Q';
27 13
28$zlib_lib="zlib1.lib"; 14$zlib_lib="zlib1.lib";
29 15
16# Santize -L options for ms link
17$l_flags =~ s/-L("\[^"]+")/\/libpath:$1/g;
18$l_flags =~ s/-L(\S+)/\/libpath:$1/g;
19
30# C compiler stuff 20# C compiler stuff
31$cc='cl'; 21$cc='cl';
32if ($FLAVOR =~ /WIN64/) 22if ($FLAVOR =~ /WIN64/)
@@ -42,14 +32,28 @@ if ($FLAVOR =~ /WIN64/)
42 # per 0.9.8 release remaining warnings were explicitly examined and 32 # per 0.9.8 release remaining warnings were explicitly examined and
43 # considered safe to ignore. 33 # considered safe to ignore.
44 # 34 #
45 $base_cflags=' /W3 /Gs0 /GF /Gy /nologo -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DOPENSSL_SYSNAME_WIN32 -DOPENSSL_SYSNAME_WINNT -DUNICODE -D_UNICODE'; 35 $base_cflags= " $mf_cflag";
46 $base_cflags.=' -D_CRT_SECURE_NO_DEPRECATE'; # shut up VC8
47 $base_cflags.=' -D_CRT_NONSTDC_NO_DEPRECATE'; # shut up VC8
48 my $f = $shlib?' /MD':' /MT'; 36 my $f = $shlib?' /MD':' /MT';
49 $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib 37 $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
50 $opt_cflags=$f.' /Ox'; 38 $opt_cflags=$f.' /Ox';
51 $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG'; 39 $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
52 $lflags="/nologo /subsystem:console /opt:ref"; 40 $lflags="/nologo /subsystem:console /opt:ref";
41
42 *::perlasm_compile_target = sub {
43 my ($target,$source,$bname)=@_;
44 my $ret;
45
46 $bname =~ s/(.*)\.[^\.]$/$1/;
47 $ret=<<___;
48\$(TMP_D)$o$bname.asm: $source
49 set ASM=\$(ASM)
50 \$(PERL) $source \$\@
51
52$target: \$(TMP_D)$o$bname.asm
53 \$(ASM) $afile\$\@ \$(TMP_D)$o$bname.asm
54
55___
56 }
53 } 57 }
54elsif ($FLAVOR =~ /CE/) 58elsif ($FLAVOR =~ /CE/)
55 { 59 {
@@ -99,18 +103,18 @@ elsif ($FLAVOR =~ /CE/)
99 } 103 }
100 104
101 $cc='$(CC)'; 105 $cc='$(CC)';
102 $base_cflags=' /W3 /WX /GF /Gy /nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -I$(WCECOMPAT)/include -DOPENSSL_SMALL_FOOTPRINT'; 106 $base_cflags=' /W3 /WX /GF /Gy /nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -DOPENSSL_SMALL_FOOTPRINT';
103 $base_cflags.=" $wcecdefs"; 107 $base_cflags.=" $wcecdefs";
108 $base_cflags.=' -I$(WCECOMPAT)/include' if (defined($ENV{'WCECOMPAT'}));
109 $base_cflags.=' -I$(PORTSDK_LIBPATH)/../../include' if (defined($ENV{'PORTSDK_LIBPATH'}));
104 $opt_cflags=' /MC /O1i'; # optimize for space, but with intrinsics... 110 $opt_cflags=' /MC /O1i'; # optimize for space, but with intrinsics...
105 $dbg_clfags=' /MC /Od -DDEBUG -D_DEBUG'; 111 $dbg_clfags=' /MC /Od -DDEBUG -D_DEBUG';
106 $lflags="/nologo /opt:ref $wcelflag"; 112 $lflags="/nologo /opt:ref $wcelflag";
107 } 113 }
108else # Win32 114else # Win32
109 { 115 {
110 $base_cflags=' /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32'; 116 $base_cflags= " $mf_cflag";
111 $base_cflags.=' -D_CRT_SECURE_NO_DEPRECATE'; # shut up VC8 117 my $f = $shlib?' /MD':' /MT';
112 $base_cflags.=' -D_CRT_NONSTDC_NO_DEPRECATE'; # shut up VC8
113 my $f = $shlib || $fips ?' /MD':' /MT';
114 $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib 118 $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
115 $opt_cflags=$f.' /Ox /O2 /Ob2'; 119 $opt_cflags=$f.' /Ox /O2 /Ob2';
116 $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG'; 120 $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
@@ -118,22 +122,28 @@ else # Win32
118 } 122 }
119$mlflags=''; 123$mlflags='';
120 124
121$out_def="out32"; $out_def.='_$(TARGETCPU)' if ($FLAVOR =~ /CE/); 125$out_def ="out32"; $out_def.="dll" if ($shlib);
122$tmp_def="tmp32"; $tmp_def.='_$(TARGETCPU)' if ($FLAVOR =~ /CE/); 126 $out_def.='_$(TARGETCPU)' if ($FLAVOR =~ /CE/);
127$tmp_def ="tmp32"; $tmp_def.="dll" if ($shlib);
128 $tmp_def.='_$(TARGETCPU)' if ($FLAVOR =~ /CE/);
123$inc_def="inc32"; 129$inc_def="inc32";
124 130
125if ($debug) 131if ($debug)
126 { 132 {
127 $cflags=$dbg_cflags.$base_cflags; 133 $cflags=$dbg_cflags.$base_cflags;
128 $lflags.=" /debug";
129 $mlflags.=' /debug';
130 } 134 }
131else 135else
132 { 136 {
133 $cflags=$opt_cflags.$base_cflags; 137 $cflags=$opt_cflags.$base_cflags;
134 } 138 }
135 139
140# generate symbols.pdb unconditionally
141$app_cflag.=" /Zi /Fd$tmp_def/app";
142$lib_cflag.=" /Zi /Fd$tmp_def/lib";
143$lflags.=" /debug";
144
136$obj='.obj'; 145$obj='.obj';
146$asm_suffix='.asm';
137$ofile="/Fo"; 147$ofile="/Fo";
138 148
139# EXE linking stuff 149# EXE linking stuff
@@ -143,26 +153,23 @@ $efile="/out:";
143$exep='.exe'; 153$exep='.exe';
144if ($no_sock) { $ex_libs=''; } 154if ($no_sock) { $ex_libs=''; }
145elsif ($FLAVOR =~ /CE/) { $ex_libs='winsock.lib'; } 155elsif ($FLAVOR =~ /CE/) { $ex_libs='winsock.lib'; }
146else { $ex_libs='wsock32.lib'; } 156else { $ex_libs='ws2_32.lib'; }
147 157
148if ($FLAVOR =~ /CE/) 158if ($FLAVOR =~ /CE/)
149 { 159 {
150 $ex_libs.=' $(WCECOMPAT)/lib/wcecompatex.lib'; 160 $ex_libs.=' $(WCECOMPAT)/lib/wcecompatex.lib' if (defined($ENV{'WCECOMPAT'}));
161 $ex_libs.=' $(PORTSDK_LIBPATH)/portlib.lib' if (defined($ENV{'PORTSDK_LIBPATH'}));
151 $ex_libs.=' /nodefaultlib:oldnames.lib coredll.lib corelibc.lib' if ($ENV{'TARGETCPU'} eq "X86"); 162 $ex_libs.=' /nodefaultlib:oldnames.lib coredll.lib corelibc.lib' if ($ENV{'TARGETCPU'} eq "X86");
152 } 163 }
153else 164else
154 { 165 {
155 $ex_libs.=' gdi32.lib crypt32.lib advapi32.lib user32.lib'; 166 $ex_libs.=' gdi32.lib advapi32.lib crypt32.lib user32.lib';
156 $ex_libs.=' bufferoverflowu.lib' if ($FLAVOR =~ /WIN64/); 167 $ex_libs.=' bufferoverflowu.lib' if ($FLAVOR =~ /WIN64/ and `cl 2>&1` =~ /14\.00\.4[0-9]{4}\./);
168 # WIN32 UNICODE build gets linked with unicows.lib for
169 # backward compatibility with Win9x.
170 $ex_libs="unicows.lib $ex_libs" if ($FLAVOR =~ /WIN32/ and $cflags =~ /\-DUNICODE/);
157 } 171 }
158 172
159# As native NT API is pure UNICODE, our WIN-NT build defaults to UNICODE,
160# but gets linked with unicows.lib to ensure backward compatibility.
161if ($FLAVOR =~ /NT/)
162 {
163 $cflags.=" -DOPENSSL_SYSNAME_WINNT -DUNICODE -D_UNICODE";
164 $ex_libs="unicows.lib $ex_libs";
165 }
166# static library stuff 173# static library stuff
167$mklib='lib /nologo'; 174$mklib='lib /nologo';
168$ranlib=''; 175$ranlib='';
@@ -173,23 +180,30 @@ $lfile='/out:';
173 180
174$shlib_ex_obj=""; 181$shlib_ex_obj="";
175$app_ex_obj="setargv.obj" if ($FLAVOR !~ /CE/); 182$app_ex_obj="setargv.obj" if ($FLAVOR !~ /CE/);
176if ($nasm) { 183if ($FLAVOR =~ /WIN64A/) {
184 if (`nasm -v 2>NUL` =~ /NASM version ([0-9]+\.[0-9]+)/ && $1 >= 2.0) {
185 $asm='nasm -f win64 -DNEAR -Ox -g';
186 $afile='-o ';
187 } else {
188 $asm='ml64 /c /Cp /Cx /Zi';
189 $afile='/Fo';
190 }
191} elsif ($FLAVOR =~ /WIN64I/) {
192 $asm='ias -d debug';
193 $afile="-o ";
194} elsif ($nasm) {
177 my $ver=`nasm -v 2>NUL`; 195 my $ver=`nasm -v 2>NUL`;
178 my $vew=`nasmw -v 2>NUL`; 196 my $vew=`nasmw -v 2>NUL`;
179 # pick newest version 197 # pick newest version
180 $asm=($ver gt $vew?"nasm":"nasmw")." -f win32"; 198 $asm=($ver gt $vew?"nasm":"nasmw")." -f win32";
199 $asmtype="win32n";
181 $afile='-o '; 200 $afile='-o ';
182} elsif ($ml64) {
183 $asm='ml64 /c /Cp /Cx';
184 $asm.=' /Zi' if $debug;
185 $afile='/Fo';
186} else { 201} else {
187 $asm='ml /nologo /Cp /coff /c /Cx'; 202 $asm='ml /nologo /Cp /coff /c /Cx /Zi';
188 $asm.=" /Zi" if $debug;
189 $afile='/Fo'; 203 $afile='/Fo';
204 $asmtype="win32";
190} 205}
191 206
192$aes_asm_obj='';
193$bn_asm_obj=''; 207$bn_asm_obj='';
194$bn_asm_src=''; 208$bn_asm_src='';
195$des_enc_obj=''; 209$des_enc_obj='';
@@ -198,56 +212,26 @@ $bf_enc_obj='';
198$bf_enc_src=''; 212$bf_enc_src='';
199 213
200if (!$no_asm) 214if (!$no_asm)
201 {
202 if ($FLAVOR =~ "WIN32")
203 {
204 $aes_asm_obj='crypto\aes\asm\a_win32.obj';
205 $aes_asm_src='crypto\aes\asm\a_win32.asm';
206 $bn_asm_obj='crypto\bn\asm\bn_win32.obj crypto\bn\asm\mt_win32.obj';
207 $bn_asm_src='crypto\bn\asm\bn_win32.asm crypto\bn\asm\mt_win32.asm';
208 $bnco_asm_obj='crypto\bn\asm\co_win32.obj';
209 $bnco_asm_src='crypto\bn\asm\co_win32.asm';
210 $des_enc_obj='crypto\des\asm\d_win32.obj crypto\des\asm\y_win32.obj';
211 $des_enc_src='crypto\des\asm\d_win32.asm crypto\des\asm\y_win32.asm';
212 $bf_enc_obj='crypto\bf\asm\b_win32.obj';
213 $bf_enc_src='crypto\bf\asm\b_win32.asm';
214 $cast_enc_obj='crypto\cast\asm\c_win32.obj';
215 $cast_enc_src='crypto\cast\asm\c_win32.asm';
216 $rc4_enc_obj='crypto\rc4\asm\r4_win32.obj';
217 $rc4_enc_src='crypto\rc4\asm\r4_win32.asm';
218 $rc5_enc_obj='crypto\rc5\asm\r5_win32.obj';
219 $rc5_enc_src='crypto\rc5\asm\r5_win32.asm';
220 $md5_asm_obj='crypto\md5\asm\m5_win32.obj';
221 $md5_asm_src='crypto\md5\asm\m5_win32.asm';
222 $sha1_asm_obj='crypto\sha\asm\s1_win32.obj crypto\sha\asm\sha512-sse2.obj';
223 $sha1_asm_src='crypto\sha\asm\s1_win32.asm crypto\sha\asm\sha512-sse2.asm';
224 $rmd160_asm_obj='crypto\ripemd\asm\rm_win32.obj';
225 $rmd160_asm_src='crypto\ripemd\asm\rm_win32.asm';
226 $cpuid_asm_obj='crypto\cpu_win32.obj';
227 $cpuid_asm_src='crypto\cpu_win32.asm';
228 $cflags.=" -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DAES_ASM -DBN_ASM -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_BN_ASM_MONT -DMD5_ASM -DSHA1_ASM -DRMD160_ASM";
229 }
230 elsif ($FLAVOR =~ "WIN64A")
231 { 215 {
232 $aes_asm_obj='$(OBJ_D)\aes-x86_64.obj'; 216 win32_import_asm($mf_bn_asm, "bn", \$bn_asm_obj, \$bn_asm_src);
233 $aes_asm_src='crypto\aes\asm\aes-x86_64.asm'; 217 win32_import_asm($mf_aes_asm, "aes", \$aes_asm_obj, \$aes_asm_src);
234 $bn_asm_obj='$(OBJ_D)\x86_64-mont.obj $(OBJ_D)\bn_asm.obj'; 218 win32_import_asm($mf_des_asm, "des", \$des_enc_obj, \$des_enc_src);
235 $bn_asm_src='crypto\bn\asm\x86_64-mont.asm'; 219 win32_import_asm($mf_bf_asm, "bf", \$bf_enc_obj, \$bf_enc_src);
236 $sha1_asm_obj='$(OBJ_D)\sha1-x86_64.obj $(OBJ_D)\sha256-x86_64.obj $(OBJ_D)\sha512-x86_64.obj'; 220 win32_import_asm($mf_cast_asm, "cast", \$cast_enc_obj, \$cast_enc_src);
237 $sha1_asm_src='crypto\sha\asm\sha1-x86_64.asm crypto\sha\asm\sha256-x86_64.asm crypto\sha\asm\sha512-x86_64.asm'; 221 win32_import_asm($mf_rc4_asm, "rc4", \$rc4_enc_obj, \$rc4_enc_src);
238 $cpuid_asm_obj='$(OBJ_D)\cpuid-x86_64.obj'; 222 win32_import_asm($mf_rc5_asm, "rc5", \$rc5_enc_obj, \$rc5_enc_src);
239 $cpuid_asm_src='crypto\cpuid-x86_64.asm'; 223 win32_import_asm($mf_md5_asm, "md5", \$md5_asm_obj, \$md5_asm_src);
240 $cflags.=" -DOPENSSL_CPUID_OBJ -DAES_ASM -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM"; 224 win32_import_asm($mf_sha_asm, "sha", \$sha1_asm_obj, \$sha1_asm_src);
225 win32_import_asm($mf_rmd_asm, "ripemd", \$rmd160_asm_obj, \$rmd160_asm_src);
226 win32_import_asm($mf_wp_asm, "whrlpool", \$whirlpool_asm_obj, \$whirlpool_asm_src);
227 win32_import_asm($mf_cpuid_asm, "", \$cpuid_asm_obj, \$cpuid_asm_src);
228 $perl_asm = 1;
241 } 229 }
242 }
243 230
244if ($shlib && $FLAVOR !~ /CE/) 231if ($shlib && $FLAVOR !~ /CE/)
245 { 232 {
246 $mlflags.=" $lflags /dll"; 233 $mlflags.=" $lflags /dll";
247# $cflags =~ s| /MD| /MT|; 234 $lib_cflag.=" -D_WINDLL";
248 $lib_cflag=" -D_WINDLL";
249 $out_def="out32dll";
250 $tmp_def="tmp32dll";
251 # 235 #
252 # Engage Applink... 236 # Engage Applink...
253 # 237 #
@@ -267,8 +251,8 @@ $(INCO_D)\applink.c: ms\applink.c
267EXHEADER= $(EXHEADER) $(INCO_D)\applink.c 251EXHEADER= $(EXHEADER) $(INCO_D)\applink.c
268 252
269LIBS_DEP=$(LIBS_DEP) $(OBJ_D)\applink.obj 253LIBS_DEP=$(LIBS_DEP) $(OBJ_D)\applink.obj
254CRYPTOOBJ=$(OBJ_D)\uplink.obj $(CRYPTOOBJ)
270___ 255___
271$banner .= "CRYPTOOBJ=\$(OBJ_D)\\uplink.obj \$(CRYPTOOBJ)\n";
272 $banner.=<<'___' if ($FLAVOR =~ /WIN64/); 256 $banner.=<<'___' if ($FLAVOR =~ /WIN64/);
273CRYPTOOBJ=ms\uptable.obj $(CRYPTOOBJ) 257CRYPTOOBJ=ms\uptable.obj $(CRYPTOOBJ)
274___ 258___
@@ -276,119 +260,35 @@ ___
276elsif ($shlib && $FLAVOR =~ /CE/) 260elsif ($shlib && $FLAVOR =~ /CE/)
277 { 261 {
278 $mlflags.=" $lflags /dll"; 262 $mlflags.=" $lflags /dll";
279 $lib_cflag=" -D_WINDLL -D_DLL"; 263 $lflags.=' /entry:mainCRTstartup' if(defined($ENV{'PORTSDK_LIBPATH'}));
280 $out_def='out32dll_$(TARGETCPU)'; 264 $lib_cflag.=" -D_WINDLL -D_DLL";
281 $tmp_def='tmp32dll_$(TARGETCPU)';
282 } 265 }
283 266
284$cflags.=" /Fd$out_def";
285
286sub do_lib_rule 267sub do_lib_rule
287 { 268 {
288 my($objs,$target,$name,$shlib,$ign,$base_addr) = @_; 269 local($objs,$target,$name,$shlib)=@_;
289 local($ret); 270 local($ret);
290 271
291 $taget =~ s/\//$o/g if $o ne '/'; 272 $taget =~ s/\//$o/g if $o ne '/';
292 my $base_arg; 273 if ($name ne "")
293 if ($base_addr ne "")
294 {
295 $base_arg= " /base:$base_addr";
296 }
297 else
298 {
299 $base_arg = "";
300 }
301 if ($target =~ /O_CRYPTO/ && $fipsdso)
302 {
303 $name = "/def:ms/libeayfips.def";
304 }
305 elsif ($name ne "")
306 { 274 {
307 $name =~ tr/a-z/A-Z/; 275 $name =~ tr/a-z/A-Z/;
308 $name = "/def:ms/${name}.def"; 276 $name = "/def:ms/${name}.def";
309 } 277 }
278
310# $target="\$(LIB_D)$o$target"; 279# $target="\$(LIB_D)$o$target";
311# $ret.="$target: $objs\n"; 280 $ret.="$target: $objs\n";
312 if (!$shlib) 281 if (!$shlib)
313 { 282 {
314# $ret.="\t\$(RM) \$(O_$Name)\n"; 283# $ret.="\t\$(RM) \$(O_$Name)\n";
315 $ex =' '; 284 $ret.="\t\$(MKLIB) $lfile$target @<<\n $objs\n<<\n";
316 $ret.="$target: $objs\n";
317 $ret.="\t\$(MKLIB) $lfile$target @<<\n $objs $ex\n<<\n";
318 } 285 }
319 else 286 else
320 { 287 {
321 my $ex = ""; 288 local($ex)=($target =~ /O_CRYPTO/)?'':' $(L_CRYPTO)';
322 if ($target =~ /O_SSL/)
323 {
324 $ex .= " \$(L_CRYPTO)";
325 #$ex .= " \$(L_FIPS)" if $fipsdso;
326 }
327 my $fipstarget;
328 if ($fipsdso)
329 {
330 $fipstarget = "O_FIPS";
331 }
332 else
333 {
334 $fipstarget = "O_CRYPTO";
335 }
336
337
338 if ($name eq "")
339 {
340 $ex.=' bufferoverflowu.lib' if ($FLAVOR =~ /WIN64/);
341 if ($target =~ /capi/)
342 {
343 $ex.=' crypt32.lib advapi32.lib';
344 }
345 }
346 elsif ($FLAVOR =~ /CE/)
347 {
348 $ex.=' winsock.lib $(WCECOMPAT)/lib/wcecompatex.lib';
349 }
350 else
351 {
352 $ex.=' unicows.lib' if ($FLAVOR =~ /NT/);
353 $ex.=' wsock32.lib gdi32.lib advapi32.lib user32.lib';
354 $ex.=' crypt32.lib';
355 $ex.=' bufferoverflowu.lib' if ($FLAVOR =~ /WIN64/);
356 }
357 $ex.=" $zlib_lib" if $zlib_opt == 1 && $target =~ /O_CRYPTO/; 289 $ex.=" $zlib_lib" if $zlib_opt == 1 && $target =~ /O_CRYPTO/;
358 290 $ret.="\t\$(LINK) \$(MLFLAGS) $efile$target $name @<<\n \$(SHLIB_EX_OBJ) $objs $ex \$(EX_LIBS)\n<<\n";
359 if ($fips && $target =~ /$fipstarget/) 291 $ret.="\tIF EXIST \$@.manifest mt -nologo -manifest \$@.manifest -outputresource:\$@;2\n\n";
360 {
361 $ex.= $mwex unless $fipscanisterbuild;
362 $ret.="$target: $objs \$(PREMAIN_DSO_EXE)";
363 if ($fipsdso)
364 {
365 $ex.=" \$(OBJ_D)\\\$(LIBFIPS).res";
366 $ret.=" \$(OBJ_D)\\\$(LIBFIPS).res";
367 $ret.=" ms/\$(LIBFIPS).def";
368 }
369 $ret.="\n\tSET FIPS_LINK=\$(LINK)\n";
370 $ret.="\tSET FIPS_CC=\$(CC)\n";
371 $ret.="\tSET FIPS_CC_ARGS=/Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c\n";
372 $ret.="\tSET PREMAIN_DSO_EXE=\$(PREMAIN_DSO_EXE)\n";
373 $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n";
374 $ret.="\tSET FIPS_TARGET=$target\n";
375 $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n";
376 $ret.="\t\$(FIPSLINK) \$(MLFLAGS) /map $base_arg $efile$target ";
377 $ret.="$name @<<\n \$(SHLIB_EX_OBJ) $objs ";
378 $ret.="\$(OBJ_D)${o}fips_premain.obj $ex\n<<\n";
379 }
380 else
381 {
382 $ret.="$target: $objs";
383 if ($target =~ /O_CRYPTO/ && $fipsdso)
384 {
385 $ret .= " \$(O_FIPS)";
386 $ex .= " \$(L_FIPS)";
387 }
388 $ret.="\n\t\$(LINK) \$(MLFLAGS) $efile$target $name @<<\n \$(SHLIB_EX_OBJ) $objs $ex\n<<\n";
389 }
390
391 $ret.="\tIF EXIST \$@.manifest mt -nologo -manifest \$@.manifest -outputresource:\$@;2\n\n";
392 } 292 }
393 $ret.="\n"; 293 $ret.="\n";
394 return($ret); 294 return($ret);
@@ -396,64 +296,43 @@ sub do_lib_rule
396 296
397sub do_link_rule 297sub do_link_rule
398 { 298 {
399 my($target,$files,$dep_libs,$libs,$standalone)=@_; 299 local($target,$files,$dep_libs,$libs)=@_;
400 local($ret,$_); 300 local($ret,$_);
301
401 $file =~ s/\//$o/g if $o ne '/'; 302 $file =~ s/\//$o/g if $o ne '/';
402 $n=&bname($targer); 303 $n=&bname($targer);
403 $ret.="$target: $files $dep_libs\n"; 304 $ret.="$target: $files $dep_libs\n";
404 if ($standalone == 1) 305 $ret.="\t\$(LINK) \$(LFLAGS) $efile$target @<<\n";
405 { 306 $ret.=" \$(APP_EX_OBJ) $files $libs\n<<\n";
406 $ret.=" \$(LINK) \$(LFLAGS) $efile$target @<<\n\t"; 307 $ret.="\tIF EXIST \$@.manifest mt -nologo -manifest \$@.manifest -outputresource:\$@;1\n\n";
407 $ret.= "\$(EX_LIBS) " if ($files =~ /O_FIPSCANISTER/ && !$fipscanisterbuild); 308 return($ret);
408 $ret.="$files $libs\n<<\n"; 309 }
409 } 310
410 elsif ($standalone == 2) 311sub win32_import_asm
312 {
313 my ($mf_var, $asm_name, $oref, $sref) = @_;
314 my $asm_dir;
315 if ($asm_name eq "")
411 { 316 {
412 $ret.="\tSET FIPS_LINK=\$(LINK)\n"; 317 $asm_dir = "crypto\\";
413 $ret.="\tSET FIPS_CC=\$(CC)\n";
414 $ret.="\tSET FIPS_CC_ARGS=/Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c\n";
415 $ret.="\tSET PREMAIN_DSO_EXE=\n";
416 $ret.="\tSET FIPS_TARGET=$target\n";
417 $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n";
418 $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n";
419 $ret.="\t\$(FIPSLINK) \$(LFLAGS) /map $efile$target @<<\n";
420 $ret.="\t\$(APP_EX_OBJ) $files \$(OBJ_D)${o}fips_premain.obj $libs\n<<\n";
421 } 318 }
422 else 319 else
423 { 320 {
424 $ret.="\t\$(LINK) \$(LFLAGS) $efile$target @<<\n"; 321 $asm_dir = "crypto\\$asm_name\\asm\\";
425 $ret.="\t\$(APP_EX_OBJ) $files $libs\n<<\n";
426 } 322 }
427 $ret.="\tIF EXIST \$@.manifest mt -nologo -manifest \$@.manifest -outputresource:\$@;1\n\n";
428 return($ret);
429 }
430 323
431sub do_rlink_rule 324 $$oref = "";
432 { 325 $mf_var =~ s/\.o$/.obj/g;
433 local($target,$rl_start, $rl_mid, $rl_end,$dep_libs,$libs)=@_;
434 local($ret,$_);
435 my $files = "$rl_start $rl_mid $rl_end";
436 326
437 $file =~ s/\//$o/g if $o ne '/'; 327 foreach (split(/ /, $mf_var))
438 $n=&bname($targer); 328 {
439 $ret.="$target: $files $dep_libs \$(FIPS_SHA1_EXE)\n"; 329 $$oref .= $asm_dir . $_ . " ";
440 $ret.="\t\$(PERL) ms\\segrenam.pl \$\$a $rl_start\n"; 330 }
441 $ret.="\t\$(PERL) ms\\segrenam.pl \$\$b $rl_mid\n"; 331 $$oref =~ s/ $//;
442 $ret.="\t\$(PERL) ms\\segrenam.pl \$\$c $rl_end\n"; 332 $$sref = $$oref;
443 $ret.="\t\$(MKLIB) $lfile$target @<<\n\t$files\n<<\n"; 333 $$sref =~ s/\.obj/.asm/g;
444 $ret.="\t\$(FIPS_SHA1_EXE) $target > ${target}.sha1\n";
445 $ret.="\t\$(PERL) util${o}copy.pl -stripcr fips${o}fips_premain.c \$(LIB_D)${o}fips_premain.c\n";
446 $ret.="\t\$(CP) fips${o}fips_premain.c.sha1 \$(LIB_D)${o}fips_premain.c.sha1\n";
447 $ret.="\n";
448 return($ret);
449 }
450 334
451sub do_sdef_rule
452 {
453 my $ret = "ms/\$(LIBFIPS).def: \$(O_FIPSCANISTER)\n";
454 $ret.="\t\$(PERL) util/mksdef.pl \$(MLFLAGS) /out:dummy.dll /def:ms/libeay32.def @<<\n \$(O_FIPSCANISTER)\n<<\n";
455 $ret.="\n";
456 return $ret;
457 } 335 }
458 336
337
4591; 3381;