]> granicus.if.org Git - postgresql/commitdiff
MSVC: Build ~35% faster by calling dumpbin just once per directory.
authorNoah Misch <noah@leadboat.com>
Sat, 4 May 2019 04:56:47 +0000 (21:56 -0700)
committerNoah Misch <noah@leadboat.com>
Sat, 4 May 2019 04:56:47 +0000 (21:56 -0700)
Peifeng Qiu

Discussion: https://postgr.es/m/CABmtVJiKXQjast0dQD-8KAtfm8XmyYxo-4Dc7+M+fBr8JRTqkw@mail.gmail.com

src/tools/msvc/gendef.pl

index 77c3a775b05fa6a6ded9235bcf5da43388f9e063..41d53eda468b4cc6dbb7bc87f78bd5a4cec4d9db 100644 (file)
@@ -1,7 +1,6 @@
 use strict;
 use warnings;
 use 5.8.0;
-use File::Spec::Functions qw(splitpath catpath);
 use List::Util qw(max);
 
 my @def;
@@ -12,17 +11,6 @@ my @def;
 # src/tools/msvc/gendef.pl
 #
 
-sub dumpsyms
-{
-       my ($objfile, $symfile) = @_;
-       my ($symvol, $symdirs, $symbase) = splitpath($symfile);
-       my $tmpfile = catpath($symvol, $symdirs, "symbols.out");
-       system("dumpbin /symbols /out:$tmpfile $_ >NUL")
-         && die "Could not call dumpbin";
-       rename($tmpfile, $symfile);
-       return;
-}
-
 # Given a symbol file path, loops over its contents
 # and returns a list of symbols of interest as a dictionary
 # of 'symbolname' -> symtype, where symtype is:
@@ -177,15 +165,12 @@ print "Generating $defname.DEF from directory $ARGV[0], platform $platform\n";
 
 my %def = ();
 
-while (<$ARGV[0]/*.obj>)    ## no critic (RequireGlobFunction);
-{
-       my $objfile = $_;
-       my $symfile = $objfile;
-       $symfile =~ s/\.obj$/.sym/i;
-       dumpsyms($objfile, $symfile);
-       print ".";
-       extract_syms($symfile, \%def);
-}
+my $symfile = "$ARGV[0]/all.sym";
+my $tmpfile = "$ARGV[0]/tmp.sym";
+system("dumpbin /symbols /out:$tmpfile $ARGV[0]/*.obj >NUL")
+  && die "Could not call dumpbin";
+rename($tmpfile, $symfile);
+extract_syms($symfile, \%def);
 print "\n";
 
 writedef($deffile, $platform, \%def);