|  | @@ -349,6 +349,10 @@ argp.add_argument('-l', '--language',
 | 
	
		
			
				|  |  |                    choices=sorted(_LANGUAGES.keys()),
 | 
	
		
			
				|  |  |                    nargs='+',
 | 
	
		
			
				|  |  |                    default=sorted(_LANGUAGES.keys()))
 | 
	
		
			
				|  |  | +argp.add_argument('-S', '--stop_on_failure',
 | 
	
		
			
				|  |  | +                  default=False,
 | 
	
		
			
				|  |  | +                  action='store_const',
 | 
	
		
			
				|  |  | +                  const=True)
 | 
	
		
			
				|  |  |  argp.add_argument('-a', '--antagonists', default=0, type=int)
 | 
	
		
			
				|  |  |  args = argp.parse_args()
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -376,11 +380,11 @@ else:
 | 
	
		
			
				|  |  |    def make_jobspec(cfg, targets):
 | 
	
		
			
				|  |  |      return jobset.JobSpec(['make',
 | 
	
		
			
				|  |  |                             '-j', '%d' % (multiprocessing.cpu_count() + 1),
 | 
	
		
			
				|  |  | -                           'EXTRA_DEFINES=GRPC_TEST_SLOWDOWN_MACHINE_FACTOR=%f' % 
 | 
	
		
			
				|  |  | +                           'EXTRA_DEFINES=GRPC_TEST_SLOWDOWN_MACHINE_FACTOR=%f' %
 | 
	
		
			
				|  |  |                                 args.slowdown,
 | 
	
		
			
				|  |  |                             'CONFIG=%s' % cfg] + targets)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -build_steps = [make_jobspec(cfg, 
 | 
	
		
			
				|  |  | +build_steps = [make_jobspec(cfg,
 | 
	
		
			
				|  |  |                              list(set(itertools.chain.from_iterable(
 | 
	
		
			
				|  |  |                                           l.make_targets() for l in languages))))
 | 
	
		
			
				|  |  |                 for cfg in build_configs]
 | 
	
	
		
			
				|  | @@ -388,7 +392,7 @@ build_steps.extend(set(
 | 
	
		
			
				|  |  |                     jobset.JobSpec(cmdline, environ={'CONFIG': cfg})
 | 
	
		
			
				|  |  |                     for cfg in build_configs
 | 
	
		
			
				|  |  |                     for l in languages
 | 
	
		
			
				|  |  | -                   for cmdline in l.build_steps()))               
 | 
	
		
			
				|  |  | +                   for cmdline in l.build_steps()))
 | 
	
		
			
				|  |  |  one_run = set(
 | 
	
		
			
				|  |  |      spec
 | 
	
		
			
				|  |  |      for config in run_configs
 | 
	
	
		
			
				|  | @@ -454,6 +458,7 @@ def _build_and_run(check_cancelled, newline_on_success, travis, cache):
 | 
	
		
			
				|  |  |      if not jobset.run(all_runs, check_cancelled,
 | 
	
		
			
				|  |  |                        newline_on_success=newline_on_success, travis=travis,
 | 
	
		
			
				|  |  |                        maxjobs=args.jobs,
 | 
	
		
			
				|  |  | +                      stop_on_failure=args.stop_on_failure,
 | 
	
		
			
				|  |  |                        cache=cache):
 | 
	
		
			
				|  |  |        return 2
 | 
	
		
			
				|  |  |    finally:
 |