diff --git a/docs/GettingStarted.html b/docs/GettingStarted.html index 6d474d30fa3..56dfa20eef6 100644 --- a/docs/GettingStarted.html +++ b/docs/GettingStarted.html @@ -429,7 +429,7 @@ href="GCCFEBuildInstrs.html">try to compile it on your platform.

perl ≥5.6.0 - Nightly tester, utilities + Utilities @@ -1691,12 +1691,6 @@ are code generators for parts of LLVM infrastructure.

directory, switch to directory llvm/tools/llc and build it, causing a re-linking of LLC.

-
NewNightlyTest.pl and - NightlyTestTemplate.html
These files are used in a - cron script to generate nightly status reports of the functionality of - tools, and the results can be seen by following the appropriate link on - the LLVM homepage.

-
TableGen/
The TableGen directory contains the tool used to generate register descriptions, instruction set descriptions, and even assemblers from common TableGen description diff --git a/utils/Makefile b/utils/Makefile index 8fa84c1c247..b98376006ed 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -11,12 +11,9 @@ LEVEL = .. PARALLEL_DIRS := FileCheck FileUpdate TableGen PerfectShuffle \ count fpcmp llvm-lit not unittest json-bench -EXTRA_DIST := cgiplotNLT.pl check-each-file codegen-diff countloc.sh \ +EXTRA_DIST := check-each-file codegen-diff countloc.sh \ DSAclean.py DSAextract.py emacs findsym.pl GenLibDeps.pl \ - getsrcs.sh importNLT.pl llvmdo llvmgrep llvm-native-gcc \ - llvm-native-gxx makellvm NightlyTest.gnuplot NightlyTest.pl \ - NightlyTestTemplate.html NLT.schema \ - parseNLT.pl plotNLT.pl profile.pl \ - webNLT.pl vim + getsrcs.sh llvmdo llvmgrep llvm-native-gcc \ + llvm-native-gxx makellvm profile.pl vim include $(LEVEL)/Makefile.common diff --git a/utils/NewNightlyTest.pl b/utils/NewNightlyTest.pl deleted file mode 100755 index da806e9c0e3..00000000000 --- a/utils/NewNightlyTest.pl +++ /dev/null @@ -1,836 +0,0 @@ -#!/usr/bin/perl -use POSIX qw(strftime); -use File::Copy; -use File::Find; -use Socket; - -# -# Program: NewNightlyTest.pl -# -# Synopsis: Perform a series of tests which are designed to be run nightly. -# This is used to keep track of the status of the LLVM tree, tracking -# regressions and performance changes. Submits this information -# to llvm.org where it is placed into the nightlytestresults database. -# -# Syntax: NightlyTest.pl [OPTIONS] [CVSROOT BUILDDIR WEBDIR] -# where -# OPTIONS may include one or more of the following: -# -# MAIN OPTIONS: -# -config LLVMPATH If specified, use an existing LLVM build and only run and -# report the test information. The LLVMCONFIG argument should -# be the path to the llvm-config executable in the LLVM build. -# This should be the first argument if given. NOT YET -# IMPLEMENTED. -# -nickname NAME The NAME argument specifieds the nickname this script -# will submit to the nightlytest results repository. -# -nouname Don't include uname data (machine will be identified by nickname only). -# -submit-server Specifies a server to submit the test results too. If this -# option is not specified it defaults to -# llvm.org. This is basically just the address of the -# webserver -# -submit-script Specifies which script to call on the submit server. If -# this option is not specified it defaults to -# /nightlytest/NightlyTestAccept.php. This is basically -# everything after the www.yourserver.org. -# -submit-aux If specified, an auxiliary script to run in addition to the -# normal submit script. The script will be passed the path to -# the "sentdata.txt" file as its sole argument. -# -nosubmit Do not report the test results back to a submit server. -# -# -# BUILD OPTIONS (not used with -config): -# -nocheckout Do not create, checkout, update, or configure -# the source tree. -# -noremove Do not remove the BUILDDIR after it has been built. -# -noremoveresults Do not remove the WEBDIR after it has been built. -# -noclean Do not run 'make clean' before building. -# -nobuild Do not build llvm. If tests are enabled perform them -# on the llvm build specified in the build directory -# -release Build an LLVM Release+Asserts version -# -release-asserts Build an LLVM Release version -# -disable-bindings Disable building LLVM bindings. -# -with-clang Checkout Clang source into tools/clang. -# -compileflags Next argument specifies extra options passed to make when -# building LLVM. -# -use-gmake Use gmake instead of the default make command to build -# llvm and run tests. -# -llvmgccdir Next argument specifies the llvm-gcc install prefix. -# -# TESTING OPTIONS: -# -notest Do not even attempt to run the test programs. -# -nodejagnu Do not run feature or regression tests -# -enable-llcbeta Enable testing of beta features in llc. -# -enable-lli Enable testing of lli (interpreter) features, default is off -# -disable-pic Disable building with Position Independent Code. -# -disable-llc Disable LLC tests in the nightly tester. -# -disable-jit Disable JIT tests in the nightly tester. -# -disable-cbe Disable C backend tests in the nightly tester. -# -disable-lto Disable link time optimization. -# -test-cflags Next argument specifies that C compilation options that -# override the default when running the testsuite. -# -test-cxxflags Next argument specifies that C++ compilation options that -# override the default when running the testsuite. -# -extraflags Next argument specifies extra options that are passed to -# compile the tests. -# -noexternals Do not run the external tests (for cases where povray -# or SPEC are not installed) -# -with-externals Specify a directory where the external tests are located. -# -# OTHER OPTIONS: -# -parallel Run parallel jobs with GNU Make (see -parallel-jobs). -# -parallel-jobs The number of parallel Make jobs to use (default is two). -# -parallel-test Allow parallel execution of llvm-test -# -verbose Turn on some debug output -# -nice Checkout/Configure/Build with "nice" to reduce impact -# on busy servers. -# -f2c Next argument specifies path to F2C utility -# -gccpath Path to gcc/g++ used to build LLVM -# -target Specify the target triplet -# -cflags Next argument specifies that C compilation options that -# override the default. -# -cxxflags Next argument specifies that C++ compilation options that -# override the default. -# -ldflags Next argument specifies that linker options that override -# the default. -# -# CVSROOT is ignored, it is passed for backwards compatibility. -# BUILDDIR is the directory where sources for this test run will be checked out -# AND objects for this test run will be built. This directory MUST NOT -# exist before the script is run; it will be created by the svn checkout -# process and erased (unless -noremove is specified; see above.) -# WEBDIR is the directory into which the test results web page will be written, -# AND in which the "index.html" is assumed to be a symlink to the most recent -# copy of the results. This directory will be created if it does not exist. -# LLVMGCCDIR is the directory in which the LLVM GCC Front End is installed -# to. This is the same as you would have for a normal LLVM build. -# -############################################################## -# -# Getting environment variables -# -############################################################## -my $HOME = $ENV{'HOME'}; -my $SVNURL = $ENV{"SVNURL"}; -$SVNURL = 'http://llvm.org/svn/llvm-project' unless $SVNURL; -my $TestSVNURL = $ENV{"TestSVNURL"}; -$TestSVNURL = 'http://llvm.org/svn/llvm-project' unless $TestSVNURL; -my $BuildDir = $ENV{'BUILDDIR'}; -my $WebDir = $ENV{'WEBDIR'}; - -############################################################## -# -# Calculate the date prefix... -# -############################################################## -use POSIX; -@TIME = localtime; -my $DATE = strftime("%Y-%m-%d_%H-%M-%S", localtime()); - -############################################################## -# -# Parse arguments... -# -############################################################## -$CONFIG_PATH=""; -$CONFIGUREARGS=""; -$nickname=""; -$NOTEST=0; -$MAKECMD="make"; -$SUBMITSERVER = "llvm.org"; -$SUBMITSCRIPT = "/nightlytest/NightlyTestAccept.php"; -$SUBMITAUX=""; -$SUBMIT = 1; -$PARALLELJOBS = "2"; -my $TESTFLAGS=""; - -if ($ENV{'LLVMGCCDIR'}) { - $CONFIGUREARGS .= " --with-llvmgccdir=" . $ENV{'LLVMGCCDIR'}; - $LLVMGCCPATH = $ENV{'LLVMGCCDIR'} . '/bin'; -} -else { - $LLVMGCCPATH = ""; -} - -while (scalar(@ARGV) and ($_ = $ARGV[0], /^[-+]/)) { - shift; - last if /^--$/; # Stop processing arguments on -- - - # List command line options here... - if (/^-config$/) { $CONFIG_PATH = "$ARGV[0]"; shift; next; } - if (/^-nocheckout$/) { $NOCHECKOUT = 1; next; } - if (/^-noclean$/) { $NOCLEAN = 1; next; } - if (/^-noremove$/) { $NOREMOVE = 1; next; } - if (/^-noremoveatend$/) { $NOREMOVEATEND = 1; next; } - if (/^-noremoveresults$/){ $NOREMOVERESULTS = 1; next; } - if (/^-notest$/) { $NOTEST = 1; next; } - if (/^-norunningtests$/) { next; } # Backward compatibility, ignored. - if (/^-parallel-jobs$/) { $PARALLELJOBS = "$ARGV[0]"; shift; next;} - if (/^-parallel$/) { $MAKEOPTS = "$MAKEOPTS -j$PARALLELJOBS"; next; } - if (/^-parallel-test$/) { $PROGTESTOPTS .= " ENABLE_PARALLEL_REPORT=1"; next; } - if (/^-with-clang$/) { $WITHCLANG = 1; next; } - if (/^-release$/) { $MAKEOPTS = "$MAKEOPTS ENABLE_OPTIMIZED=1 ". - "OPTIMIZE_OPTION=-O2"; next;} - if (/^-release-asserts$/){ $MAKEOPTS = "$MAKEOPTS ENABLE_OPTIMIZED=1 ". - "DISABLE_ASSERTIONS=1 ". - "OPTIMIZE_OPTION=-O2"; next;} - if (/^-enable-llcbeta$/) { $PROGTESTOPTS .= " ENABLE_LLCBETA=1"; next; } - if (/^-disable-pic$/) { $CONFIGUREARGS .= " --enable-pic=no"; next; } - if (/^-enable-lli$/) { $PROGTESTOPTS .= " ENABLE_LLI=1"; - $CONFIGUREARGS .= " --enable-lli"; next; } - if (/^-disable-llc$/) { $PROGTESTOPTS .= " DISABLE_LLC=1"; - $CONFIGUREARGS .= " --disable-llc_diffs"; next; } - if (/^-disable-jit$/) { $PROGTESTOPTS .= " DISABLE_JIT=1"; - $CONFIGUREARGS .= " --disable-jit"; next; } - if (/^-disable-bindings$/) { $CONFIGUREARGS .= " --disable-bindings"; next; } - if (/^-disable-cbe$/) { $PROGTESTOPTS .= " DISABLE_CBE=1"; next; } - if (/^-disable-lto$/) { $PROGTESTOPTS .= " DISABLE_LTO=1"; next; } - if (/^-test-opts$/) { $PROGTESTOPTS .= " $ARGV[0]"; shift; next; } - if (/^-verbose$/) { $VERBOSE = 1; next; } - if (/^-teelogs$/) { $TEELOGS = 1; next; } - if (/^-nice$/) { $NICE = "nice "; next; } - if (/^-f2c$/) { $CONFIGUREARGS .= " --with-f2c=$ARGV[0]"; - shift; next; } - if (/^-with-externals$/) { $CONFIGUREARGS .= " --with-externals=$ARGV[0]"; - shift; next; } - if (/^-configure-args$/) { $CONFIGUREARGS .= " $ARGV[0]"; - shift; next; } - if (/^-submit-server/) { $SUBMITSERVER = "$ARGV[0]"; shift; next; } - if (/^-submit-script/) { $SUBMITSCRIPT = "$ARGV[0]"; shift; next; } - if (/^-submit-aux/) { $SUBMITAUX = "$ARGV[0]"; shift; next; } - if (/^-nosubmit$/) { $SUBMIT = 0; next; } - if (/^-nickname$/) { $nickname = "$ARGV[0]"; shift; next; } - if (/^-gccpath/) { $CONFIGUREARGS .= - " CC=$ARGV[0]/gcc CXX=$ARGV[0]/g++"; - $GCCPATH=$ARGV[0]; shift; next; } - else { $GCCPATH=""; } - if (/^-target/) { $CONFIGUREARGS .= " --target=$ARGV[0]"; - shift; next; } - if (/^-cflags/) { $MAKEOPTS = "$MAKEOPTS C.Flags=\'$ARGV[0]\'"; - shift; next; } - if (/^-cxxflags/) { $MAKEOPTS = "$MAKEOPTS CXX.Flags=\'$ARGV[0]\'"; - shift; next; } - if (/^-ldflags/) { $MAKEOPTS = "$MAKEOPTS LD.Flags=\'$ARGV[0]\'"; - shift; next; } - if (/^-test-cflags/) { $TESTFLAGS = "$TESTFLAGS CFLAGS=\'$ARGV[0]\'"; - shift; next; } - if (/^-test-cxxflags/) { $TESTFLAGS = "$TESTFLAGS CXXFLAGS=\'$ARGV[0]\'"; - shift; next; } - if (/^-compileflags/) { $MAKEOPTS = "$MAKEOPTS $ARGV[0]"; shift; next; } - if (/^-llvmgccdir/) { $CONFIGUREARGS .= " --with-llvmgccdir=\'$ARGV[0]\'"; - $LLVMGCCPATH = $ARGV[0] . '/bin'; - shift; next;} - if (/^-noexternals$/) { $NOEXTERNALS = 1; next; } - if (/^-nouname$/) { $NOUNAME = 1; next; } - if (/^-use-gmake/) { $MAKECMD = "gmake"; shift; next; } - if (/^-extraflags/) { $CONFIGUREARGS .= - " --with-extra-options=\'$ARGV[0]\'"; shift; next;} - if (/^-noexternals$/) { $NOEXTERNALS = 1; next; } - if (/^-nodejagnu$/) { next; } - if (/^-nobuild$/) { $NOBUILD = 1; next; } - print "Unknown option: $_ : ignoring!\n"; -} - -if ($CONFIGUREARGS !~ /--disable-jit/) { - $CONFIGUREARGS .= " --enable-jit"; -} - -if (@ARGV != 0 and @ARGV != 3) { - die "error: must specify 0 or 3 options!"; -} - -if (@ARGV == 3) { - if ($CONFIG_PATH ne "") { - die "error: arguments are unsupported in -config mode,"; - } - - # ARGV[0] used to be the CVS root, ignored for backward compatibility. - $BuildDir = $ARGV[1]; - $WebDir = $ARGV[2]; -} - -if ($CONFIG_PATH ne "") { - $BuildDir = ""; - $SVNURL = $TestSVNURL = ""; - if ($WebDir eq "") { - die("please specify a web directory"); - } -} else { - if ($BuildDir eq "" or - $WebDir eq "") { - die("please specify a build directory, and a web directory"); - } -} - -if ($nickname eq "") { - die ("Please invoke NewNightlyTest.pl with command line option " . - "\"-nickname \""); -} - -my $LLVMSrcDir = $ENV{'LLVMSRCDIR'}; -$LLVMSrcDir = "$BuildDir/llvm" unless $LLVMSrcDir; -my $LLVMObjDir = $ENV{'LLVMOBJDIR'}; -$LLVMObjDir = "$BuildDir/llvm" unless $LLVMObjDir; -my $LLVMTestDir = $ENV{'LLVMTESTDIR'}; -$LLVMTestDir = "$BuildDir/llvm/projects/llvm-test" unless $LLVMTestDir; - -############################################################## -# -# Define the file names we'll use -# -############################################################## - -my $Prefix = "$WebDir/$DATE"; -my $SingleSourceLog = "$Prefix-SingleSource-ProgramTest.txt.gz"; -my $MultiSourceLog = "$Prefix-MultiSource-ProgramTest.txt.gz"; -my $ExternalLog = "$Prefix-External-ProgramTest.txt.gz"; - -# These are only valid in non-config mode. -my $ConfigureLog = "", $BuildLog = "", $COLog = ""; -my $DejagnuLog = "", $DejagnuSum = "", $DejagnuLog = ""; - -# Are we in config mode? -my $ConfigMode = 0; - -############################################################## -# -# Helper functions -# -############################################################## - -sub GetDir { - my $Suffix = shift; - opendir DH, $WebDir; - my @Result = reverse sort grep !/$DATE/, grep /[-0-9]+$Suffix/, readdir DH; - closedir DH; - return @Result; -} - -sub RunLoggedCommand { - my $Command = shift; - my $Log = shift; - my $Title = shift; - if ($TEELOGS) { - if ($VERBOSE) { - print "$Title\n"; - print "$Command 2>&1 | tee $Log\n"; - } - system "$Command 2>&1 | tee $Log"; - } else { - if ($VERBOSE) { - print "$Title\n"; - print "$Command > $Log 2>&1\n"; - } - system "$Command > $Log 2>&1"; - } -} - -sub RunAppendingLoggedCommand { - my $Command = shift; - my $Log = shift; - my $Title = shift; - if ($TEELOGS) { - if ($VERBOSE) { - print "$Title\n"; - print "$Command 2>&1 | tee -a $Log\n"; - } - system "$Command 2>&1 | tee -a $Log"; - } else { - if ($VERBOSE) { - print "$Title\n"; - print "$Command >> $Log 2>&1\n"; - } - system "$Command >> $Log 2>&1"; - } -} - -sub GetRegex { # (Regex with ()'s, value) - if ($_[1] =~ /$_[0]/m) { - return $1; - } - return "0"; -} - -sub ChangeDir { # directory, logical name - my ($dir,$name) = @_; - chomp($dir); - if ( $VERBOSE ) { print "Changing To: $name ($dir)\n"; } - $result = chdir($dir); - if (!$result) { - print "ERROR!!! Cannot change directory to: $name ($dir) because $!\n"; - return false; - } - return true; -} - -sub ReadFile { - if (open (FILE, $_[0])) { - undef $/; - my $Ret = ; - close FILE; - $/ = '\n'; - return $Ret; - } else { - print "Could not open file '$_[0]' for reading!\n"; - return ""; - } -} - -sub WriteFile { # (filename, contents) - open (FILE, ">$_[0]") or die "Could not open file '$_[0]' for writing!\n"; - print FILE $_[1]; - close FILE; -} - -sub CopyFile { #filename, newfile - my ($file, $newfile) = @_; - chomp($file); - if ($VERBOSE) { print "Copying $file to $newfile\n"; } - copy($file, $newfile); -} - -#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# This function acts as a mini web browswer submitting data -# to our central server via the post method -# -#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -sub WriteSentData { - $variables = $_[0]; - - # Write out the "...-sentdata.txt" file. - - my $sentdata=""; - foreach $x (keys (%$variables)){ - $value = $variables->{$x}; - $sentdata.= "$x => $value\n"; - } - WriteFile "$Prefix-sentdata.txt", $sentdata; -} - -sub SendData { - $host = $_[0]; - $file = $_[1]; - $variables = $_[2]; - - if (!($SUBMITAUX eq "")) { - system "$SUBMITAUX \"$Prefix-sentdata.txt\""; - } - - if (!$SUBMIT) { - return "Skipped standard submit.\n"; - } - - # Create the content to send to the server. - - my $content; - foreach $key (keys (%$variables)){ - $value = $variables->{$key}; - $value =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; - $content .= "$key=$value&"; - } - - # Send the data to the server. - # - # FIXME: This code should be more robust? - - $port=80; - $socketaddr= sockaddr_in $port, inet_aton $host or die "Bad hostname\n"; - socket SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp') or - die "Bad socket\n"; - connect SOCK, $socketaddr or die "Bad connection\n"; - select((select(SOCK), $| = 1)[0]); - - $length = length($content); - - my $send= "POST $file HTTP/1.0\n"; - $send.= "Host: $host\n"; - $send.= "Content-Type: application/x-www-form-urlencoded\n"; - $send.= "Content-length: $length\n\n"; - $send.= "$content"; - - print SOCK $send; - my $result; - while(){ - $result .= $_; - } - close(SOCK); - - return $result; -} - -############################################################## -# -# Individual Build & Test Functions -# -############################################################## - -# Create the source repository directory. -sub CheckoutSource { - die "Invalid call!" unless $ConfigMode == 0; - if (-d $BuildDir) { - if (!$NOREMOVE) { - if ( $VERBOSE ) { - print "Build directory exists! Removing it\n"; - } - system "rm -rf $BuildDir"; - mkdir $BuildDir or die "Could not create checkout directory $BuildDir!"; - } else { - if ( $VERBOSE ) { - print "Build directory exists!\n"; - } - } - } else { - mkdir $BuildDir or die "Could not create checkout directory $BuildDir!"; - } - - ChangeDir( $BuildDir, "checkout directory" ); - my $SVNCMD = "$NICE svn co --non-interactive"; - RunLoggedCommand("( time -p $SVNCMD $SVNURL/llvm/trunk llvm; cd llvm/projects ; " . - " $SVNCMD $TestSVNURL/test-suite/trunk llvm-test )", $COLog, - "CHECKOUT LLVM"); - if ($WITHCLANG) { - RunLoggedCommand("( cd llvm/tools ; " . - " $SVNCMD $SVNURL/cfe/trunk clang )", $COLog, - "CHECKOUT CLANG"); - } -} - -# Build the entire tree, saving build messages to the build log. Returns false -# on build failure. -sub BuildLLVM { - die "Invalid call!" unless $ConfigMode == 0; - my $EXTRAFLAGS = "--enable-spec --with-objroot=."; - RunLoggedCommand("(time -p $NICE ./configure $CONFIGUREARGS $EXTRAFLAGS) ", - $ConfigureLog, "CONFIGURE"); - # Build the entire tree, capturing the output into $BuildLog - if (!$NOCLEAN) { - RunAppendingLoggedCommand("($NICE $MAKECMD $MAKEOPTS clean)", $BuildLog, "BUILD CLEAN"); - } - RunAppendingLoggedCommand("(time -p $NICE $MAKECMD $MAKEOPTS)", $BuildLog, "BUILD"); - - if (`grep -a '^$MAKECMD\[^:]*: .*Error' $BuildLog | wc -l` + 0 || - `grep -a '^$MAKECMD: \*\*\*.*Stop.' $BuildLog | wc -l` + 0) { - return 0; - } - - return 1; -} - -# Run the named tests (i.e. "SingleSource" "MultiSource" "External") -sub TestDirectory { - my $SubDir = shift; - ChangeDir( "$LLVMTestDir/$SubDir", - "Programs Test Subdirectory" ) || return ("", ""); - - my $ProgramTestLog = "$Prefix-$SubDir-ProgramTest.txt"; - - # Make sure to clean the test results. - RunLoggedCommand("$MAKECMD -k $MAKEOPTS $PROGTESTOPTS clean $TESTFLAGS", - $ProgramTestLog, "TEST DIRECTORY $SubDir"); - - # Run the programs tests... creating a report.nightly.csv file. - my $LLCBetaOpts = ""; - RunLoggedCommand("$MAKECMD -k $MAKEOPTS $PROGTESTOPTS report.nightly.csv ". - "$TESTFLAGS TEST=nightly", - $ProgramTestLog, "TEST DIRECTORY $SubDir"); - $LLCBetaOpts = `$MAKECMD print-llcbeta-option`; - - my $ProgramsTable; - if (`grep -a '^$MAKECMD\[^:]: .*Error' $ProgramTestLog | wc -l` + 0) { - $ProgramsTable="Error running test $SubDir\n"; - print "ERROR TESTING\n"; - } elsif (`grep -a '^$MAKECMD\[^:]: .*No rule to make target' $ProgramTestLog | wc -l` + 0) { - $ProgramsTable="Makefile error running tests $SubDir!\n"; - print "ERROR TESTING\n"; - } else { - # Create a list of the tests which were run... - system "egrep -a 'TEST-(PASS|FAIL)' < $ProgramTestLog ". - "| sort > $Prefix-$SubDir-Tests.txt"; - } - $ProgramsTable = ReadFile "report.nightly.csv"; - - ChangeDir( "../../..", "Programs Test Parent Directory" ); - return ($ProgramsTable, $LLCBetaOpts); -} - -# Run all the nightly tests and return the program tables and the list of tests, -# passes, fails, and xfails. -sub RunNightlyTest() { - ($SSProgs, $llcbeta_options) = TestDirectory("SingleSource"); - WriteFile "$Prefix-SingleSource-Performance.txt", $SSProgs; - ($MSProgs, $llcbeta_options) = TestDirectory("MultiSource"); - WriteFile "$Prefix-MultiSource-Performance.txt", $MSProgs; - if ( ! $NOEXTERNALS ) { - ($ExtProgs, $llcbeta_options) = TestDirectory("External"); - WriteFile "$Prefix-External-Performance.txt", $ExtProgs; - system "cat $Prefix-SingleSource-Tests.txt " . - "$Prefix-MultiSource-Tests.txt ". - "$Prefix-External-Tests.txt | sort > $Prefix-Tests.txt"; - system "cat $Prefix-SingleSource-Performance.txt " . - "$Prefix-MultiSource-Performance.txt ". - "$Prefix-External-Performance.txt | sort > $Prefix-Performance.txt"; - } else { - $ExtProgs = "External TEST STAGE SKIPPED\n"; - if ( $VERBOSE ) { - print "External TEST STAGE SKIPPED\n"; - } - system "cat $Prefix-SingleSource-Tests.txt " . - "$Prefix-MultiSource-Tests.txt ". - " | sort > $Prefix-Tests.txt"; - system "cat $Prefix-SingleSource-Performance.txt " . - "$Prefix-MultiSource-Performance.txt ". - " | sort > $Prefix-Performance.txt"; - } - - # Compile passes, fails, xfails. - my $All = (ReadFile "$Prefix-Tests.txt"); - my @TestSuiteResultLines = split "\n", $All; - my ($Passes, $Fails, $XFails) = ""; - - for ($x=0; $x < @TestSuiteResultLines; $x++) { - if (@TestSuiteResultLines[$x] =~ m/^PASS:/) { - $Passes .= "$TestSuiteResultLines[$x]\n"; - } - elsif (@TestSuiteResultLines[$x] =~ m/^FAIL:/) { - $Fails .= "$TestSuiteResultLines[$x]\n"; - } - elsif (@TestSuiteResultLines[$x] =~ m/^XFAIL:/) { - $XFails .= "$TestSuiteResultLines[$x]\n"; - } - } - - return ($SSProgs, $MSProgs, $ExtProgs, $All, $Passes, $Fails, $XFails); -} - -############################################################## -# -# Initialize filenames -# -############################################################## - -if (! -d $WebDir) { - mkdir $WebDir, 0777 or die "Unable to create web directory: '$WebDir'."; - if($VERBOSE){ - warn "$WebDir did not exist; creating it.\n"; - } -} - -if ($CONFIG_PATH ne "") { - $ConfigMode = 1; - $LLVMSrcDir = GetRegex "^(.*)\\s+", `$CONFIG_PATH --src-root`; - $LLVMObjDir = GetRegex "^(.*)\\s+", `$CONFIG_PATH --obj-root`; - # FIXME: Add llvm-config hook for this? - $LLVMTestDir = $LLVMObjDir . "/projects/test-suite"; -} else { - $ConfigureLog = "$Prefix-Configure-Log.txt"; - $BuildLog = "$Prefix-Build-Log.txt"; - $COLog = "$Prefix-CVS-Log.txt"; -} - -if ($VERBOSE) { - if ($CONFIG_PATH ne "") { - print "INITIALIZED (config mode)\n"; - print "WebDir = $WebDir\n"; - print "Prefix = $Prefix\n"; - print "LLVM Src = $LLVMSrcDir\n"; - print "LLVM Obj = $LLVMObjDir\n"; - print "LLVM Test = $LLVMTestDir\n"; - } else { - print "INITIALIZED\n"; - print "SVN URL = $SVNURL\n"; - print "COLog = $COLog\n"; - print "BuildDir = $BuildDir\n"; - print "WebDir = $WebDir\n"; - print "Prefix = $Prefix\n"; - print "BuildLog = $BuildLog\n"; - } -} - -############################################################## -# -# The actual NewNightlyTest logic. -# -############################################################## - -$starttime = `date "+20%y-%m-%d %H:%M:%S"`; - -my $BuildError = 0, $BuildStatus = "OK"; -if ($ConfigMode == 0) { - if (!$NOCHECKOUT) { - CheckoutSource(); - } - - # Build LLVM. - ChangeDir( $LLVMSrcDir , "llvm source directory") ; - if ($NOCHECKOUT || $NOBUILD) { - $BuildStatus = "Skipped by user"; - } else { - if (!BuildLLVM()) { - if( $VERBOSE) { print "\n***ERROR BUILDING TREE\n\n"; } - $BuildError = 1; - $BuildStatus = "Error: compilation aborted"; - } - } -} - -# Run the llvm-test tests. -my ($SingleSourceProgramsTable, $MultiSourceProgramsTable, $ExternalProgramsTable, - $all_tests, $passes, $fails, $xfails) = ""; -if (!$NOTEST && !$BuildError) { - ($SingleSourceProgramsTable, $MultiSourceProgramsTable, $ExternalProgramsTable, - $all_tests, $passes, $fails, $xfails) = RunNightlyTest(); -} - -$endtime = `date "+20%y-%m-%d %H:%M:%S"`; - -# The last bit of logic is to remove the build and web dirs, after sending data -# to the server. - -############################################################## -# -# Accumulate the information to send to the server. -# -############################################################## - -if ( $VERBOSE ) { print "PREPARING LOGS TO BE SENT TO SERVER\n"; } - -if ( ! $NOUNAME ) { - $machine_data = "uname: ".`uname -a`. - "hardware: ".`uname -m`. - "os: ".`uname -sr`. - "name: ".`uname -n`. - "date: ".`date \"+20%y-%m-%d\"`. - "time: ".`date +\"%H:%M:%S\"`; -} else { - $machine_data = "uname: (excluded)\n". - "hardware: ".`uname -m`. - "os: ".`uname -sr`. - "name: $nickname\n". - "date: ".`date \"+20%y-%m-%d\"`. - "time: ".`date +\"%H:%M:%S\"`; -} - -# Get gcc version. -my $gcc_version_long = ""; -if ($GCCPATH ne "") { - $gcc_version_long = `$GCCPATH/gcc --version`; -} elsif ($ENV{"CC"}) { - $gcc_version_long = `$ENV{"CC"} --version`; -} else { - $gcc_version_long = `gcc --version`; -} -my $gcc_version = (split '\n', $gcc_version_long)[0]; - -# Get llvm-gcc target triple. -# -# FIXME: This shouldn't be hardwired to llvm-gcc. -my $llvmgcc_version_long = ""; -if ($LLVMGCCPATH ne "") { - $llvmgcc_version_long = `$LLVMGCCPATH/llvm-gcc -v 2>&1`; -} else { - $llvmgcc_version_long = `llvm-gcc -v 2>&1`; -} -(split '\n', $llvmgcc_version_long)[1] =~ /Target: (.+)/; -my $targetTriple = $1; - -# Logs. -my ($ConfigureLogData, $BuildLogData, $CheckoutLogData) = ""; -if ($ConfigMode == 0) { - $ConfigureLogData = ReadFile $ConfigureLog; - $BuildLogData = ReadFile $BuildLog; - $CheckoutLogData = ReadFile $COLog; -} - -# Checkout info. -my $CheckoutTime_Wall = GetRegex "^real ([0-9.]+)", $CheckoutLogData; -my $CheckoutTime_User = GetRegex "^user ([0-9.]+)", $CheckoutLogData; -my $CheckoutTime_Sys = GetRegex "^sys ([0-9.]+)", $CheckoutLogData; -my $CheckoutTime_CPU = $CVSCheckoutTime_User + $CVSCheckoutTime_Sys; - -# Configure info. -my $ConfigTimeU = GetRegex "^user ([0-9.]+)", $ConfigureLogData; -my $ConfigTimeS = GetRegex "^sys ([0-9.]+)", $ConfigureLogData; -my $ConfigTime = $ConfigTimeU+$ConfigTimeS; # ConfigTime = User+System -my $ConfigWallTime = GetRegex "^real ([0-9.]+)",$ConfigureLogData; -$ConfigTime=-1 unless $ConfigTime; -$ConfigWallTime=-1 unless $ConfigWallTime; - -# Build info. -my $BuildTimeU = GetRegex "^user ([0-9.]+)", $BuildLogData; -my $BuildTimeS = GetRegex "^sys ([0-9.]+)", $BuildLogData; -my $BuildTime = $BuildTimeU+$BuildTimeS; # BuildTime = User+System -my $BuildWallTime = GetRegex "^real ([0-9.]+)", $BuildLogData; -$BuildTime=-1 unless $BuildTime; -$BuildWallTime=-1 unless $BuildWallTime; - -if ( $VERBOSE ) { print "SEND THE DATA VIA THE POST REQUEST\n"; } - -my %hash_of_data = ( - 'machine_data' => $machine_data, - 'build_data' => $ConfigureLogData . $BuildLogData, - 'gcc_version' => $gcc_version, - 'nickname' => $nickname, - 'dejagnutime_wall' => "0.0", - 'dejagnutime_cpu' => "0.0", - 'cvscheckouttime_wall' => $CheckoutTime_Wall, - 'cvscheckouttime_cpu' => $CheckoutTime_CPU, - 'configtime_wall' => $ConfigWallTime, - 'configtime_cpu'=> $ConfigTime, - 'buildtime_wall' => $BuildWallTime, - 'buildtime_cpu' => $BuildTime, - 'buildstatus' => $BuildStatus, - 'singlesource_programstable' => $SingleSourceProgramsTable, - 'multisource_programstable' => $MultiSourceProgramsTable, - 'externalsource_programstable' => $ExternalProgramsTable, - 'llcbeta_options' => $llcbeta_options, - 'passing_tests' => $passes, - 'expfail_tests' => $xfails, - 'unexpfail_tests' => $fails, - 'all_tests' => $all_tests, - 'dejagnutests_results' => "Dejagnu skipped by user choice.", - 'dejagnutests_log' => "", - 'starttime' => $starttime, - 'endtime' => $endtime, - 'target_triple' => $targetTriple, - - # Unused, but left around for backwards compatibility. - 'warnings' => "", - 'cvsusercommitlist' => "", - 'cvsuserupdatelist' => "", - 'cvsaddedfiles' => "", - 'cvsmodifiedfiles' => "", - 'cvsremovedfiles' => "", - 'lines_of_code' => "", - 'cvs_file_count' => 0, - 'cvs_dir_count' => 0, - 'warnings_removed' => "", - 'warnings_added' => "", - 'new_tests' => "", - 'removed_tests' => "", - 'o_file_sizes' => "", - 'a_file_sizes' => "" -); - -# Write out the "...-sentdata.txt" file. -WriteSentData \%hash_of_data; - -if ($SUBMIT || !($SUBMITAUX eq "")) { - my $response = SendData $SUBMITSERVER,$SUBMITSCRIPT,\%hash_of_data; - if( $VERBOSE) { print "============================\n$response"; } -} else { - print "============================\n"; - foreach $x(keys %hash_of_data){ - print "$x => $hash_of_data{$x}\n"; - } -} - -############################################################## -# -# Remove the source tree... -# -############################################################## -system ( "$NICE rm -rf $BuildDir") - if (!$NOCHECKOUT and !$NOREMOVE and !$NOREMOVEATEND); -system ( "$NICE rm -rf $WebDir") - if (!$NOCHECKOUT and !$NOREMOVE and !$NOREMOVERESULTS);