david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[efi] Tidy up output of EFI header import script

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2010-05-29 23:47:30 +01:00
parent 03b1020acc
commit bf2b1c8e47
3 changed files with 65 additions and 19 deletions

View File

@ -1,3 +1,6 @@
#ifndef _IPXE_EFI_PROCESSOR_BIND_H
#define _IPXE_EFI_PROCESSOR_BIND_H
/* /*
* EFI header files rely on having the CPU architecture directory * EFI header files rely on having the CPU architecture directory
* present in the search path in order to pick up ProcessorBind.h. We * present in the search path in order to pick up ProcessorBind.h. We
@ -12,3 +15,5 @@
#if __x86_64__ #if __x86_64__
#include <ipxe/efi/X64/ProcessorBind.h> #include <ipxe/efi/X64/ProcessorBind.h>
#endif #endif
#endif /* _IPXE_EFI_PROCESSOR_BIND_H */

View File

@ -1,5 +1,5 @@
#ifndef _EFI_H #ifndef _IPXE_EFI_H
#define _EFI_H #define _IPXE_EFI_H
/** @file /** @file
* *
@ -142,4 +142,4 @@ extern EFI_STATUS efi_init ( EFI_HANDLE image_handle,
EFI_SYSTEM_TABLE *systab ); EFI_SYSTEM_TABLE *systab );
extern int efi_snp_install ( void ); extern int efi_snp_install ( void );
#endif /* _EFI_H */ #endif /* _IPXE_EFI_H */

View File

@ -1,28 +1,58 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
=head1 NAME
import.pl
=head1 SYNOPSIS
import.pl [options] /path/to/edk2/edk2
Options:
-h,--help Display brief help message
-v,--verbose Increase verbosity
-q,--quiet Decrease verbosity
=cut
use File::Spec::Functions qw ( :ALL ); use File::Spec::Functions qw ( :ALL );
use File::Find; use File::Find;
use File::Path; use File::Path;
use Getopt::Long;
use Pod::Usage;
use FindBin; use FindBin;
use strict; use strict;
use warnings; use warnings;
my $verbosity = 0;
sub try_import_file { sub try_import_file {
my $ipxedir = shift; my $ipxedir = shift;
my $edktop = shift;
my $edkdirs = shift; my $edkdirs = shift;
my $filename = shift; my $filename = shift;
# Skip everything except headers # Skip everything except headers
return unless $filename =~ /\.h$/; return unless $filename =~ /\.h$/;
print "$filename...";
( undef, undef, my $basename ) = splitpath ( $filename ); # Skip files that are iPXE native headers
my $outfile = catfile ( $ipxedir, $filename ); my $outfile = catfile ( $ipxedir, $filename );
if ( -s $outfile ) {
open my $outfh, "<$outfile" or die "Could not open $outfile: $!\n";
my $line = <$outfh>;
close $outfh;
chomp $line;
return if $line =~ /^\#ifndef\s+_IPXE_\S+_H$/;
}
# Search for importable header
foreach my $edkdir ( @$edkdirs ) { foreach my $edkdir ( @$edkdirs ) {
my $infile = catfile ( $edkdir, $filename ); my $infile = catfile ( $edktop, $edkdir, $filename );
if ( -e $infile ) { if ( -e $infile ) {
# We have found a matching source file - import it # We have found a matching source file - import it
print "$infile\n"; print "$filename <- ".catfile ( $edkdir, $filename )."\n"
if $verbosity >= 1;
open my $infh, "<$infile" or die "Could not open $infile: $!\n"; open my $infh, "<$infile" or die "Could not open $infile: $!\n";
( undef, my $outdir, undef ) = splitpath ( $outfile ); ( undef, my $outdir, undef ) = splitpath ( $outfile );
mkpath ( $outdir ); mkpath ( $outdir );
@ -61,33 +91,44 @@ sub try_import_file {
# Recurse to handle any included files that we don't already have # Recurse to handle any included files that we don't already have
foreach my $dependency ( @dependencies ) { foreach my $dependency ( @dependencies ) {
if ( ! -e catfile ( $ipxedir, $dependency ) ) { if ( ! -e catfile ( $ipxedir, $dependency ) ) {
print "...following dependency on $dependency\n"; print "...following dependency on $dependency\n" if $verbosity >= 1;
try_import_file ( $ipxedir, $edkdirs, $dependency ); try_import_file ( $ipxedir, $edktop, $edkdirs, $dependency );
} }
} }
return; return;
} }
} }
print "no equivalent found\n"; die "$filename has no equivalent in $edktop\n";
} }
# Identify edk import directories # Parse command-line options
die "Syntax $0 /path/to/edk2/edk2\n" unless @ARGV == 1; Getopt::Long::Configure ( 'bundling', 'auto_abbrev' );
GetOptions (
'verbose|v+' => sub { $verbosity++; },
'quiet|q+' => sub { $verbosity--; },
'help|h' => sub { pod2usage ( 1 ); },
) or die "Could not parse command-line options\n";
pod2usage ( 1 ) unless @ARGV == 1;
my $edktop = shift; my $edktop = shift;
die "Directory \"$edktop\" does not appear to contain the EFI EDK2\n"
unless -e catfile ( $edktop, "MdePkg" ); # Identify edk import directories
my $edkdirs = [ catfile ( $edktop, "MdePkg/Include" ), my $edkdirs = [ "MdePkg/Include", "IntelFrameworkPkg/Include" ];
catfile ( $edktop, "IntelFrameworkPkg/Include" ) ]; foreach my $edkdir ( @$edkdirs ) {
die "Directory \"$edktop\" does not appear to contain the EFI EDK2 "
."(missing \"$edkdir\")\n" unless -d catdir ( $edktop, $edkdir );
}
# Identify iPXE EFI includes directory # Identify iPXE EFI includes directory
my $ipxedir = $FindBin::Bin; my $ipxedir = $FindBin::Bin;
die "Directory \"$ipxedir\" does not appear to contain the iPXE EFI includes\n" die "Directory \"$ipxedir\" does not appear to contain the iPXE EFI includes\n"
unless -e catfile ( $ipxedir, "../../../include/ipxe/efi" ); unless -e catfile ( $ipxedir, "../../../include/ipxe/efi" );
print "Importing EFI headers into $ipxedir\nfrom "; if ( $verbosity >= 1 ) {
print join ( "\n and ", @$edkdirs )."\n"; print "Importing EFI headers into $ipxedir\nfrom ";
print join ( "\n and ", map { catdir ( $edktop, $_ ) } @$edkdirs )."\n";
}
# Import headers # Import headers
find ( { wanted => sub { find ( { wanted => sub {
try_import_file ( $ipxedir, $edkdirs, abs2rel ( $_, $ipxedir ) ); try_import_file ( $ipxedir, $edktop, $edkdirs, abs2rel ( $_, $ipxedir ) );
}, no_chdir => 1 }, $ipxedir ); }, no_chdir => 1 }, $ipxedir );