| 
					
				 | 
			
			
				@@ -235,8 +235,10 @@ class CLanguage(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     self.config = config 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     self.args = args 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if self.platform == 'windows': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      _check_compiler(self.args.compiler, ['default', 'cmake']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      _check_compiler(self.args.compiler, ['default', 'cmake', 'cmake_vs2015', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                           'cmake_vs2017']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       _check_arch(self.args.arch, ['default', 'x64', 'x86']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self._cmake_generator_option = 'Visual Studio 15 2017' if self.args.compiler == 'cmake_vs2017' else 'Visual Studio 14 2015' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self._cmake_arch_option = 'x64' if self.args.arch == 'x64' else 'Win32' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self._use_cmake = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self._make_options = [] 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -363,11 +365,13 @@ class CLanguage(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             'check_epollexclusive'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   def make_options(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return self._make_options; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return self._make_options 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   def pre_build_steps(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if self.platform == 'windows': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return [['tools\\run_tests\\helper_scripts\\pre_build_cmake.bat', self._cmake_arch_option]] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return [['tools\\run_tests\\helper_scripts\\pre_build_cmake.bat', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               self._cmake_generator_option, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               self._cmake_arch_option]] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     elif self._use_cmake: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return [['tools/run_tests/helper_scripts/pre_build_cmake.sh']] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     else: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1205,7 +1209,7 @@ argp.add_argument('--compiler', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            'node0.12', 'node4', 'node5', 'node6', 'node7', 'node8', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            'electron1.3', 'electron1.6', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            'coreclr', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                           'cmake'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           'cmake', 'cmake_vs2015', 'cmake_vs2017'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   default='default', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   help='Selects compiler to use. Allowed values depend on the platform and language.') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 argp.add_argument('--iomgr_platform', 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1364,27 +1368,11 @@ _check_arch_option(args.arch) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def make_jobspec(cfg, targets, makefile='Makefile'): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if platform_string() == 'windows': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if makefile.startswith('cmake/build/'): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return [jobset.JobSpec(['cmake', '--build', '.', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              '--target', '%s' % target, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              '--config', _MSBUILD_CONFIG[cfg]], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                             cwd=os.path.dirname(makefile), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                             timeout_seconds=None) for target in targets] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    extra_args = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    # better do parallel compilation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    # empirically /m:2 gives the best performance/price and should prevent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    # overloading the windows workers. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    extra_args.extend(['/m:2']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    # disable PDB generation: it's broken, and we don't need it during CI 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    extra_args.extend(['/p:Jenkins=true']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      jobset.JobSpec([_windows_build_bat(args.compiler), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      'vsprojects\\%s.sln' % target, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      '/p:Configuration=%s' % _MSBUILD_CONFIG[cfg]] + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      extra_args + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      language_make_options, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      shell=True, timeout_seconds=None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      for target in targets] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return [jobset.JobSpec(['cmake', '--build', '.', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            '--target', '%s' % target, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            '--config', _MSBUILD_CONFIG[cfg]], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           cwd=os.path.dirname(makefile), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           timeout_seconds=None) for target in targets] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if targets and makefile.startswith('cmake/build/'): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       # With cmake, we've passed all the build configuration in the pre-build step already 
			 |