Remove the --64-bit argument from scripts in favor of them detecting when 64-bit...
authormrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 14 Mar 2009 06:17:16 +0000 (06:17 +0000)
committermrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 14 Mar 2009 06:17:16 +0000 (06:17 +0000)
Reviewed by Timothy Hatcher.

The scripts will automatically target 64-bit if the system and hardware support it.  This can be
overridden by passing --32-bit to individual scripts, or using set-webkit-configuration --32-bit
to make the override persistent.

* Scripts/build-webkit: Remove architecture-related code.
* Scripts/gdb-safari: Remove architecture-related code, and clean up how the environment variables are passed to gdb.
* Scripts/run-javascriptcore-tests: Remove architecture-related code.
* Scripts/run-safari: Ditto.
* Scripts/run-webkit-tests: Ditto.
* Scripts/set-webkit-configuration: Handle the --32-bit and --64-bit arguments.  The --32-bit argument will set the
architecture preference to the 32-bit architecture of the machine.  The --64-bit argument will remove any architecture
override that is in effect so that 64-bit support will be automatically detected.
* Scripts/webkitdirs.pm: Add auto-detection of the best architecture for the machine, and the ability to override the
auto-detection.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@41696 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKitTools/ChangeLog
WebKitTools/Scripts/build-webkit
WebKitTools/Scripts/gdb-safari
WebKitTools/Scripts/run-javascriptcore-tests
WebKitTools/Scripts/run-safari
WebKitTools/Scripts/run-webkit-tests
WebKitTools/Scripts/set-webkit-configuration
WebKitTools/Scripts/webkitdirs.pm

index fd3776bec28c0b9b6d2848a3f45f0602caad158e..2a5b8030238089fcfb742ab35081997f1a9cd35c 100644 (file)
@@ -1,3 +1,24 @@
+2009-03-13  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Timothy Hatcher.
+
+        Remove the --64-bit argument from scripts in favor of them detecting when 64-bit should be preferred.
+
+        The scripts will automatically target 64-bit if the system and hardware support it.  This can be
+        overridden by passing --32-bit to individual scripts, or using set-webkit-configuration --32-bit
+        to make the override persistent.
+
+        * Scripts/build-webkit: Remove architecture-related code.
+        * Scripts/gdb-safari: Remove architecture-related code, and clean up how the environment variables are passed to gdb.
+        * Scripts/run-javascriptcore-tests: Remove architecture-related code.
+        * Scripts/run-safari: Ditto.
+        * Scripts/run-webkit-tests: Ditto.
+        * Scripts/set-webkit-configuration: Handle the --32-bit and --64-bit arguments.  The --32-bit argument will set the
+        architecture preference to the 32-bit architecture of the machine.  The --64-bit argument will remove any architecture
+        override that is in effect so that 64-bit support will be automatically detected.
+        * Scripts/webkitdirs.pm: Add auto-detection of the best architecture for the machine, and the ability to override the
+        auto-detection.
+
 2009-03-13  Anders Carlsson  <andersca@apple.com>
 
         Reviewed by Dan Bernstein.
index 1b04379883ac69d65ab26d76b4faa54eb3fac1ee..b1a04cffb50a8db3782006435872934bcbc51da1 100755 (executable)
@@ -61,8 +61,6 @@ my $workersSupport = (isAppleWebKit() || isGtk()); # Enable by default for Apple
 my $geolocationSupport = (isAppleMacWebKit() && !isTiger() && !isLeopard());
 my $showHelp = 0;
 my $clean = 0;
-my $buildUniversal = 0;
-my $buildSixtyFourBit = 0;
 my $threeDTransformsSupport = 0;
 
 my $programName = basename($0);
@@ -73,8 +71,6 @@ Usage: $programName [options] [options to pass to build system]
   --chromium                    Build the Chromium port on Mac/Win/Linux
   --clean                       Cleanup the build directory
   --gtk                         Build the GTK+ port
-  --universal                   Build 2-way universal (PPC and Intel 32-bit)
-  --64-bit                      Build 64-bit, combine with --universal to build 4-way universal
   --[no-]3d-transforms          Toggle 3D Transforms support (default: $threeDTransformsSupport)
   --[no-]channel-messaging          Toggle MessageChannel and MessagePort support (default: $channelMessagingSupport)
   --[no-]offline-web-applications   Toggle Offline Web Application Support (default : $offlineWebApplicationSupport)
