diff options
Diffstat (limited to 'util/pl/TI_CGTOOLS.pl')
-rw-r--r-- | util/pl/TI_CGTOOLS.pl | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/util/pl/TI_CGTOOLS.pl b/util/pl/TI_CGTOOLS.pl new file mode 100644 index 0000000000..d12d318062 --- /dev/null +++ b/util/pl/TI_CGTOOLS.pl @@ -0,0 +1,274 @@ +#!/usr/local/bin/perl +# +# TI_CGTOOLS.pl, Texas Instruments CGTOOLS under Unix or MSYS. +# + +$ssl= "ssl"; +$crypto="crypto"; + +if ($fips && !$shlib) + { + $crypto="fips"; + $crypto_compat = "cryptocompat.lib"; + } +else + { + $crypto="crypto"; + } + +if ($fipscanisterbuild) + { + $fips_canister_path = "\$(LIB_D)/fipscanister.obj"; + } + +$o='/'; +$cp='cp'; +$cp2='$(PERL) util/copy.pl -stripcr'; +$mkdir='$(PERL) util/mkdir-p.pl'; +$rm='rm -f'; + +$zlib_lib="zlib1.lib"; + +# Santize -L options for ms link +$l_flags =~ s/-L("\[^"]+")/\/libpath:$1/g; +$l_flags =~ s/-L(\S+)/\/libpath:$1/g; + +# C compiler stuff +$cc='cl6x'; +$base_cflags= " $mf_cflag"; +my $f; +$opt_cflags=''; +$dbg_cflags=$f.' -g -DDEBUG -D_DEBUG'; +$lflags=''; + +*::cc_compile_target = sub { + my ($target,$source,$ex_flags)=@_; + my $ret; + + $ex_flags.=" -DMK1MF_BUILD" if ($source =~/cversion/); + $ret ="$target: \$(SRC_D)$o$source\n\t"; + if ($fipscanisterbuild && $source=~/\.asm$/) { + $ret.="\$(PERL) util${o}fipsas.pl . \$< norunasm \$(CFLAG)\n\t"; + } + $ret.="\$(CC) --obj_directory=\$(OBJ_D) $ex_flags -c \$(SRC_D)$o$source\n"; + $target =~ s/.*${o}([^${o}]+)/$1/; + $source =~ s/.*${o}([^${o}\.]+)\..*/$1${obj}/; + $ret.="\tmv \$(OBJ_D)${o}$source \$(OBJ_D)${o}$target\n" if ($target ne $source); + $ret.="\n"; + return($ret); +}; +*::perlasm_compile_target = sub { + my ($target,$source,$bname)=@_; + my $ret; + + $bname =~ s/(.*)\.[^\.]$/$1/; + $ret=<<___; +\$(TMP_D)$o$bname.asm: $source + \$(PERL) $source \$\@ +___ + $ret .= "\t\$(PERL) util${o}fipsas.pl . \$@ norunasm \$(CFLAG)\n" if $fipscanisterbuild; + + $ret.=<<___; + +$target: \$(TMP_D)$o$bname.asm + \$(ASM) --obj_directory=\$(OBJ_D) \$(TMP_D)$o$bname.asm + +___ +}; + +$mlflags=''; + +$out_def ="c6x"; +$tmp_def ="$out_def/tmp"; +$inc_def="$out_def/inc"; + +if ($debug) + { + $cflags=$dbg_cflags.$base_cflags; + } +else + { + $cflags=$opt_cflags.$base_cflags; + } + +$obj='.obj'; +$asm_suffix='.asm'; +$ofile=""; + +# EXE linking stuff +$link='$(CC) -z'; +$efile="-o "; +$exep='.out'; +$ex_libs=''; + +# static library stuff +$mklib='ar6x'; +$ranlib=''; +$plib=""; +$libp=".lib"; +$shlibp=($shlib)?".dll":".lib"; +$lfile='-o '; + +$shlib_ex_obj=""; +$asm='$(CC) $(CFLAG) -c'; + +$bn_asm_obj=''; +$bn_asm_src=''; +$des_enc_obj=''; +$des_enc_src=''; +$bf_enc_obj=''; +$bf_enc_src=''; + +if (!$no_asm) + { + import_asm($mf_bn_asm, "bn", \$bn_asm_obj, \$bn_asm_src); + import_asm($mf_aes_asm, "aes", \$aes_asm_obj, \$aes_asm_src); + import_asm($mf_des_asm, "des", \$des_enc_obj, \$des_enc_src); + import_asm($mf_bf_asm, "bf", \$bf_enc_obj, \$bf_enc_src); + import_asm($mf_cast_asm, "cast", \$cast_enc_obj, \$cast_enc_src); + import_asm($mf_rc4_asm, "rc4", \$rc4_enc_obj, \$rc4_enc_src); + import_asm($mf_rc5_asm, "rc5", \$rc5_enc_obj, \$rc5_enc_src); + import_asm($mf_md5_asm, "md5", \$md5_asm_obj, \$md5_asm_src); + import_asm($mf_sha_asm, "sha", \$sha1_asm_obj, \$sha1_asm_src); + import_asm($mf_rmd_asm, "ripemd", \$rmd160_asm_obj, \$rmd160_asm_src); + import_asm($mf_wp_asm, "whrlpool", \$whirlpool_asm_obj, \$whirlpool_asm_src); + import_asm($mf_modes_asm, "modes", \$modes_asm_obj, \$modes_asm_src); + import_asm($mf_cpuid_asm, "", \$cpuid_asm_obj, \$cpuid_asm_src); + $perl_asm = 1; + } + +sub do_lib_rule + { + my($objs,$target,$name,$shlib,$ign,$base_addr) = @_; + local($ret); + + $taget =~ s/\//$o/g if $o ne '/'; + my $base_arg; + if ($base_addr ne "") + { + $base_arg= " /base:$base_addr"; + } + else + { + $base_arg = ""; + } + if ($name ne "") + { + $name =~ tr/a-z/A-Z/; + $name = "/def:ms/${name}.def"; + } + +# $target="\$(LIB_D)$o$target"; +# $ret.="$target: $objs\n"; + if (!$shlib) + { +# $ret.="\t\$(RM) \$(O_$Name)\n"; + $ret.="$target: $objs\n"; + $ret.="\t\$(MKLIB) $lfile$target $objs\n"; + } + else + { + local($ex)=($target =~ /O_CRYPTO/)?'':' $(L_CRYPTO)'; + $ex.=" $zlib_lib" if $zlib_opt == 1 && $target =~ /O_CRYPTO/; + + if ($fips && $target =~ /O_CRYPTO/) + { + $ret.="$target: $objs \$(PREMAIN_DSO_EXE)"; + $ret.="\n\tFIPS_LINK=\"\$(LINK)\" \\\n"; + $ret.="\tFIPS_CC=\$(CC)\\\n"; + $ret.="\tFIPS_CC_ARGS=/Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c\\\n"; + $ret.="\tPREMAIN_DSO_EXE=\$(PREMAIN_DSO_EXE)\\\n"; + $ret.="\tFIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\\\n"; + $ret.="\tFIPS_TARGET=$target\\\n"; + $ret.="\tFIPSLIB_D=\$(FIPSLIB_D)\\\n"; + $ret.="\t\$(FIPSLINK) \$(MLFLAGS) /map $base_arg $efile$target "; + $ret.="$name \$(SHLIB_EX_OBJ) $objs \$(EX_LIBS) "; + $ret.="\$(OBJ_D)${o}fips_premain.obj $ex\n"; + } + else + { + $ret.="$target: $objs"; + $ret.="\n\t\$(LINK) \$(MLFLAGS) $efile$target $name \$(SHLIB_EX_OBJ) $objs $ex \$(EX_LIBS)\n"; + } + + $ret.="\tIF EXIST \$@.manifest mt -nologo -manifest \$@.manifest -outputresource:\$@;2\n\n"; + } + $ret.="\n"; + return($ret); + } + +sub do_link_rule + { + my($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 == 1) + { + $ret.=" \$(LINK) \$(LFLAGS) $efile$target "; + $ret.= "\$(EX_LIBS) " if ($files =~ /O_FIPSCANISTER/ && !$fipscanisterbuild); + $ret.="$files $libs\n"; + } + elsif ($standalone == 2) + { + $ret.="\t\$(LINK) \$(LFLAGS) $efile$target $files \$(O_FIPSCANISTER) $out_def/application.cmd\n"; + $ret.="\t$out_def/incore6x $target\n\n"; + } + else + { + $ret.="\t\$(LINK) \$(LFLAGS) $efile$target "; + $ret.="\t\$(APP_EX_OBJ) $files $libs\n"; + } + return($ret); + } + +sub do_rlink_rule + { + local($target,$rl_start, $rl_mid, $rl_end,$dep_libs,$libs)=@_; + local($ret,$_); + my $files = "$rl_start $rl_mid $rl_end"; + + $file =~ s/\//$o/g if $o ne '/'; + $n=&bname($target); + $ret.="$target: $files $dep_libs\n"; + $ret.="\t\$(LINK) -r $lfile$target $files $out_def/fipscanister.cmd\n"; + $ret.="\t\$(PERL) $out_def${o}fips_standalone_sha1 $target > ${target}.sha1\n"; + $ret.="\t\$(PERL) util${o}copy.pl -stripcr fips${o}fips_premain.c \$(LIB_D)${o}fips_premain.c\n"; + $ret.="\t\$(CP) fips${o}fips_premain.c.sha1 \$(LIB_D)${o}fips_premain.c.sha1\n"; + $ret.="\n"; + return($ret); + } + +sub import_asm + { + my ($mf_var, $asm_name, $oref, $sref) = @_; + my $asm_dir; + if ($asm_name eq "") + { + $asm_dir = "crypto$o"; + } + else + { + $asm_dir = "crypto$o$asm_name$oasm$o"; + } + + $$oref = ""; + $$sref = ""; + $mf_var =~ s/\.o//g; + + foreach (split(/ /, $mf_var)) + { + $$sref .= $asm_dir . $_ . ".asm "; + } + foreach (split(/ /, $mf_var)) + { + $$oref .= "\$(TMP_D)\\" . $_ . ".obj "; + } + $$oref =~ s/ $//; + $$sref =~ s/ $//; + + } + + +1; |