From: Noah Misch Date: Sat, 4 May 2019 04:56:47 +0000 (-0700) Subject: MSVC: Build ~35% faster by calling dumpbin just once per directory. X-Git-Tag: REL_12_BETA1~131 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=34ff542a71f8e8e768b24d40548dec4be0c707c3;p=postgresql MSVC: Build ~35% faster by calling dumpbin just once per directory. Peifeng Qiu Discussion: https://postgr.es/m/CABmtVJiKXQjast0dQD-8KAtfm8XmyYxo-4Dc7+M+fBr8JRTqkw@mail.gmail.com --- diff --git a/src/tools/msvc/gendef.pl b/src/tools/msvc/gendef.pl index 77c3a775b0..41d53eda46 100644 --- a/src/tools/msvc/gendef.pl +++ b/src/tools/msvc/gendef.pl @@ -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);