@@ -121,8 +117,6 @@ GetOptions(
            'geolocation!' => \$geolocationSupport,
            'coverage!' => \$coverageSupport,
            'help' => \$showHelp,
-           'universal' => \$buildUniversal,
-           '64-bit' => \$buildSixtyFourBit,
            'clean' => \$clean);
 
 if ($showHelp) {
@@ -190,21 +184,6 @@ for my $dir (@projects, @otherDirs) {
 
 my @options = ();
 
-if ($buildSixtyFourBit && isAppleMacWebKit()) {
-    my $cpuVendor = `sysctl -n machdep.cpu.vendor`;
-    chomp $cpuVendor;
-
-    if ($buildUniversal) {
-        push(@options, "ARCHS=ppc ppc64 i386 x86_64");
-    } elsif ($cpuVendor eq "GenuineIntel") {
-        push(@options, "ARCHS=i386 x86_64");
-    } else {
-        push(@options, "ARCHS=ppc ppc64");
-    }
-} elsif ($buildUniversal && isAppleMacWebKit()) {
-    push(@options, "ARCHS=ppc i386");
-}
-
 # enable autotool options accordingly
 if (isGtk()) {
     push @options, autotoolsFlag($databaseSupport, "database");
index daff7f9ff680daaab2d85ddbfd813cbf87fb189c..97762121592e70a40e981be61ea1c5179236383a 100755 (executable)
 use strict;
 use File::Temp qw/:mktemp/;
 use FindBin;
-use Getopt::Long qw(:config pass_through);
 use lib $FindBin::Bin;
 use webkitdirs;
 
-my $programName = basename($0);
-my $showHelp = 0;
-my $run64Bit;
-
-my $usage = <<EOF;
-Usage: $programName [options]
-  --help                          Show this help message
-  --64-bit                        Run in 64-bit mode
-EOF
-
-my $getOptionsResult = GetOptions(
-    'help' => \$showHelp,
-    '64-bit!' => \$run64Bit
-);
-
-if (!$getOptionsResult || $showHelp) {
-    print STDERR $usage;
-    exit 1;
-}
-
-setRun64Bit($run64Bit);
 setConfiguration();
 my $productDir = productDir();
 my $safariPath = safariPath();
@@ -67,17 +45,9 @@ die "Can't find gdb executable. Is gdb installed?\n" unless -x $gdbPath;
 # Check to see that all the frameworks are built.
 checkFrameworks();
 
-# Put a command to set DYLD_FRAMEWORK_PATH in a temp file.
-# Also set WEBKIT_UNSET_DYLD_FRAMEWORK_PATH to YES in this environment, so that
-# executables launched by Safari don't inherit using the new frameworks.
-my ($fh, $path) = mkstemp("/tmp/gdb-safari-XXXX");
-print $fh "set env DYLD_FRAMEWORK_PATH $productDir\n";
-print $fh "set env WEBKIT_UNSET_DYLD_FRAMEWORK_PATH YES\n";
-
-my @architectureFlags = ("-arch", preferredArchitecture()) if isAppleMacWebKit() && !isTiger();
-# Start up Safari.
-print "Start Safari under gdb with DYLD_FRAMEWORK_PATH set to point to built WebKit in $productDir.\n";
-exec $gdbPath, "-x", $path, @architectureFlags, $safariPath or die;
+$ENV{DYLD_FRAMEWORK_PATH} = $productDir;
+$ENV{WEBKIT_UNSET_DYLD_FRAMEWORK_PATH} = 'YES';
 
-# Delete the temporary file.
-unlink0($fh, $path) or die "Error unlinking file $path safely"; 
+print "Starting Safari under gdb with DYLD_FRAMEWORK_PATH set to point to built WebKit in $productDir.\n";
+my @architectureFlags = ("-arch", architecture()) if !isTiger();
+exec $gdbPath, @architectureFlags, $safariPath or die;
index b52b3ee161f7ca765d45ffcda0caa78032379ef7..fd3c568af980ee0782a46a53b64b77c0abbb016a 100755 (executable)
@@ -37,26 +37,22 @@ use webkitdirs;
 use POSIX;
 
 # determine configuration
-my $configuration;
 setConfiguration();
-$configuration = configuration();
+my $configuration = configuration();
 
 my $jsDriverArgs = "";
 my $root; # intentionally left undefined
-my $run64Bit = 0;
 my $showHelp = 0;
 
 my $programName = basename($0);
 my $usage = <<EOF;
 Usage: $programName [options] [options to pass to build system]
   --help                        Show this help message
-  --64-bit                      Use the 64bit jsc binary
   --jsDriver-args=              A string of arguments to pass to jsDriver.pl
   --root=                       Path to pre-built root containing jsc
 EOF
 
 GetOptions(
-    '64-bit' => \$run64Bit,
     'j|jsDriver-args=s' => \$jsDriverArgs,
     'root=s' => \$root,
     'help' => \$showHelp
@@ -75,22 +71,10 @@ if ($showHelp) {
 
 setConfigurationProductDir(Cwd::abs_path($root)) if (defined($root));
 
-if (isAppleMacWebKit() && !isTiger()) {
-    my $preferredArch = preferredArchitecture("JavaScriptCore");
-    setRun64Bit($run64Bit);
-    my $arch = preferredArchitecture("JavaScriptCore");
-    if ($arch ne $preferredArch) {
-        push(@jsArgs, "-a", $arch);
-    }
-}
-
 if (!defined($root)){
     chdirWebKit();
 
     push(@buildArgs, argumentsForConfiguration());
-
-    my $arch = preferredArchitecture("JavaScriptCore");
-    push(@buildArgs, "ARCHS=$arch") if (isAppleMacWebKit());
     
     print "Running: build-jsc " . join(" ", @buildArgs) . "\n";
     my $buildResult = system "perl", "WebKitTools/Scripts/build-jsc", @buildArgs;
index f31fed3d36b6f61141b47b5a970ffb4f6f6bea42..d850a4a723456f6bcd28cdc38b86037e5b097e8a 100755 (executable)
 
 use strict;
 use FindBin;
-use Getopt::Long qw(:config pass_through);
 use lib $FindBin::Bin;
 use webkitdirs;
 
-my $programName = basename($0);
-my $showHelp = 0;
-my $run64Bit;
-
-my $usage = <<EOF;
-Usage: $programName [options]
-  --help                          Show this help message
-  --64-bit                        Run in 64-bit mode
-EOF
-
-my $getOptionsResult = GetOptions(
-    'help' => \$showHelp,
-    '64-bit!' => \$run64Bit
-);
-
-if (!$getOptionsResult || $showHelp) {
-    print STDERR $usage;
-    exit 1;
-}
-
-setRun64Bit($run64Bit);
 setConfiguration();
 
 # Check to see that all the frameworks are built.
index 02ca796d44daed318c65edb5721b85664d62dae6..0435b57667f45deaa2727a65644f91a85c686eaa 100755 (executable)
@@ -103,7 +103,6 @@ sub writeToFile($$);
 # Argument handling
 my $addPlatformExceptions = 0;
 my $complexText = 0;
-my $configuration = configuration();
 my $guardMalloc = '';
 my $httpdPort = 8000;
 my $httpdSSLPort = 8443;
@@ -134,7 +133,6 @@ my $reverseTests = 0;
 my $randomizeTests = 0;
 my $mergeDepth;
 my @leaksFilenames;
-my $run64Bit;
 
 # Default to --no-http for Qt, Gtk and wx for now.
 $testHTTP = 0 if (isQt() || isGtk() || isWx());
@@ -209,15 +207,12 @@ Usage: $programName [options] [testdir|testpath ...]
   --valgrind                      Run DumpRenderTree inside valgrind (Qt/Linux only)
   -v|--verbose                    More verbose output (overrides --quiet)
   -m|--merge-leak-depth arg       Merges leak callStacks and prints the number of unique leaks beneath a callstack depth of arg.  Defaults to 5.
-  --64-bit                        run in 64bit mode
 EOF
 
-# Process @ARGV for configuration switches before calling GetOptions()
-$configuration = passedConfiguration() || configuration();
+setConfiguration();
 
 my $getOptionsResult = GetOptions(
     'complex-text' => \$complexText,
-    'c|configuration=s' => \$configuration,
     'guard-malloc|g' => \$guardMalloc,
     'help' => \$showHelp,
     'http!' => \$testHTTP,
@@ -247,7 +242,6 @@ my $getOptionsResult = GetOptions(
     'root=s' => \$root,
     'add-platform-exceptions' => \$addPlatformExceptions,
     'merge-leak-depth|m:5' => \$mergeDepth,
-    '64-bit!' => \$run64Bit
 );
 
 if (!$getOptionsResult || $showHelp) {
@@ -260,7 +254,7 @@ my $skippedOnly = $treatSkipped eq "only";
 
 !$skippedOnly || @ARGV == 0 or die "--skipped=only cannot be used when tests are specified on the command line.";
 
-setConfiguration($configuration);
+my $configuration = configuration();
 
 $testsPerDumpTool = 1000 if !$testsPerDumpTool;
 
@@ -277,7 +271,6 @@ setConfigurationProductDir(Cwd::abs_path($root)) if (defined($root));
 my $productDir = productDir();
 $productDir .= "/bin" if isQt();
 $productDir .= "/Programs" if isGtk();
-setRun64Bit($run64Bit);
 
 chdirWebKit();
 
@@ -285,11 +278,6 @@ if (!defined($root)) {
     # Push the parameters to build-dumprendertree as an array
     my @args = argumentsForConfiguration();
 
-    if (isAppleMacWebKit()) {
-        my $arch = preferredArchitecture();
-        push(@args, "ARCHS=$arch");
-    }
-
     my $buildResult = system "WebKitTools/Scripts/build-dumprendertree", @args;
     if ($buildResult) {
         print STDERR "Compiling DumpRenderTree failed!\n";
@@ -1246,13 +1234,8 @@ sub openDumpTool()
         setPathForRunningWebKitApp(\%ENV) if isCygwin();
     }
 
-    exportArchPreference();
+    my @args = ($dumpTool, @toolArgs);
 
-    my @args = @toolArgs;
-    unshift @args, $dumpTool;
-    if (isAppleMacWebKit and !isTiger()) {
-        unshift @args, "arch";
-    }
     if ($useValgrind) {
         unshift @args, "valgrind";
     } 
index 87351402a2b652f62c3129bf0deb84118210064e..49922566c74f786d9835d90909f77ac75e1e5c0e 100755 (executable)
@@ -31,11 +31,49 @@ use FindBin;
 use lib $FindBin::Bin;
 use webkitdirs;
 
+my $programName = basename($0);
+my $usage = <<EOF;
+Usage: $programName [options]
+  --32-bit                Set the default architecture to 32-bit
+  --64-bit                Set the default architecture to 64-bit
+  --debug                 Set the default configuration to debug
+  --release               Set the default configuration to release
+EOF
+
 my $configuration = passedConfiguration();
-die "Please specify either --debug or --release.\n" if !$configuration;
+my $architecture = passedArchitecture();
+
+if (!$architecture) {
+    # Handle --64-bit explicitly here, as we don't want our other scripts to accept it
+    for my $i (0 .. $#ARGV) {
+        my $opt = $ARGV[$i];
+        if ($opt =~ /^--64-bit$/i) {
+            splice(@ARGV, $i, 1);
+            $architecture = 'x86_64';
+        }
+    }
+}
+
+if (!$configuration && !$architecture) {
+    print STDERR $usage;
+    exit 1;
+}
 
 my $baseProductDir = baseProductDir();
 system "mkdir", "-p", "$baseProductDir";
-open CONFIGURATION, ">", "$baseProductDir/Configuration" or die;
-print CONFIGURATION $configuration;
-close CONFIGURATION;
+
+if ($configuration) {
+    open CONFIGURATION, ">", "$baseProductDir/Configuration" or die;
+    print CONFIGURATION $configuration;
+    close CONFIGURATION;
+}
+
+if ($architecture) {
+    if ($architecture ne "x86_64") {
+        open ARCHITECTURE, ">", "$baseProductDir/Architecture" or die;
+        print ARCHITECTURE $architecture;
+        close ARCHITECTURE;
+    } else {
+        unlink "$baseProductDir/Architecture";
+    }
+}
index 6c8eecd64a57b71aa7c2ed47d4e5fc3e1684114a..06949c8e8661dc9aab67cacd9285ae3bced6f763 100644 (file)
@@ -45,6 +45,7 @@ BEGIN {
 
 our @EXPORT_OK;
 
+my $architecture;
 my $baseProductDir;
 my @baseProductDirOption;
 my $configuration;
@@ -58,7 +59,6 @@ my $isGtk;
 my $isWx;
 my @wxArgs;
 my $isChromium;
-my $forceRun64Bit;
 
 # Variables for Win32 support
 my $vcBuildPath;
@@ -167,13 +167,39 @@ sub determineConfiguration
     }
 }
 
+sub determineArchitecture
+{
+    return if defined $architecture;
+    return unless isAppleMacWebKit();
+
+    determineBaseProductDir();
+    if (open ARCHITECTURE, "$baseProductDir/Architecture") {
+        $architecture = <ARCHITECTURE>;
+        close ARCHITECTURE;
+    }
+    if ($architecture) {
+        chomp $architecture;
+    } else {
+        if (isTiger() or isLeopard()) {
+            $architecture = `arch`;
+        } else {
+            my $supports64Bit = `sysctl -n hw.optional.x86_64`;
+            chomp $supports64Bit;
+            $architecture = $supports64Bit ? 'x86_64' : `arch`;
+        }
+        chomp $architecture;
+    }
+}
+
 sub argumentsForConfiguration()
 {
     determineConfiguration();
+    determineArchitecture();
 
     my @args = ();
     push(@args, '--debug') if $configuration eq "Debug";
     push(@args, '--release') if $configuration eq "Release";
+    push(@args, '--32-bit') if $architecture ne "x86_64";
     push(@args, '--qt') if isQt();
     push(@args, '--gtk') if isGtk();
     push(@args, '--wx') if isWx();
@@ -264,7 +290,8 @@ sub XcodeOptions
 {
     determineBaseProductDir();
     determineConfiguration();
-    return (@baseProductDirOption, "-configuration", $configuration);
+    determineArchitecture();
+    return (@baseProductDirOption, "-configuration", $configuration, "ARCHS=$architecture");
 }
 
 sub XcodeOptionString
@@ -329,6 +356,8 @@ sub passedConfiguration
 
 sub setConfiguration
 {
+    setArchitecture();
+
     if (my $config = shift @_) {
         $configuration = $config;
         return;
@@ -338,6 +367,52 @@ sub setConfiguration
     $configuration = $passedConfiguration if $passedConfiguration;
 }
 
+
+my $passedArchitecture;
+my $searchedForPassedArchitecture;
+sub determinePassedArchitecture
+{
+    return if $searchedForPassedArchitecture;
+    $searchedForPassedArchitecture = 1;
+
+    return unless isAppleMacWebKit();
+
+    for my $i (0 .. $#ARGV) {
+        my $opt = $ARGV[$i];
+        if ($opt =~ /^--32-bit$/i) {
+            splice(@ARGV, $i, 1);
+            $passedArchitecture = `arch`;
+            chomp $passedArchitecture;
+            return;
+        }
+    }
+    $passedArchitecture = undef;
+}
+
+sub passedArchitecture
+{
+    determinePassedArchitecture();
+    return $passedArchitecture;
+}
+
+sub architecture()
+{
+    determineArchitecture();
+    return $architecture;
+}
+
+sub setArchitecture
+{
+    if (my $arch = shift @_) {
+        $architecture = $arch;
+        return;
+    }
+
+    determinePassedArchitecture();
+    $architecture = $passedArchitecture if $passedArchitecture;
+}
+
+
 sub safariPathFromSafariBundle
 {
     my ($safariBundle) = @_;
@@ -1145,9 +1220,8 @@ sub runSafari
         print "Starting Safari with DYLD_FRAMEWORK_PATH set to point to built WebKit in $productDir.\n";
         $ENV{DYLD_FRAMEWORK_PATH} = $productDir;
         $ENV{WEBKIT_UNSET_DYLD_FRAMEWORK_PATH} = "YES";
-        exportArchPreference();
-        if (!isTiger()) {
-            return system "arch", safariPath(), @ARGV;
+        if (architecture()) {
+            return system "arch", "-" . architecture(), safariPath(), @ARGV;
         } else {
             return system safariPath(), @ARGV;
         }
@@ -1170,38 +1244,4 @@ sub runSafari
     return 1;
 }
 
-sub setRun64Bit($)
-{
-    ($forceRun64Bit) = @_;
-}
-
-sub preferredArchitecture
-{
-    return unless isAppleMacWebKit();
-    
-    my $framework = shift;
-    $framework = "WebKit" if !defined($framework);
-
-    my $currentArchitecture = `arch`;
-    chomp($currentArchitecture);
-
-    my $run64Bit = 0;
-    if (!defined($forceRun64Bit)) {
-        my $frameworkPath = builtDylibPathForName($framework);
-        die "Couldn't find path for $framework" if !defined($frameworkPath);
-        # The binary is 64-bit if one of the architectures it contains has "64" in the name
-        $run64Bit = `lipo -info "$frameworkPath"` =~ /(are|architecture):.*64/;
-    }
-
-    if ($forceRun64Bit or $run64Bit) {
-        return ($currentArchitecture eq "i386") ? "x86_64" : "ppc64";
-    }
-    return $currentArchitecture;
-}
-
-sub exportArchPreference
-{
-    $ENV{ARCHPREFERENCE} = preferredArchitecture() if isAppleMacWebKit();
-}
-
 1;