
In most builds, we can assume that engines live in the build tree subdirectory "engines". This was hard coded into the tests that use the engine ossltest. However, that hard coding is tedious, it would need to be done in every test recipe, and it's an incorrect assumption in some cases. This change has us play it safe and let the build files tell the testing framework where the engines are. Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
211 lines
4.3 KiB
Perl
211 lines
4.3 KiB
Perl
#!/usr/local/bin/perl
|
|
#
|
|
# unix.pl - the standard unix makefile stuff.
|
|
#
|
|
|
|
$o='/';
|
|
$cp='/bin/cp';
|
|
$rm='/bin/rm -f';
|
|
|
|
# C compiler stuff
|
|
|
|
if ($gcc)
|
|
{
|
|
$cc='gcc';
|
|
if ($debug)
|
|
{ $cflags="-g2 -ggdb"; }
|
|
else
|
|
{ $cflags="-O3 -fomit-frame-pointer"; }
|
|
}
|
|
else
|
|
{
|
|
$cc='cc';
|
|
if ($debug)
|
|
{ $cflags="-g"; }
|
|
else
|
|
{ $cflags="-O"; }
|
|
}
|
|
$obj='.o';
|
|
$asm_suffix='.s';
|
|
$ofile='-o ';
|
|
|
|
# EXE linking stuff
|
|
$link='${CC}';
|
|
$lflags='${CFLAG}';
|
|
$efile='-o ';
|
|
$exep='';
|
|
$ex_libs="";
|
|
|
|
# static library stuff
|
|
$mklib='ar r';
|
|
$mlflags='';
|
|
$ranlib=&which("ranlib") or $ranlib="true";
|
|
$plib='lib';
|
|
$libp=".a";
|
|
$shlibp=".a";
|
|
$lfile='';
|
|
|
|
$asm='as';
|
|
$afile='-o ';
|
|
$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="$target";
|
|
($Name=$name) =~ tr/a-z/A-Z/;
|
|
|
|
$ret.="$target: \$(${Name}OBJ)\n";
|
|
$ret.="\t\$(RM) $target\n";
|
|
$ret.="\t\$(MKLIB) $target \$(${Name}OBJ)\n";
|
|
$ret.="\t\$(RANLIB) $target\n\n";
|
|
}
|
|
|
|
sub do_link_rule
|
|
{
|
|
local($target,$files,$dep_libs,$libs)=@_;
|
|
local($ret,$_);
|
|
|
|
$file =~ s/\//$o/g if $o ne '/';
|
|
$n=&bname($target);
|
|
$ret.="$target: $files $dep_libs\n";
|
|
$ret.="\t\$(LINK_CMD) ${efile}$target \$(LFLAGS) $files $libs\n\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
|
|
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) OPENSSL_ENGINES=$(ENG_D) \\
|
|
PERL=\$(PERL) \$(PERL) test/$test_cmd \$(TESTS)
|
|
force.$target:
|
|
|
|
EOF
|
|
return $ret;
|
|
}
|
|
|
|
|
|
1;
|