{ $cflags="-O"; }
}
$obj='.o';
+$asm_suffix='.s';
$ofile='-o ';
# EXE linking stuff
$link='${CC}';
-$lflags='${CFLAGS}';
+$lflags='${CFLAG}';
$efile='-o ';
$exep='';
$ex_libs="";
# static library stuff
$mklib='ar r';
$mlflags='';
-$ranlib='util/ranlib.sh';
+$ranlib=&which("ranlib") or $ranlib="true";
$plib='lib';
$libp=".a";
$shlibp=".a";
$asm='as';
$afile='-o ';
-$bn_mulw_obj="";
-$bn_mulw_src="";
+$bn_asm_obj="";
+$bn_asm_src="";
$des_enc_obj="";
$des_enc_src="";
$bf_enc_obj="";
$bf_enc_src="";
+%perl1 = (
+ 'md5-x86_64' => 'crypto/md5',
+ 'x86_64-mont' => 'crypto/bn',
+ 'x86_64-mont5' => 'crypto/bn',
+ 'x86_64-gf2m' => 'crypto/bn',
+ 'aes-x86_64' => 'crypto/aes',
+ 'vpaes-x86_64' => 'crypto/aes',
+ 'bsaes-x86_64' => 'crypto/aes',
+ 'aesni-x86_64' => 'crypto/aes',
+ 'aesni-sha1-x86_64' => 'crypto/aes',
+ 'sha1-x86_64' => 'crypto/sha',
+ 'e_padlock-x86_64' => 'engines',
+ 'rc4-x86_64' => 'crypto/rc4',
+ 'rc4-md5-x86_64' => 'crypto/rc4',
+ 'ghash-x86_64' => 'crypto/modes',
+ 'aesni-gcm-x86_64' => 'crypto/modes',
+ 'aesni-sha256-x86_64' => 'crypto/aes',
+ 'rsaz-x86_64' => 'crypto/bn',
+ 'rsaz-avx2' => 'crypto/bn',
+ 'aesni-mb-x86_64' => 'crypto/aes',
+ 'sha1-mb-x86_64' => 'crypto/sha',
+ 'sha256-mb-x86_64' => 'crypto/sha',
+ 'ecp_nistz256-x86_64' => 'crypto/ec',
+ 'wp-x86_64' => 'crypto/whrlpool',
+ 'cmll-x86_64' => 'crypto/camellia',
+ );
+
+# If I were feeling more clever, these could probably be extracted
+# from makefiles.
+sub platform_perlasm_compile_target
+ {
+ local($target, $source, $bname) = @_;
+
+ for $p (keys %perl1)
+ {
+# FIXME: export CC so rsaz-avx2 can test for it, since BSD make does
+# not export variables, unlike GNU make. But this also requires fixing
+# the .s.o rule to use CC!
+ if ($target eq "\$(OBJ_D)/$p.o")
+ {
+ return << "EOF";
+\$(TMP_D)/$p.s: $perl1{$p}/asm/$p.pl
+ \$(PERL) $perl1{$p}/asm/$p.pl \$(PERLASM_SCHEME) > \$@
+EOF
+ }
+ }
+ if ($target eq '$(OBJ_D)/x86_64cpuid.o')
+ {
+ return << 'EOF';
+$(TMP_D)/x86_64cpuid.s: crypto/x86_64cpuid.pl
+ $(PERL) crypto/x86_64cpuid.pl $(PERLASM_SCHEME) > $@
+EOF
+ }
+ elsif ($target eq '$(OBJ_D)/sha256-x86_64.o')
+ {
+ return << 'EOF';
+$(TMP_D)/sha256-x86_64.s: crypto/sha/asm/sha512-x86_64.pl
+ $(PERL) crypto/sha/asm/sha512-x86_64.pl $(PERLASM_SCHEME) $@
+EOF
+ }
+ elsif ($target eq '$(OBJ_D)/sha512-x86_64.o')
+ {
+ return << 'EOF';
+$(TMP_D)/sha512-x86_64.s: crypto/sha/asm/sha512-x86_64.pl
+ $(PERL) crypto/sha/asm/sha512-x86_64.pl $(PERLASM_SCHEME) $@
+EOF
+ }
+ elsif ($target eq '$(OBJ_D)/sha512-x86_64.o')
+ {
+ return << 'EOF';
+$(TMP_D)/sha512-x86_64.s: crypto/sha/asm/sha512-x86_64.pl
+ $(PERL) crypto/sha/asm/sha512-x86_64.pl $(PERLASM_SCHEME) $@
+EOF
+ }
+
+ die $target;
+ }
+
+sub special_compile_target
+ {
+ local($target) = @_;
+
+ if ($target eq 'crypto/bn/x86_64-gcc')
+ {
+ return << "EOF";
+\$(TMP_D)/x86_64-gcc.o: crypto/bn/asm/x86_64-gcc.c
+ \$(CC) \$(LIB_CFLAGS) -c -o \$@ crypto/bn/asm/x86_64-gcc.c
+EOF
+ }
+ return undef;
+ }
+
sub do_lib_rule
{
local($obj,$target,$name,$shlib)=@_;
local($ret,$_,$Name);
$target =~ s/\//$o/g if $o ne '/';
- $target="\$(LIB_D)$o$target";
+ $target="$target";
($Name=$name) =~ tr/a-z/A-Z/;
$ret.="$target: \$(${Name}OBJ)\n";
{
local($target,$files,$dep_libs,$libs)=@_;
local($ret,$_);
-
+
$file =~ s/\//$o/g if $o ne '/';
$n=&bname($target);
$ret.="$target: $files $dep_libs\n";
return($ret);
}
+sub which
+ {
+ my ($name)=@_;
+ my $path;
+ foreach $path (split /:/, $ENV{PATH})
+ {
+ if (-x "$path/$name")
+ {
+ return "$path/$name";
+ }
+ }
+ }
+
+sub do_rehash_rule {
+ my ($target, $deps) = @_;
+ my $ret = <<"EOF";
+$target: $deps
+ (OPENSSL="`pwd`/util/opensslwrap.sh"; \\
+ OPENSSL_DEBUG_MEMORY=on; \\
+ export OPENSSL OPENSSL_DEBUG_MEMORY; \\
+ \$(PERL) tools/c_rehash certs/demo; \\
+ touch $target)
+EOF
+ return $ret
+}
+sub do_test_rule {
+ my ($target, $deps, $test_cmd) = @_;
+ my $ret = <<"EOF";
+$target: $deps force.$target
+ TOP=. BIN_D=\$(BIN_D) TEST_D=\$(TEST_D) \\
+ PERL=\$(PERL) \$(PERL) test/$test_cmd
+force.$target:
+
+EOF
+ return $ret;
+}
+
+
1;