summaryrefslogtreecommitdiffstats
path: root/CryptoPkg/Library/OpensslLib/process_files.pl
diff options
context:
space:
mode:
Diffstat (limited to 'CryptoPkg/Library/OpensslLib/process_files.pl')
-rwxr-xr-xCryptoPkg/Library/OpensslLib/process_files.pl529
1 files changed, 0 insertions, 529 deletions
diff --git a/CryptoPkg/Library/OpensslLib/process_files.pl b/CryptoPkg/Library/OpensslLib/process_files.pl
deleted file mode 100755
index fba97e7c39..0000000000
--- a/CryptoPkg/Library/OpensslLib/process_files.pl
+++ /dev/null
@@ -1,529 +0,0 @@
-#!/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.
-#
-# Due to the script wrapping required to process the OpenSSL
-# configuration data, each native architecture must be processed
-# individually by the maintainer (in addition to the standard version):
-# ./process_files.pl
-# ./process_files.pl X64
-# ./process_files.pl [Arch]
-#
-# Follow the command below to update the INF file:
-# 1. OpensslLib.inf ,OpensslLibCrypto.inf and OpensslLibFull.inf
-# ./process_files.pl
-# 2. OpensslLibAccel.inf and OpensslLibFullAccel.inf
-# ./process_files.pl X64
-# ./process_files.pl X64Gcc
-# ./process_files.pl IA32
-# ./process_files.pl IA32Gcc
-
-use strict;
-use Cwd;
-use File::Copy;
-use File::Basename;
-use File::Path qw(make_path remove_tree);
-use Text::Tabs;
-
-my $comment_character;
-
-#
-# OpenSSL perlasm generator script does not transfer the copyright header
-#
-sub copy_license_header
-{
- my @args = split / /, shift; #Separate args by spaces
- my $source = $args[1]; #Source file is second (after "perl")
- my $target = pop @args; #Target file is always last
- chop ($target); #Remove newline char
-
- my $temp_file_name = "license.tmp";
- open (my $source_file, "<" . $source) || die $source;
- open (my $target_file, "<" . $target) || die $target;
- open (my $temp_file, ">" . $temp_file_name) || die $temp_file_name;
-
- #Add "generated file" warning
- $source =~ s/^..//; #Remove leading "./"
- print ($temp_file "$comment_character WARNING: do not edit!\r\n");
- print ($temp_file "$comment_character Generated from $source\r\n");
- print ($temp_file "$comment_character\r\n");
-
- #Copy source file header to temp file
- while (my $line = <$source_file>) {
- next if ($line =~ /#!/); #Ignore shebang line
- $line =~ s/#/$comment_character/; #Fix comment character for assembly
- $line =~ s/\s+$/\r\n/; #Trim trailing whitepsace, fixup line endings
- print ($temp_file $line);
- last if ($line =~ /http/); #Last line of copyright header contains a web link
- }
- print ($temp_file "\r\n");
- #Retrieve generated assembly contents
- while (my $line = <$target_file>) {
- $line =~ s/\s+$/\r\n/; #Trim trailing whitepsace, fixup line endings
- print ($temp_file expand ($line)); #expand() replaces tabs with spaces
- }
-
- close ($source_file);
- close ($target_file);
- close ($temp_file);
-
- move ($temp_file_name, $target) ||
- die "Cannot replace \"" . $target . "\"!";
-}
-
-#
-# 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 $uefi_config;
-my $extension;
-my $compile;
-my $arch;
-my @inf;
-
-BEGIN {
- $inf_file = "OpensslLib.inf";
- $uefi_config = "UEFI";
- $arch = shift;
-
- if (defined $arch) {
- if (uc ($arch) eq "X64") {
- $arch = "X64";
- $uefi_config = "UEFI-x86_64";
- $extension = "nasm";
- $compile = "MSFT";
- $comment_character = ";";
- } elsif (uc ($arch) eq "X64GCC") {
- $arch = "X64Gcc";
- $uefi_config = "UEFI-x86_64-GCC";
- $extension = "S";
- $compile = "GCC";
- $comment_character = "#";
- } elsif (uc ($arch) eq "IA32") {
- $arch = "IA32";
- $uefi_config = "UEFI-x86";
- $extension = "nasm";
- $compile = "MSFT";
- $comment_character = ";";
- } elsif (uc ($arch) eq "IA32GCC") {
- $arch = "IA32Gcc";
- $uefi_config = "UEFI-x86-GCC";
- $extension = "S";
- $compile = "GCC";
- $comment_character = "#";
- } else {
- die "Unsupported architecture \"" . $arch . "\"!";
- }
- $inf_file = "OpensslLibAccel.inf";
- if ($extension eq "nasm") {
- if (`nasm -v 2>&1`) {
- #Presence of nasm executable will trigger inclusion of AVX instructions
- die "\nCannot run assembly generators with NASM in path!\n\n";
- }
- }
-
- # Prepare assembly folder
- if (-d $arch) {
- opendir my $dir, $arch ||
- die "Cannot open assembly folder \"" . $arch . "\"!";
- while (defined (my $file = readdir $dir)) {
- if (-d "$arch/$file") {
- next if $file eq ".";
- next if $file eq "..";
- remove_tree ("$arch/$file", {safe => 1}) ||
- die "Cannot clean assembly folder \"" . "$arch/$file" . "\"!";
- }
- }
-
- } else {
- mkdir $arch ||
- die "Cannot create assembly folder \"" . $arch . "\"!";
- }
- }
-
- # 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",
- "--config=../UefiAsm.conf",
- "$uefi_config",
- "no-afalgeng",
- "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-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 " .
- "include/crypto/dso_conf.h.in " .
- "> include/crypto/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/;
-use configdata qw/%config/;
-use configdata qw/%target/;
-
-#
-# Collect build flags from configdata
-#
-my $flags = "";
-foreach my $f (@{$config{lib_defines}}) {
- $flags .= " -D$f";
-}
-
-my @cryptofilelist = ();
-my @sslfilelist = ();
-my @ecfilelist = ();
-my @asmfilelist = ();
-my @asmbuild = ();
-foreach my $product ((@{$unified_info{libraries}},
- @{$unified_info{engines}})) {
- foreach my $o (@{$unified_info{sources}->{$product}}) {
- foreach my $s (@{$unified_info{sources}->{$o}}) {
- # No need to add unused files in UEFI.
- # So it can reduce porting time, compile time, library size.
- next if $s =~ "crypto/bio/b_print.c";
- 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 ($unified_info{generate}->{$s}) {
- if (defined $arch) {
- my $buildstring = "perl";
- foreach my $arg (@{$unified_info{generate}->{$s}}) {
- if ($arg =~ ".pl") {
- $buildstring .= " ./openssl/$arg";
- } elsif ($arg =~ "PERLASM_SCHEME") {
- $buildstring .= " $target{perlasm_scheme}";
- } elsif ($arg =~ "LIB_CFLAGS") {
- $buildstring .= "$flags";
- }
- }
- ($s, my $path, undef) = fileparse($s, qr/\.[^.]*/);
- $buildstring .= " ./$arch/$path$s.$extension";
- make_path ("./$arch/$path");
- push @asmbuild, "$buildstring\n";
- push @asmfilelist, " $arch/$path$s.$extension |$compile\r\n";
- }
- next;
- }
- if ($s =~ "/ec/" || $s =~ "/sm2/") {
- push @ecfilelist, ' $(OPENSSL_PATH)/' . $s . "\r\n";
- next;
- }
- 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;
- }
- if ($_ =~ "/ec/" || $_ =~ "/sm2/") {
- push @ecfilelist, ' $(OPENSSL_PATH)/' . $_ . "\r\n";
- next;
- }
- push @cryptofilelist, ' $(OPENSSL_PATH)/' . $_ . "\r\n";
-}
-
-
-#
-# Generate assembly files
-#
-if (@asmbuild) {
- print "\n--> Generating assembly files ... ";
- foreach my $buildstring (@asmbuild) {
- system ("$buildstring");
- copy_license_header ($buildstring);
- }
- print "Done!";
-}
-
-#
-# Update OpensslLib.inf with autogenerated file list
-#
-my @new_inf = ();
-my $subbing = 0;
-print "\n--> Updating $inf_file ... ";
-foreach (@inf) {
- if ($_ =~ "DEFINE OPENSSL_FLAGS_CONFIG") {
- push @new_inf, " DEFINE OPENSSL_FLAGS_CONFIG =" . $flags . "\r\n";
- next;
- }
- if ( $_ =~ "# Autogenerated files list starts here" ) {
- push @new_inf, $_, @cryptofilelist, @sslfilelist;
- $subbing = 1;
- next;
- }
- if (defined $arch) {
- my $arch_asmfile_flag = "# Autogenerated " . $arch . " files list starts here";
- if ($_ =~ $arch_asmfile_flag) {
- push @new_inf, $_, @asmfilelist;
- $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!";
-
-if (!defined $arch) {
- #
- # 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!";
-}
-
-#
-# Update OpensslLibFull.inf with autogenerated file list
-#
-if (!defined $arch) {
- $inf_file = "OpensslLibFull.inf";
-} else {
- $inf_file = "OpensslLibFullAccel.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 $inf_file ... ";
-foreach (@inf) {
- if ( $_ =~ "# Autogenerated files list starts here" ) {
- push @new_inf, $_, @cryptofilelist, @sslfilelist, @ecfilelist;
- $subbing = 1;
- next;
- }
- if (defined $arch) {
- my $arch_asmfile_flag = "# Autogenerated " . $arch . " files list starts here";
- if ($_ =~ $arch_asmfile_flag) {
- push @new_inf, $_, @asmfilelist;
- $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 ... ";
-system(
- "perl -pe 's/\\n/\\r\\n/' " .
- "< " . $OPENSSL_PATH . "/include/openssl/opensslconf.h " .
- "> " . $OPENSSL_PATH . "/../../Include/openssl/opensslconf.h"
- ) == 0 ||
- die "Cannot copy opensslconf.h!";
-print "Done!";
-
-print "\n--> Duplicating dso_conf.h into Include/crypto ... ";
-system(
- "perl -pe 's/\\n/\\r\\n/' " .
- "< " . $OPENSSL_PATH . "/include/crypto/dso_conf.h" .
- "> " . $OPENSSL_PATH . "/../../Include/crypto/dso_conf.h"
- ) == 0 ||
- die "Cannot copy dso_conf.h!";
-print "Done!\n";
-
-print "\nProcessing Files Done!\n";
-
-exit(0);
-