Francois Gouget : testbot/build: Automatically use all the CPUs for builds.
Alexandre Julliard
julliard at winehq.org
Wed Oct 10 14:52:51 CDT 2012
Module: tools
Branch: master
Commit: 64f949e902377278c6882c2b356eb66368b87d02
URL: http://source.winehq.org/git/tools.git/?a=commit;h=64f949e902377278c6882c2b356eb66368b87d02
Author: Francois Gouget <fgouget at codeweavers.com>
Date: Wed Oct 10 01:14:43 2012 +0200
testbot/build: Automatically use all the CPUs for builds.
---
testbot/bin/BuildSingleTest.pl | 22 ++++++++++++++++++----
testbot/bin/Reconfig.pl | 26 ++++++++++++++++++++------
2 files changed, 38 insertions(+), 10 deletions(-)
diff --git a/testbot/bin/BuildSingleTest.pl b/testbot/bin/BuildSingleTest.pl
index a8adc4e..af28f88 100755
--- a/testbot/bin/BuildSingleTest.pl
+++ b/testbot/bin/BuildSingleTest.pl
@@ -148,6 +148,18 @@ sub ApplyPatch
$NeedConfigure);
}
+my $ncpus;
+sub CountCPUs()
+{
+ if (open(my $fh, "<", "/proc/cpuinfo"))
+ {
+ # Linux
+ map { $ncpus++ if (/^processor/); } <$fh>;
+ close($fh);
+ }
+ $ncpus ||= 1;
+}
+
sub BuildTestExecutable
{
my ($BaseName, $PatchType, $Bits, $NeedConfigure, $NeedMakefile,
@@ -178,7 +190,7 @@ sub BuildTestExecutable
return !1;
}
- system("make -C $DataDir/build-mingw${Bits}/include " .
+ system("make -j$ncpus -C $DataDir/build-mingw${Bits}/include " .
">> $LogDir/BuildSingleTest.log 2>&1");
if ($? != 0)
{
@@ -197,7 +209,7 @@ sub BuildTestExecutable
}
else
{
- system("make -C $DataDir/build-mingw${Bits}/$PatchType/$BaseName " .
+ system("make -j$ncpus -C $DataDir/build-mingw${Bits}/$PatchType/$BaseName " .
"lib$BaseName.a >> $LogDir/BuildSingleTest.log 2>&1");
if ($? != 0)
{
@@ -220,7 +232,7 @@ sub BuildTestExecutable
if ($NeedBuildDeps)
{
InfoMsg "Making build dependencies\n";
- system("cd $DataDir/build-mingw${Bits}; make __builddeps__ >> $LogDir/BuildSingleTest.log 2>&1");
+ system("cd $DataDir/build-mingw${Bits}; make -j$ncpus __builddeps__ >> $LogDir/BuildSingleTest.log 2>&1");
if ($? != 0)
{
LogMsg "Making build dependencies failed\n";
@@ -238,7 +250,7 @@ sub BuildTestExecutable
unlink($TestExecutable);
InfoMsg "Making test executable\n";
- system("make -C $TestsDir >> $LogDir/BuildSingleTest.log 2>&1");
+ system("make -j$ncpus -C $TestsDir >> $LogDir/BuildSingleTest.log 2>&1");
if ($? != 0)
{
LogMsg "Make failed\n";
@@ -334,6 +346,8 @@ if ($NeedMakefile < 0)
exit(1);
}
+CountCPUs();
+
if ($Run32 && ! BuildTestExecutable($BaseName, $PatchType, 32,
$NeedConfigure, 0 < $NeedMakefile,
$NeedMakeInclude, $NeedBuildDeps,
diff --git a/testbot/bin/Reconfig.pl b/testbot/bin/Reconfig.pl
index f2e07a3..fe789f0 100755
--- a/testbot/bin/Reconfig.pl
+++ b/testbot/bin/Reconfig.pl
@@ -63,15 +63,27 @@ sub GitPull
return 1;
}
+my $ncpus;
+sub CountCPUs()
+{
+ if (open(my $fh, "<", "/proc/cpuinfo"))
+ {
+ # Linux
+ map { $ncpus++ if (/^processor/); } <$fh>;
+ close($fh);
+ }
+ $ncpus ||= 1;
+}
+
sub BuildNative
{
mkdir "$DataDir/build-native" if (! -d "$DataDir/build-native");
system("cd $DataDir/build-native && " .
"rm -rf * && " .
"../wine-git/configure --enable-win64 --without-x --without-freetype " .
- ">> $LogDir/Reconfig.log 2>&1 &&" .
- "make depend >> $LogDir/Reconfig.log 2>&1 &&" .
- "make __tooldeps__ >> $LogDir/Reconfig.log 2>&1");
+ ">> $LogDir/Reconfig.log 2>&1 && " .
+ "make -j$ncpus depend >> $LogDir/Reconfig.log 2>&1 && " .
+ "make -j$ncpus __tooldeps__ >> $LogDir/Reconfig.log 2>&1");
if ($? != 0)
{
@@ -91,9 +103,9 @@ sub BuildCross
system("cd $DataDir/build-mingw$Bits && " .
"rm -rf * && " .
"../wine-git/configure --host=$Host --with-wine-tools=../build-native " .
- "--without-x --without-freetype >> $LogDir/Reconfig.log 2>&1 &&" .
- "make depend >> $LogDir/Reconfig.log 2>&1 &&" .
- "make programs/winetest >> $LogDir/Reconfig.log 2>&1");
+ "--without-x --without-freetype >> $LogDir/Reconfig.log 2>&1 && " .
+ "make -j$ncpus depend >> $LogDir/Reconfig.log 2>&1 && " .
+ "make -j$ncpus programs/winetest >> $LogDir/Reconfig.log 2>&1");
if ($? != 0)
{
LogMsg "Build cross ($Bits bits) failed\n";
@@ -114,6 +126,8 @@ if (! GitPull())
exit(1);
}
+CountCPUs();
+
if (! BuildNative())
{
exit(1);
More information about the wine-cvs
mailing list