| Index: tools/build.py
|
| diff --git a/tools/build.py b/tools/build.py
|
| index 2645ef564074b82af237554d49f8005c5adba6ab..48062b34597240cec45a3f30a7ad9d1c22d46257 100755
|
| --- a/tools/build.py
|
| +++ b/tools/build.py
|
| @@ -427,6 +427,38 @@ def UseGoma(out_dir):
|
| return 'use_goma = true' in open(args_gn, 'r').read()
|
|
|
|
|
| +# Try to start goma, but don't bail out if we can't. Instead print an error
|
| +# message, and let the build fail with its own error messages as well.
|
| +def EnsureGomaStarted(out_dir):
|
| + args_gn_path = os.path.join(out_dir, 'args.gn')
|
| + goma_dir = None
|
| + with open(args_gn_path, 'r') as fp:
|
| + for line in fp:
|
| + if 'goma_dir' in line:
|
| + words = line.split()
|
| + goma_dir = words[2][1:-1] # goma_dir = "/path/to/goma"
|
| + if not goma_dir:
|
| + print 'Could not find goma for ' + out_dir
|
| + return False
|
| + if not os.path.exists(goma_dir) or not os.path.isdir(goma_dir):
|
| + print 'Could not find goma at ' + goma_dir
|
| + return False
|
| + goma_ctl = os.path.join(goma_dir, 'goma_ctl.py')
|
| + goma_ctl_command = [
|
| + 'python',
|
| + goma_ctl,
|
| + 'ensure_start',
|
| + ]
|
| + process = subprocess.Popen(goma_ctl_command)
|
| + process.wait()
|
| + if process.returncode != 0:
|
| + print ("Tried to run goma_ctl.py, but it failed. Try running it manually: "
|
| + + "\n\t" + ' '.join(goma_ctl_command))
|
| + return False
|
| + return True
|
| +
|
| +
|
| +
|
| def BuildNinjaCommand(options, target, target_os, mode, arch):
|
| out_dir = utils.GetBuildRoot(HOST_OS, mode, arch, target_os)
|
| if ShouldRunGN(out_dir):
|
| @@ -435,7 +467,12 @@ def BuildNinjaCommand(options, target, target_os, mode, arch):
|
| if options.verbose:
|
| command += ['-v']
|
| if UseGoma(out_dir):
|
| - command += ['-j1000']
|
| + if EnsureGomaStarted(out_dir):
|
| + command += ['-j1000']
|
| + else:
|
| + # If we couldn't ensure that goma is started, let the build start, but
|
| + # slowly so we can see any helpful error messages that pop out.
|
| + command += ['-j1']
|
| command += [target]
|
| return command
|
|
|
|
|