REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1898 Add the unrequired aes_ecb files in process_files.pl and run it thru perl. It would remove the unrequired aes_ecb files from OpensslLib inf. Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Xiaoyu Lu <xiaoyux.lu@intel.com> Cc: Siyuan Fu <siyuan.fu@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Philippe Mathieu-Daude <philmd@redhat.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com> Signed-off-by: Zhichao Gao <zhichao.gao@intel.com>
		
			
				
	
	
		
			280 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			280 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/perl -w
 | 
						|
#
 | 
						|
# This script runs the OpenSSL Configure script, then processes the
 | 
						|
# resulting file list into our local OpensslLib[Crypto].inf and also
 | 
						|
# takes copies of opensslconf.h and dso_conf.h.
 | 
						|
#
 | 
						|
# This only needs to be done once by a developer when updating to a
 | 
						|
# new version of OpenSSL (or changing options, etc.). Normal users
 | 
						|
# do not need to do this, since the results are stored in the EDK2
 | 
						|
# git repository for them.
 | 
						|
#
 | 
						|
use strict;
 | 
						|
use Cwd;
 | 
						|
use File::Copy;
 | 
						|
 | 
						|
#
 | 
						|
# Find the openssl directory name for use lib. We have to do this
 | 
						|
# inside of BEGIN. The variables we create here, however, don't seem
 | 
						|
# to be available to the main script, so we have to repeat the
 | 
						|
# exercise.
 | 
						|
#
 | 
						|
my $inf_file;
 | 
						|
my $OPENSSL_PATH;
 | 
						|
my @inf;
 | 
						|
 | 
						|
