Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """A module to add ninja support to cr.""" | 5 """A module to add ninja support to cr.""" |
| 6 | 6 |
| 7 import os | 7 import os |
| 8 | 8 |
| 9 import cr | 9 import cr |
| 10 | 10 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 23 GOMA_DIR=os.path.join('{GOOGLE_CODE}', 'goma'), | 23 GOMA_DIR=os.path.join('{GOOGLE_CODE}', 'goma'), |
| 24 ) | 24 ) |
| 25 # A placeholder for the system detected configuration | 25 # A placeholder for the system detected configuration |
| 26 DETECTED = cr.Config('DETECTED') | 26 DETECTED = cr.Config('DETECTED') |
| 27 | 27 |
| 28 def __init__(self): | 28 def __init__(self): |
| 29 super(NinjaBuilder, self).__init__() | 29 super(NinjaBuilder, self).__init__() |
| 30 self._targets = [] | 30 self._targets = [] |
| 31 | 31 |
| 32 def Build(self, context, targets, arguments): | 32 def Build(self, context, targets, arguments): |
| 33 # Make sure Goma is started, if Ninja is set to use it. | |
| 34 # This may be redundant, but it currently improves reliability. | |
| 35 try: | |
|
ian_cottrell
2014/01/09 17:00:21
I would change how you build paths.
Use
NINJA_BU
johnme
2014/01/09 19:06:11
Done.
| |
| 36 goma_dir = context.Get('GOMA_DIR', raise_errors=True) | |
| 37 build_dir = context.Get('CR_BUILD_DIR', raise_errors=True) | |
| 38 build_ninja = os.path.join(build_dir, 'build.ninja') | |
| 39 if os.path.exists(build_ninja): | |
| 40 goma_cc = 'cc = {} $\n'.format(os.path.join(goma_dir, 'gomacc')) | |
| 41 with open(build_ninja, 'r') as f: | |
|
ian_cottrell
2014/01/09 17:00:21
This is vile, but I don't have a better suggestion
| |
| 42 if f.readline() == goma_cc: | |
| 43 # Goma is active, so make sure it's started. | |
| 44 cr.Host.ExecuteSilently( | |
| 45 context, | |
| 46 os.path.join('{GOMA_DIR}', 'goma_ctl.py'), | |
| 47 'ensure_start' | |
| 48 ) | |
| 49 except KeyError: | |
| 50 pass | |
| 51 | |
| 52 | |
| 33 build_arguments = [target.build_target for target in targets] | 53 build_arguments = [target.build_target for target in targets] |
| 34 build_arguments.extend(arguments) | 54 build_arguments.extend(arguments) |
| 35 cr.Host.Execute( | 55 cr.Host.Execute( |
| 36 context, | 56 context, |
| 37 '{NINJA_BINARY}', | 57 '{NINJA_BINARY}', |
| 38 '-C{CR_BUILD_DIR}', | 58 '-C{CR_BUILD_DIR}', |
| 39 '-j{NINJA_JOBS}', | 59 '-j{NINJA_JOBS}', |
| 40 '-l{NINJA_PROCESSORS}', | 60 '-l{NINJA_PROCESSORS}', |
| 41 *build_arguments | 61 *build_arguments |
| 42 ) | 62 ) |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 77 return self._targets | 97 return self._targets |
| 78 | 98 |
| 79 @classmethod | 99 @classmethod |
| 80 def DetectNinja(cls): | 100 def DetectNinja(cls): |
| 81 # TODO(iancottrell): If we can't detect ninja, we should be disabled. | 101 # TODO(iancottrell): If we can't detect ninja, we should be disabled. |
| 82 ninja_binaries = cr.Host.SearchPath('ninja') | 102 ninja_binaries = cr.Host.SearchPath('ninja') |
| 83 if ninja_binaries: | 103 if ninja_binaries: |
| 84 cls.DETECTED.Set(NINJA_BINARY=ninja_binaries[0]) | 104 cls.DETECTED.Set(NINJA_BINARY=ninja_binaries[0]) |
| 85 | 105 |
| 86 NinjaBuilder.DetectNinja() | 106 NinjaBuilder.DetectNinja() |
| OLD | NEW |