Index: mojo/tools/mojob.py |
diff --git a/mojo/tools/mojob.py b/mojo/tools/mojob.py |
index ca244af1d5c73b5484c96385fdcda464538957fc..a0384f19ab37553d41e6c86795fdbf5b86d7a2f5 100755 |
--- a/mojo/tools/mojob.py |
+++ b/mojo/tools/mojob.py |
@@ -23,48 +23,87 @@ def args_to_config(args): |
target_os = Config.OS_ANDROID |
elif args.chromeos: |
target_os = Config.OS_CHROMEOS |
- return Config(target_os=target_os, is_debug=args.debug) |
- |
-def get_out_dir(args): |
- paths = Paths(config=args_to_config(args)) |
+ additional_args = {} |
+ |
+ if 'clang' in args: |
+ if args.clang is not None: |
+ # If --clang/--gcc is specified, use that. |
+ additional_args['is_clang'] = args.clang |
+ else: |
+ # Otherwise, use the default (use clang for everything except Android and |
+ # Windows). |
+ additional_args['is_clang'] = (target_os not in (Config.OS_ANDROID, |
+ Config.OS_WINDOWS)) |
+ |
+ if 'asan' in args and args.asan: |
+ additional_args['sanitizer'] = Config.SANITIZER_ASAN |
+ |
+ # Additional non-standard config entries: |
+ |
+ if 'goma' in args: |
+ goma_dir = os.environ.get('GOMA_DIR') |
+ goma_home_dir = os.path.join(os.getenv('HOME', ''), 'goma') |
+ if args.goma and goma_dir: |
+ additional_args['use_goma'] = True |
+ additional_args['goma_dir'] = goma_dir |
+ elif args.goma and os.path.exists(goma_home_dir): |
+ additional_args['use_goma'] = True |
+ additional_args['goma_dir'] = goma_home_dir |
+ else: |
+ additional_args['use_goma'] = False |
+ additional_args['goma_dir'] = None |
+ |
+ if 'with_dart' in args: |
+ additional_args['with_dart'] = args.with_dart |
+ |
+ if 'builder_name' in args: |
+ additional_args['builder_name'] = args.builder_name |
+ if 'build_number' in args: |
+ additional_args['build_number'] = args.build_number |
+ if 'master_name' in args: |
+ additional_args['master_name'] = args.master_name |
+ if 'test_results_server' in args: |
+ additional_args['test_results_server'] = args.test_results_server |
+ |
+ return Config(target_os=target_os, is_debug=args.debug, **additional_args) |
+ |
+ |
+def get_out_dir(config): |
+ paths = Paths(config) |
return paths.SrcRelPath(paths.build_dir) |
-def sync(args): |
+def sync(config): |
# pylint: disable=W0613 |
return subprocess.call(['gclient', 'sync']) |
-def gn(args): |
+def gn(config): |
command = ['gn', 'gen'] |
gn_args = [] |
- gn_args.append('is_debug=' + ('true' if args.debug else 'false')) |
- gn_args.append('is_asan=' + ('true' if args.asan else 'false')) |
- gn_args.append('is_clang=' + ('true' if args.clang else 'false')) |
+ gn_args.append('is_debug=' + ('true' if config.is_debug else 'false')) |
+ gn_args.append('is_asan=' + ('true' if config.sanitizer == |
+ Config.SANITIZER_ASAN else 'false')) |
+ gn_args.append('is_clang=' + ('true' if config.is_clang else 'false')) |
- goma_dir = os.environ.get('GOMA_DIR') |
- goma_home_dir = os.path.join(os.getenv('HOME', ''), 'goma') |
- if args.goma and goma_dir: |
- gn_args.append('use_goma=true') |
- gn_args.append(r'''goma_dir=\"%s\"''' % goma_dir) |
- elif args.goma and os.path.exists(goma_home_dir): |
+ if config.values["use_goma"]: |
gn_args.append('use_goma=true') |
- gn_args.append(r'''goma_dir=\"%s\"''' % goma_home_dir) |
+ gn_args.append(r'''goma_dir=\"%s\"''' % config.values["goma_dir"]) |
else: |
gn_args.append('use_goma=false') |
- if args.with_dart: |
+ if config.values["with_dart"]: |
gn_args.append('mojo_use_dart=true') |
- if args.android: |
+ if config.target_os == Config.OS_ANDROID: |
gn_args.append(r'''os=\"android\" cpu_arch=\"arm\"''') |
- elif args.chromeos: |
+ elif config.target_os == Config.OS_CHROMEOS: |
gn_args.append(r'''os=\"chromeos\" ui_base_build_ime=false |
use_system_harfbuzz=false''') |
- out_dir = get_out_dir(args) |
+ out_dir = get_out_dir(config) |
command.append(out_dir) |
command.append('--args="%s"' % ' '.join(gn_args)) |
@@ -84,8 +123,8 @@ def get_gn_arg_value(out_dir, arg): |
return '' |
-def build(args): |
- out_dir = get_out_dir(args) |
+def build(config): |
+ out_dir = get_out_dir(config) |
print 'Building in %s ...' % out_dir |
if get_gn_arg_value(out_dir, 'use_goma') == 'true': |
# Use the configured goma directory. |
@@ -104,8 +143,8 @@ def build(args): |
return subprocess.call(['ninja', '-C', out_dir, 'root']) |
-def run_unittests(args): |
- out_dir = get_out_dir(args) |
+def run_unittests(config): |
+ out_dir = get_out_dir(config) |
print 'Running unit tests in %s ...' % out_dir |
command = ['python'] |
if platform.system() == 'Linux': |
@@ -118,8 +157,8 @@ def run_unittests(args): |
command.append('mojob_test_successes') |
return subprocess.call(command) |
-def run_apptests(args): |
- out_dir = get_out_dir(args) |
+def run_apptests(config): |
+ out_dir = get_out_dir(config) |
print 'Running application tests in %s ...' % out_dir |
command = ['python'] |
if platform.system() == 'Linux': |
@@ -131,8 +170,8 @@ def run_apptests(args): |
command.append(out_dir) |
return subprocess.call(command) |
-def run_skytests(args): |
- out_dir = get_out_dir(args) |
+def run_skytests(config): |
+ out_dir = get_out_dir(config) |
if platform.system() != 'Linux': |
return 0 |
@@ -141,26 +180,26 @@ def run_skytests(args): |
command.append(out_dir) |
command.append('sky/tools/test_sky') |
command.append('-t') |
- command.append('Debug' if args.debug else 'Release') |
+ command.append('Debug' if config.is_debug else 'Release') |
command.append('--no-new-test-results') |
command.append('--no-show-results') |
command.append('--verbose') |
- if args.builder_name: |
+ if config.values["builder_name"]: |
command.append('--builder-name') |
- command.append(args.builder_name) |
+ command.append(config.values["builder_name"]) |
- if args.build_number: |
+ if config.values["build_number"]: |
command.append('--build-number') |
- command.append(args.build_number) |
+ command.append(config.values["build_number"]) |
- if args.master_name: |
+ if config.values["master_name"]: |
command.append('--master-name') |
- command.append(args.master_name) |
+ command.append(config.values["master_name"]) |
- if args.test_results_server: |
+ if config.values["test_results_server"]: |
command.append('--test-results-server') |
- command.append(args.test_results_server) |
+ command.append(config.values["test_results_server"]) |
subprocess.call(command) |
# Sky tests are currently really unstable, so make the step green even if |
@@ -168,8 +207,8 @@ def run_skytests(args): |
return 0 |
-def run_pytests(args): |
- out_dir = get_out_dir(args) |
+def run_pytests(config): |
+ out_dir = get_out_dir(config) |
print 'Running python tests in %s ...' % out_dir |
command = ['python'] |
command.append(os.path.join('mojo', 'tools', 'run_mojo_python_tests.py')) |
@@ -188,12 +227,12 @@ def run_pytests(args): |
return subprocess.call(command) |
-def test(args): |
+def test(config): |
test_suites = [run_unittests, run_apptests, run_pytests, run_skytests] |
final_exit_code = 0 |
for test_suite in test_suites: |
- exit_code = test_suite(args) |
+ exit_code = test_suite(config) |
# TODO(ojan): Find a better way to do this. We want to run all the tests |
# so we get coverage even if an early test suite fails, but we only have |
# one exit code. |
@@ -202,20 +241,20 @@ def test(args): |
return final_exit_code |
-def perftest(args): |
- out_dir = get_out_dir(args) |
+def perftest(config): |
+ out_dir = get_out_dir(config) |
print 'Running perf tests in %s ...' % out_dir |
command = [] |
command.append(os.path.join(out_dir, 'mojo_public_system_perftests')) |
return subprocess.call(command) |
-def pytest(args): |
- return run_pytests(args) |
+def pytest(config): |
+ return run_pytests(config) |
-def darttest(args): |
- out_dir = get_out_dir(args) |
+def darttest(config): |
+ out_dir = get_out_dir(config) |
print 'Running Dart tests in %s ...' % out_dir |
command = [] |
command.append('dart') |
@@ -259,9 +298,9 @@ def main(): |
gn_parser.add_argument('--with-dart', help='Configure the Dart bindings', |
action='store_true') |
clang_group = gn_parser.add_mutually_exclusive_group() |
- clang_group.add_argument('--clang', help='Use Clang (default)', default=True, |
+ clang_group.add_argument('--clang', help='Use Clang (default)', default=None, |
action='store_true') |
- clang_group.add_argument('--gcc', help='Use GCC', default=False, |
+ clang_group.add_argument('--gcc', help='Use GCC', |
dest='clang', action='store_false') |
goma_group = gn_parser.add_mutually_exclusive_group() |
goma_group.add_argument('--goma', |
@@ -304,17 +343,8 @@ def main(): |
darttest_parser.set_defaults(func=darttest) |
args = parser.parse_args() |
- |
- # TODO(vtl): Pass a Config through to everything, instead of args. |
- |
- # Android always wants GCC. |
- if args.android: |
- args.clang = False |
- |
- if platform.system() == 'Windows': |
- args.clang = False |
- |
- return args.func(args) |
+ config = args_to_config(args) |
+ return args.func(config) |
if __name__ == '__main__': |