[1/3] testbot/build: Automatically use all the CPUs for builds.
Francois Gouget
fgouget at codeweavers.com
Tue Oct 9 18:14:43 CDT 2012
---
If a build VM is configured with more than one CPU it's because the VM
creator intended them to be used.
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);
--
1.7.10.4
More information about the wine-patches
mailing list