From: Dr. Stephen Henson Date: Wed, 25 Jan 2006 13:26:11 +0000 (+0000) Subject: Add VC++ using GNU (or other U*ix like make) target for mk1mf.pl X-Git-Tag: OpenSSL_FIPS_1_0~31 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=29c18b0112d1449ae77d6ec84ae5f1e502c160f7;p=openssl Add VC++ using GNU (or other U*ix like make) target for mk1mf.pl Autodetect VC++ in config script and generate Makefile Add source hash checking to mk1mf.pl for VC++. --- diff --git a/config b/config index 0715d378d9..7f24e7f29c 100755 --- a/config +++ b/config @@ -54,6 +54,22 @@ SYSTEM=`(uname -s) 2>/dev/null` || SYSTEM="unknown" VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown" + + + +# Check for VC++ presence first. + +if [ "x$MSVCDIR" != "x" -o "x$VCINSTALLDIR" != "x" ]; then + perl Configure VC-WIN32 $* + cmd /c ms\\do_masm.bat + perl util/mk1mf.pl VC-WIN32-GMAKE >mak.tmp + rm Makefile + mv mak.tmp Makefile + echo "Configured for VC++ using GNU make" + exit 0 +fi + + # Now test for ISC and SCO, since it is has a braindamaged uname. # # We need to work around FreeBSD 1.1.5.1 diff --git a/util/mk1mf.pl b/util/mk1mf.pl index cf302bb66e..e552d02905 100755 --- a/util/mk1mf.pl +++ b/util/mk1mf.pl @@ -27,6 +27,7 @@ $infile="MINFO"; %ops=( "VC-WIN32", "Microsoft Visual C++ [4-6] - Windows NT or 9X", + "VC-WIN32-GMAKE", "Microsoft Visual C++ [4-6] - Windows NT or 9X, GNU make", "VC-CE", "Microsoft eMbedded Visual C++ 3.0 - Windows CE ONLY", "VC-NT", "Microsoft Visual C++ [4-6] - Windows NT ONLY", "VC-W31-16", "Microsoft Visual C++ 1.52 - Windows 3.1 - 286", @@ -145,6 +146,10 @@ elsif (($platform eq "VC-WIN32") || ($platform eq "VC-NT")) $NT = 1 if $platform eq "VC-NT"; require 'VC-32.pl'; } +elsif ($platform eq "VC-WIN32-GMAKE") + { + require 'VC-32-GMAKE.pl'; + } elsif ($platform eq "VC-CE") { require 'VC-CE.pl'; @@ -601,6 +606,8 @@ if ($fips) $rules.=&cc_compile_target("\$(OBJ_D)${o}\$(E_PREMAIN_DSO)$obj", "fips${o}fips_premain.c", "-DFINGERPRINT_PREMAIN_DSO_LOAD \$(SHLIB_CFLAGS)"); + $rules.=&cc_compile_target("\$(OBJ_D)${o}fips_standalone_sha1$obj", + "fips${o}sha${o}fips_standalone_sha1.c", "\$(SHLIB_CFLAGS)"); } @@ -707,9 +714,11 @@ if ($fips) if ($fips) { - $rules.= &do_rlink_rule("\$(O_FIPSCANISTER)", "\$(OBJ_D)${o}fips_start$obj \$(FIPSOBJ) \$(OBJ_D)${o}fips_end$obj"); + $rules.= &do_rlink_rule("\$(O_FIPSCANISTER)", "\$(OBJ_D)${o}fips_start$obj \$(FIPSOBJ) \$(OBJ_D)${o}fips_end$obj", "\$(BIN_D)${o}fips_standalone_sha1$exep"); $rules.=&do_link_rule("\$(BIN_D)$o\$(E_PREMAIN_DSO)$exep","\$(OBJ_D)${o}\$(E_PREMAIN_DSO)$obj \$(CRYPTOOBJ) \$(O_FIPCANISTER)","","\$(EX_LIBS) \$(O_FIPSCANISTER)"); - $rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)","\$(BIN_D)$o.sha1","\$(BIN_D)$o\$(E_EXE)$exep"); + $rules.=&do_link_rule("\$(BIN_D)${o}fips_standalone_sha1$exep","\$(OBJ_D)${o}fips_standalone_sha1$obj \$(OBJ_D)${o}fips_sha1dgst$obj","","", 1); + + $rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)",0,"\$(BIN_D)$o\$(E_EXE)$exep"); } else { diff --git a/util/pl/VC-32-GMAKE.pl b/util/pl/VC-32-GMAKE.pl new file mode 100644 index 0000000000..1be89aab54 --- /dev/null +++ b/util/pl/VC-32-GMAKE.pl @@ -0,0 +1,205 @@ +#!/usr/local/bin/perl +# VCw32lib.pl - the file for Visual C++ 4.[01] for windows NT, static libraries +# + +$ssl= "ssleay32"; +$crypto="libeay32"; + +$o='/'; +#$cp='copy nul+'; # Timestamps get stuffed otherwise +#$rm='del'; + +$cp='cp'; +$rm='rm'; + +$zlib_lib="zlib1.lib"; + +# C compiler stuff +$cc='cl'; +$cflags=' -MD -W3 -WX -G5 -Ox -O2 -Ob2 -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32'; +$cflags.=' -D_CRT_SECURE_NO_DEPRECATE'; # shut up VC8 +$lflags="-nologo -subsystem:console -machine:I386 -opt:ref"; +$mlflags=''; + +$out_def="out32"; +$tmp_def="tmp32"; +$inc_def="inc32"; + +if ($debug) + { + $cflags=" -MDd -W3 -WX -Zi -Yd -Od -nologo -DOPENSSL_SYSNAME_WIN32 -D_DEBUG -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -DDEBUG -DDSO_WIN32"; + $lflags.=" -debug"; + $mlflags.=' -debug'; + } +$cflags .= " -DOPENSSL_SYSNAME_WINNT" if $NT == 1; + +$obj='.obj'; +$ofile="-Fo"; + +# EXE linking stuff +$link="link"; +$efile="-out:"; +$exep='.exe'; +if ($no_sock) + { $ex_libs=""; } +else { $ex_libs="wsock32.lib user32.lib gdi32.lib"; } + +# static library stuff +$mklib='lib'; +$ranlib=''; +$plib=""; +$libp=".lib"; +$shlibp=($shlib)?".dll":".lib"; +$lfile='-out:'; + +$shlib_ex_obj=""; +$app_ex_obj="setargv.obj"; +if ($nasm) { + $asm='nasmw -f win32'; + $afile='-o '; +} else { + $asm='ml -Cp -coff -c -Cx'; + $asm.=" -Zi" if $debug; + $afile='-Fo'; +} + +$bn_asm_obj=''; +$bn_asm_src=''; +$des_enc_obj=''; +$des_enc_src=''; +$bf_enc_obj=''; +$bf_enc_src=''; + +if (!$no_asm && !$fips) + { + $bn_asm_obj='crypto/bn/asm/bn_win32.obj'; + $bn_asm_src='crypto/bn/asm/bn_win32.asm'; + $des_enc_obj='crypto/des/asm/d_win32.obj crypto/des/asm/y_win32.obj'; + $des_enc_src='crypto/des/asm/d_win32.asm crypto/des/asm/y_win32.asm'; + $bf_enc_obj='crypto/bf/asm/b_win32.obj'; + $bf_enc_src='crypto/bf/asm/b_win32.asm'; + $cast_enc_obj='crypto/cast/asm/c_win32.obj'; + $cast_enc_src='crypto/cast/asm/c_win32.asm'; + $rc4_enc_obj='crypto/rc4/asm/r4_win32.obj'; + $rc4_enc_src='crypto/rc4/asm/r4_win32.asm'; + $rc5_enc_obj='crypto/rc5/asm/r5_win32.obj'; + $rc5_enc_src='crypto/rc5/asm/r5_win32.asm'; + $md5_asm_obj='crypto/md5/asm/m5_win32.obj'; + $md5_asm_src='crypto/md5/asm/m5_win32.asm'; + $sha1_asm_obj='crypto/sha/asm/s1_win32.obj'; + $sha1_asm_src='crypto/sha/asm/s1_win32.asm'; + $rmd160_asm_obj='crypto/ripemd/asm/rm_win32.obj'; + $rmd160_asm_src='crypto/ripemd/asm/rm_win32.asm'; + $cflags.=" -DBN_ASM -DMD5_ASM -DSHA1_ASM -DRMD160_ASM"; + } + +if ($shlib) + { + $mlflags.=" $lflags -dll"; +# $cflags =~ s| -MD| -MT|; + $lib_cflag=" -D_WINDLL"; + $out_def="out32dll"; + $tmp_def="tmp32dll"; + } + +$cflags.=" -Fd$out_def"; + +sub do_lib_rule + { + local($objs,$target,$name,$shlib,$ign,$base_addr, $fips_get_sig, $fips_premain_src)=@_; + local($ret,$Name); + + $taget =~ s/\//$o/g if $o ne '/'; + ($Name=$name) =~ tr/a-z/A-Z/; + my $base_arg; + if ($base_addr ne "") + { + $base_arg= " -base:$base_addr"; + } + else + { + $base_arg = ""; + } + + +# $target="\$(LIB_D)$o$target"; + if (!$shlib) + { +# $ret.="\t\$(RM) \$(O_$Name)\n"; + $ret.="$target: $objs\n"; + $ex =' advapi32.lib'; + $ret.="\t\$(MKLIB) $lfile$target $objs $ex\n\n"; + } + else + { + local($ex)=($target =~ /O_SSL/)?' $(L_CRYPTO)':''; + $ex.=' wsock32.lib gdi32.lib advapi32.lib user32.lib'; + $ex.=" $zlib_lib" if $zlib_opt == 1 && $target =~ /O_CRYPTO/; + if (defined $fips_get_sig) + { + $ret.="$target: $objs $fips_get_sig\n"; + $ret.="\tFIPS_LINK=\$(LINK) "; + $ret.="FIPS_CC=\$(CC) "; + $ret.="FIPS_CC_ARGS=\"-Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c \$(SRC_D)${o}fips${o}fips_premain.c\" "; + $ret.="FIPS_PREMAIN_DSO=$fips_get_sig "; + $ret.="FIPS_TARGET=$target "; + $ret.="\$(FIPSLINK) \$(MLFLAGS) $base_arg $efile$target "; + $ret.="-def:ms/${Name}.def \$(SHLIB_EX_OBJ) $objs "; + $ret.="\$(OBJ_D)${o}fips_premain.obj $ex\n\n"; + } + else + { + $ret.="$target: $objs\n"; + $ret.="\t\$(LINK) \$(MLFLAGS) $base_arg $efile$target /def:ms/${Name}.def \$(SHLIB_EX_OBJ) $objs $ex\n\n"; + } + } + $ret.="\n"; + return($ret); + } + +sub do_link_rule + { + local($target,$files,$dep_libs,$libs,$standalone)=@_; + local($ret,$_); + $file =~ s/\//$o/g if $o ne '/'; + $n=&bname($targer); + $ret.="$target: $files $dep_libs\n"; + if ($standalone) + { + $ret.="\t\$(LINK) \$(LFLAGS) $efile$target "; + $ret.="$files $libs\n\n"; + } + elsif ($fips && !$shlib) + { + $ret.="\tFIPS_LINK=\$(LINK) "; + $ret.="FIPS_CC=\$(CC) "; + $ret.="FIPS_CC_ARGS=\"-Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c \$(SRC_D)${o}fips${o}fips_premain.c\" "; + $ret.="FIPS_PREMAIN_DSO= "; + $ret.="FIPS_TARGET=$target "; + $ret.=" \$(FIPSLINK) \$(LFLAGS) $efile$target "; + $ret.="\$(APP_EX_OBJ) $files \$(OBJ_D)${o}fips_premain.obj $libs\n\n"; + } + else + { + $ret.="\t\$(LINK) \$(LFLAGS) $efile$target "; + $ret.="\$(APP_EX_OBJ) $files $libs\n\n"; + } + $ret.="\n"; + return($ret); + } + +sub do_rlink_rule + { + local($target,$files,$check_hash)=@_; + local($ret,$_); + + $file =~ s/\//$o/g if $o ne '/'; + $n=&bname($targer); + $ret.="$target: $files $dep_libs\n"; + $ret.="\t\$(PERL) util${o}checkhash.pl -chdir fips -program_path ..$o$check_hash\n"; + $ret.="\t\$(MKCANISTER) $target $files\n\n"; + return($ret); + } + + +1; diff --git a/util/pl/VC-32.pl b/util/pl/VC-32.pl index 51210347eb..05d73d7d10 100644 --- a/util/pl/VC-32.pl +++ b/util/pl/VC-32.pl @@ -156,13 +156,17 @@ sub do_lib_rule sub do_link_rule { - local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_; + local($target,$files,$dep_libs,$libs,$standalone)=@_; local($ret,$_); - $file =~ s/\//$o/g if $o ne '/'; $n=&bname($targer); $ret.="$target: $files $dep_libs\n"; - if ($fips && !$shlib) + if ($standalone) + { + $ret.=" \$(LINK) \$(LFLAGS) $efile$target @<<\n"; + $ret.=" $files $libs\n<<\n"; + } + elsif ($fips && !$shlib) { $ret.="\tSET FIPS_LINK=\$(LINK)\n"; $ret.="\tSET FIPS_CC=\$(CC)\n";