1563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#!/usr/bin/perl -w 2563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# Copyright (C) 2007 Apple Inc. All rights reserved. 4563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# Copyright (C) 2007 Eric Seidel <eric@webkit.org> 5563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# 6563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# Redistribution and use in source and binary forms, with or without 7563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# modification, are permitted provided that the following conditions 8563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# are met: 9563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# 1. Redistributions of source code must retain the above copyright 10563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# notice, this list of conditions and the following disclaimer. 11563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# 2. Redistributions in binary form must reproduce the above copyright 12563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# notice, this list of conditions and the following disclaimer in the 13563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# documentation and/or other materials provided with the distribution. 14563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# 15563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 16563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 19563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 23563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 27563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse strict; 28563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse File::Spec; 29563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse FindBin; 30563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse Getopt::Long qw(:config pass_through); 31563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse lib $FindBin::Bin; 32563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse webkitdirs; 33563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse POSIX; 34563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 35563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# determine configuration, but default to "Release" instead of last-used configuration to match run-sunspider 36563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarksetConfiguration("Release"); 37563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarksetConfiguration(); 38563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $configuration = configuration(); 39563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 40563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $root; 41563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $showHelp = 0; 42d0825bca7fe65beaee391d30da42e937db621564Steve Blockmy $suite = ""; 430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochmy $ubench = 0; 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochmy $v8 = 0; 45d0825bca7fe65beaee391d30da42e937db621564Steve Blockmy $parseonly = 0; 46563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 47563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $programName = basename($0); 48563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $usage = <<EOF; 49563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkUsage: $programName [options] FILE FILE 50563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark --help Show this help message 51563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark --root Path to root tools build 52d0825bca7fe65beaee391d30da42e937db621564Steve Block --suite Select a specific benchmark suite. The default is sunspider-0.9.1 53d0825bca7fe65beaee391d30da42e937db621564Steve Block --ubench Use microbenchmark suite instead of regular tests. Same as --suite=ubench 54d0825bca7fe65beaee391d30da42e937db621564Steve Block --v8-suite Use the V8 benchmark suite. Same as --suite=v8-v4 55d0825bca7fe65beaee391d30da42e937db621564Steve Block --parse-only Use the parse-only benchmark suite. Same as --suite=parse-only 56563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkEOF 57563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 58a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochGetOptions('root=s' => sub { my ($argName, $value) = @_; setConfigurationProductDir(Cwd::abs_path($value)); $root = $value; }, 59d0825bca7fe65beaee391d30da42e937db621564Steve Block 'suite=s' => \$suite, 600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 'ubench' => \$ubench, 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 'v8' => \$v8, 62d0825bca7fe65beaee391d30da42e937db621564Steve Block 'parse-only' => \$parseonly, 63563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 'help' => \$showHelp); 64563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 65563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkif ($showHelp) { 66563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print STDERR $usage; 67563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark exit 1; 68563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 69563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 70563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksub buildJSC 71563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 72563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!defined($root)){ 73563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark chdirWebKit(); 74f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch my $buildResult = system currentPerlPath(), "Tools/Scripts/build-jsc", "--" . $configuration; 75563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ($buildResult) { 76563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print STDERR "Compiling jsc failed!\n"; 77563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark exit WEXITSTATUS($buildResult); 78563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 79563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 80563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 81563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 82563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksub setupEnvironmentForExecution($) 83563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 84563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my ($productDir) = @_; 85563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print "Starting sunspider-compare-results with DYLD_FRAMEWORK_PATH set to point to built JavaScriptCore in $productDir.\n"; 86563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $ENV{DYLD_FRAMEWORK_PATH} = $productDir; 87563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark # FIXME: Other platforms may wish to augment this method to use LD_LIBRARY_PATH, etc. 88563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 89563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochsub pathToBuiltJSC($) 91563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 92563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my ($productDir) = @_; 93563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my $jscName = "jsc"; 944576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang $jscName .= "_debug" if configurationForVisualStudio() eq "Debug_All"; 95563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "$productDir/$jscName"; 96563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 97563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochsub pathToSystemJSC() 990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch my $path = "/System/Library/Frameworks/JavaScriptCore.framework/Resources/jsc"; 1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (-f $path) { 1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return $path; 1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return undef; 1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochsub pathToJSC() 1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch my $path = pathToSystemJSC(); 1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return $path if defined $path; 111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch buildJSC(); 1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 114cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block my $productDir = jscProductDir(); 1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch setupEnvironmentForExecution($productDir); 1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return pathToBuiltJSC($productDir); 1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochmy $jscPath = pathToJSC(); 121563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkchdirWebKit(); 122cad810f21b803229eb11403f9209855525a25d57Steve Blockchdir("PerformanceTests/SunSpider"); 123563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochmy @args = ("--shell", $jscPath); 125563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# This code could be removed if we chose to pass extra args to sunspider instead of Xcode 126d0825bca7fe65beaee391d30da42e937db621564Steve Blockpush @args, "--suite=${suite}" if $suite; 1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpush @args, "--ubench" if $ubench; 1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpush @args, "--v8" if $v8; 129d0825bca7fe65beaee391d30da42e937db621564Steve Blockpush @args, "--parse-only" if $parseonly; 130563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 131cad810f21b803229eb11403f9209855525a25d57Steve Block@ARGV = map { File::Spec->rel2abs($_) } @ARGV; 132cad810f21b803229eb11403f9209855525a25d57Steve Block 133231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockexec currentPerlPath(), "./sunspider-compare-results", @args, @ARGV; 134