BEGIN {
 | 
						|
    $inf_file = "OpensslLib.inf";
 | 
						|
 | 
						|
    # Read the contents of the inf file
 | 
						|
    open( FD, "<" . $inf_file ) ||
 | 
						|
        die "Cannot open \"" . $inf_file . "\"!";
 | 
						|
    @inf = (<FD>);
 | 
						|
    close(FD) ||
 | 
						|
        die "Cannot close \"" . $inf_file . "\"!";
 | 
						|
 | 
						|
    foreach (@inf) {
 | 
						|
        if (/DEFINE\s+OPENSSL_PATH\s*=\s*([a-z]+)/) {
 | 
						|
 | 
						|
            # We need to run Configure before we can include its result...
 | 
						|
            $OPENSSL_PATH = $1;
 | 
						|
 | 
						|
            my $basedir = getcwd();
 | 
						|
 | 
						|
            chdir($OPENSSL_PATH) ||
 | 
						|
                die "Cannot change to OpenSSL directory \"" . $OPENSSL_PATH . "\"";
 | 
						|
 | 
						|
            # Configure UEFI
 | 
						|
            system(
 | 
						|
                "./Configure",
 | 
						|
                "UEFI",
 | 
						|
                "no-afalgeng",
 | 
						|
                "no-asm",
 | 
						|
                "no-async",
 | 
						|
                "no-autoerrinit",
 | 
						|
                "no-autoload-config",
 | 
						|
                "no-bf",
 | 
						|
                "no-blake2",
 | 
						|
                "no-camellia",
 | 
						|
                "no-capieng",
 | 
						|
                "no-cast",
 | 
						|
                "no-chacha",
 | 
						|
                "no-cms",
 | 
						|
                "no-ct",
 | 
						|
                "no-deprecated",
 | 
						|
                "no-des",
 | 
						|
                "no-dgram",
 | 
						|
                "no-dsa",
 | 
						|
                "no-dynamic-engine",
 | 
						|
                "no-ec",
 | 
						|
                "no-ec2m",
 | 
						|
                "no-engine",
 | 
						|
                "no-err",
 | 
						|
                "no-filenames",
 | 
						|
                "no-gost",
 | 
						|
                "no-hw",
 | 
						|
                "no-idea",
 | 
						|
                "no-md4",
 | 
						|
                "no-mdc2",
 | 
						|
                "no-pic",
 | 
						|
                "no-ocb",
 | 
						|
                "no-poly1305",
 | 
						|
                "no-posix-io",
 | 
						|
                "no-rc2",
 | 
						|
                "no-rc4",
 | 
						|
                "no-rfc3779",
 | 
						|
                "no-rmd160",
 | 
						|
                "no-scrypt",
 | 
						|
                "no-seed",
 | 
						|
                "no-sock",
 | 
						|
                "no-srp",
 | 
						|
                "no-ssl",
 | 
						|
                "no-stdio",
 | 
						|
                "no-threads",
 | 
						|
                "no-ts",
 | 
						|
                "no-ui",
 | 
						|
                "no-whirlpool",
 | 
						|
                # OpenSSL1_1_1b doesn't support default rand-seed-os for UEFI
 | 
						|
                # UEFI only support --with-rand-seed=none
 | 
						|
                "--with-rand-seed=none"
 | 
						|
                ) == 0 ||
 | 
						|
                    die "OpenSSL Configure failed!\n";
 | 
						|
 | 
						|
            # Generate opensslconf.h per config data
 | 
						|
            system(
 | 
						|
                "perl -I. -Mconfigdata util/dofile.pl " .
 | 
						|
                "include/openssl/opensslconf.h.in " .
 | 
						|
                "> include/openssl/opensslconf.h"
 | 
						|
                ) == 0 ||
 | 
						|
                    die "Failed to generate opensslconf.h!\n";
 | 
						|
 | 
						|
            # Generate dso_conf.h per config data
 | 
						|
            system(
 | 
						|
                "perl -I. -Mconfigdata util/dofile.pl " .
 | 
						|
                "crypto/include/internal/dso_conf.h.in " .
 | 
						|
                "> include/internal/dso_conf.h"
 | 
						|
                ) == 0 ||
 | 
						|
                    die "Failed to generate dso_conf.h!\n";
 | 
						|
 | 
						|
            chdir($basedir) ||
 | 
						|
                die "Cannot change to base directory \"" . $basedir . "\"";
 | 
						|
 | 
						|
            push @INC, $1;
 | 
						|
            last;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# Retrieve file lists from OpenSSL configdata
 | 
						|
#
 | 
						|
use configdata qw/%unified_info/;
 | 
						|
 | 
						|
my @cryptofilelist = ();
 | 
						|
my @sslfilelist = ();
 | 
						|
foreach my $product ((@{$unified_info{libraries}},
 | 
						|
                      @{$unified_info{engines}})) {
 | 
						|
    foreach my $o (@{$unified_info{sources}->{$product}}) {
 | 
						|
        foreach my $s (@{$unified_info{sources}->{$o}}) {
 | 
						|
            next if ($unified_info{generate}->{$s});
 | 
						|
            next if $s =~ "crypto/bio/b_print.c";
 | 
						|
 | 
						|
            # No need to add unused files in UEFI.
 | 
						|
            # So it can reduce porting time, compile time, library size.
 | 
						|
            next if $s =~ "crypto/rand/randfile.c";
 | 
						|
            next if $s =~ "crypto/store/";
 | 
						|
            next if $s =~ "crypto/err/err_all.c";
 | 
						|
            next if $s =~ "crypto/aes/aes_ecb.c";
 | 
						|
 | 
						|
            if ($product =~ "libssl") {
 | 
						|
                push @sslfilelist, '  $(OPENSSL_PATH)/' . $s . "\r\n";
 | 
						|
                next;
 | 
						|
            }
 | 
						|
            push @cryptofilelist, '  $(OPENSSL_PATH)/' . $s . "\r\n";
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# Update the perl script to generate the missing header files
 | 
						|
#
 | 
						|
my @dir_list = ();
 | 
						|
for (sort keys %{$unified_info{dirinfo}}){
 | 
						|
  push @dir_list,$_;
 | 
						|
}
 | 
						|
 | 
						|
my $dir = getcwd();
 | 
						|
my @files = ();
 | 
						|
my @headers = ();
 | 
						|
chdir ("openssl");
 | 
						|
foreach(@dir_list){
 | 
						|
  @files = glob($_."/*.h");
 | 
						|
  push @headers, @files;
 | 
						|
}
 | 
						|
chdir ($dir);
 | 
						|
 | 
						|
foreach (@headers){
 | 
						|
  if(/ssl/){
 | 
						|
    push @sslfilelist, '  $(OPENSSL_PATH)/' . $_ . "\r\n";
 | 
						|
    next;
 | 
						|
  }
 | 
						|
  push @cryptofilelist, '  $(OPENSSL_PATH)/' . $_ . "\r\n";
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# Update OpensslLib.inf with autogenerated file list
 | 
						|
#
 | 
						|
my @new_inf = ();
 | 
						|
my $subbing = 0;
 | 
						|
print "\n--> Updating OpensslLib.inf ... ";
 | 
						|
foreach (@inf) {
 | 
						|
    if ( $_ =~ "# Autogenerated files list starts here" ) {
 | 
						|
        push @new_inf, $_, @cryptofilelist, @sslfilelist;
 | 
						|
        $subbing = 1;
 | 
						|
        next;
 | 
						|
    }
 | 
						|
    if ( $_ =~ "# Autogenerated files list ends here" ) {
 | 
						|
        push @new_inf, $_;
 | 
						|
        $subbing = 0;
 | 
						|
        next;
 | 
						|
    }
 | 
						|
 | 
						|
    push @new_inf, $_
 | 
						|
        unless ($subbing);
 | 
						|
}
 | 
						|
 | 
						|
my $new_inf_file = $inf_file . ".new";
 | 
						|
open( FD, ">" . $new_inf_file ) ||
 | 
						|
    die $new_inf_file;
 | 
						|
print( FD @new_inf ) ||
 | 
						|
    die $new_inf_file;
 | 
						|
close(FD) ||
 | 
						|
    die $new_inf_file;
 | 
						|
rename( $new_inf_file, $inf_file ) ||
 | 
						|
    die "rename $inf_file";
 | 
						|
print "Done!";
 | 
						|
 | 
						|
#
 | 
						|
# Update OpensslLibCrypto.inf with auto-generated file list (no libssl)
 | 
						|
#
 | 
						|
$inf_file = "OpensslLibCrypto.inf";
 | 
						|
 | 
						|
# Read the contents of the inf file
 | 
						|
@inf = ();
 | 
						|
@new_inf = ();
 | 
						|
open( FD, "<" . $inf_file ) ||
 | 
						|
    die "Cannot open \"" . $inf_file . "\"!";
 | 
						|
@inf = (<FD>);
 | 
						|
close(FD) ||
 | 
						|
    die "Cannot close \"" . $inf_file . "\"!";
 | 
						|
 | 
						|
$subbing = 0;
 | 
						|
print "\n--> Updating OpensslLibCrypto.inf ... ";
 | 
						|
foreach (@inf) {
 | 
						|
    if ( $_ =~ "# Autogenerated files list starts here" ) {
 | 
						|
        push @new_inf, $_, @cryptofilelist;
 | 
						|
        $subbing = 1;
 | 
						|
        next;
 | 
						|
    }
 | 
						|
    if ( $_ =~ "# Autogenerated files list ends here" ) {
 | 
						|
        push @new_inf, $_;
 | 
						|
        $subbing = 0;
 | 
						|
        next;
 | 
						|
    }
 | 
						|
 | 
						|
    push @new_inf, $_
 | 
						|
        unless ($subbing);
 | 
						|
}
 | 
						|
 | 
						|
$new_inf_file = $inf_file . ".new";
 | 
						|
open( FD, ">" . $new_inf_file ) ||
 | 
						|
    die $new_inf_file;
 | 
						|
print( FD @new_inf ) ||
 | 
						|
    die $new_inf_file;
 | 
						|
close(FD) ||
 | 
						|
    die $new_inf_file;
 | 
						|
rename( $new_inf_file, $inf_file ) ||
 | 
						|
    die "rename $inf_file";
 | 
						|
print "Done!";
 | 
						|
 | 
						|
#
 | 
						|
# Copy opensslconf.h and dso_conf.h generated from OpenSSL Configuration
 | 
						|
#
 | 
						|
print "\n--> Duplicating opensslconf.h into Include/openssl ... ";
 | 
						|
copy($OPENSSL_PATH . "/include/openssl/opensslconf.h",
 | 
						|
     $OPENSSL_PATH . "/../../Include/openssl/") ||
 | 
						|
   die "Cannot copy opensslconf.h!";
 | 
						|
print "Done!";
 | 
						|
print "\n--> Duplicating dso_conf.h into Include/internal ... ";
 | 
						|
copy($OPENSSL_PATH . "/include/internal/dso_conf.h",
 | 
						|
     $OPENSSL_PATH . "/../../Include/internal/") ||
 | 
						|
   die "Cannot copy dso_conf.h!";
 | 
						|
print "Done!\n";
 | 
						|
 | 
						|
print "\nProcessing Files Done!\n";
 | 
						|
 | 
						|
exit(0);
 | 
						|
 |