| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | #!/usr/bin/python -u | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-12 13:45:57 +00:00
										 |  |  | import multiprocessing | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2016-06-12 13:45:57 +00:00
										 |  |  | import platform | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | import shutil | 
					
						
							| 
									
										
										
										
											2016-06-05 12:07:04 +00:00
										 |  |  | import stat | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | import subprocess | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-12 19:19:03 +00:00
										 |  |  | # Disable buffering. | 
					
						
							|  |  |  | sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | if len(sys.argv) == 1: | 
					
						
							|  |  |  | 	kWork = os.path.join('deps', sys.platform) | 
					
						
							|  |  |  | elif len(sys.argv) == 2: | 
					
						
							|  |  |  | 	kWork = sys.argv[1] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if not os.path.isdir(kWork): | 
					
						
							|  |  |  | 	os.makedirs(kWork) | 
					
						
							|  |  |  | os.chdir(kWork) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | kUvRepository = 'https://github.com/libuv/libuv.git' | 
					
						
							| 
									
										
										
										
											2016-06-04 20:11:37 +00:00
										 |  |  | kUvBranch = 'v1.9.1' | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | kUvWork = 'uv' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | kV8Repository = 'https://github.com/v8/v8.git' | 
					
						
							| 
									
										
										
										
											2016-06-05 18:48:57 +00:00
										 |  |  | kV8Branch = 'branch-heads/5.1' | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | kV8Work = 'v8' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-12 13:45:57 +00:00
										 |  |  | cores = multiprocessing.cpu_count() | 
					
						
							|  |  |  | if platform.machine() == 'armv7l': | 
					
						
							|  |  |  | 	cores = 1 | 
					
						
							|  |  |  | print 'Using', cores, 'cores.' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | def run(*args, **kw): | 
					
						
							|  |  |  | 	print 'Running:', args, kw | 
					
						
							|  |  |  | 	subprocess.check_call(*args, **kw) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-05 12:07:04 +00:00
										 |  |  | def makeWritableAndRetry(function, path, exc_info): | 
					
						
							|  |  |  | 	if not os.access(path, os.W_OK): | 
					
						
							|  |  |  | 		os.chmod(path, stat.S_IWUSR) | 
					
						
							|  |  |  | 		function(path) | 
					
						
							|  |  |  | 	else: | 
					
						
							|  |  |  | 		raise | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | def updateUv(): | 
					
						
							|  |  |  | 	print 'libuv' | 
					
						
							|  |  |  | 	print | 
					
						
							|  |  |  | 	clean = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if os.path.exists(os.path.join(kUvWork, '.update-deps-branch')): | 
					
						
							|  |  |  | 		haveBranch = open(os.path.join(kUvWork, '.update-deps-branch'), 'r').read().strip() | 
					
						
							|  |  |  | 		if kUvBranch != haveBranch: | 
					
						
							|  |  |  | 			print haveBranch, '=>', kUvBranch | 
					
						
							|  |  |  | 			clean = True | 
					
						
							|  |  |  | 	else: | 
					
						
							|  |  |  | 		clean = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if clean: | 
					
						
							|  |  |  | 		if os.path.isdir(os.path.join(kUvWork)): | 
					
						
							|  |  |  | 			print 'Cleaning', kUvWork | 
					
						
							| 
									
										
										
										
											2016-06-05 12:07:04 +00:00
										 |  |  | 			shutil.rmtree(os.path.join(kUvWork), onerror=makeWritableAndRetry) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 	if not os.path.isdir(kUvWork): | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | 		run(['git', 'clone', '--branch', kUvBranch, kUvRepository, kUvWork]) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 	open(os.path.join(kUvWork, '.update-deps-branch'), 'w').write(kUvBranch) | 
					
						
							|  |  |  | 	if sys.platform in ('darwin', 'win32'): | 
					
						
							|  |  |  | 		if not os.path.isdir(os.path.join(kUvWork, 'build', 'gyp')): | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | 			run(['git', 'clone', 'https://chromium.googlesource.com/external/gyp.git', 'build/gyp'], cwd=kUvWork) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if sys.platform == 'linux2': | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | 		run(['./gyp_uv.py', '-f', 'make'], cwd=kUvWork) | 
					
						
							| 
									
										
										
										
											2016-06-12 13:45:57 +00:00
										 |  |  | 		run(['make', '-j' + str(cores), '-C', 'out'], cwd=kUvWork) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 	elif sys.platform == 'darwin': | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | 		run(['./gyp_uv.py', '-f', 'xcode'], cwd=kUvWork) | 
					
						
							|  |  |  | 		run(['xcodebuild', '-ARCHS="x86_64"', '-project', 'uv.xcodeproj', '-configuration', 'Release', '-target', 'All'], cwd=kUvWork) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 	elif sys.platform == 'win32': | 
					
						
							|  |  |  | 		env = os.environ.copy() | 
					
						
							|  |  |  | 		env['VCINSTALLDIR'] = '' | 
					
						
							|  |  |  | 		env['WINDOWSSDKDIR'] = '' | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | 		run(['cmd', '/C', 'call', 'vcbuild.bat', 'release', 'x64'], cwd=kUvWork, env=env) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def updateV8(): | 
					
						
							|  |  |  | 	print 'v8' | 
					
						
							|  |  |  | 	print | 
					
						
							|  |  |  | 	clean = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if False: | 
					
						
							|  |  |  | 		if os.path.exists(os.path.join(kV8Work, '.update-deps-branch')): | 
					
						
							|  |  |  | 			haveBranch = open(os.path.join(kV8Work, '.update-deps-branch'), 'r').read().strip() | 
					
						
							|  |  |  | 			if kV8Branch != haveBranch: | 
					
						
							|  |  |  | 				print haveBranch, '=>', kV8Branch | 
					
						
							|  |  |  | 				clean = True | 
					
						
							|  |  |  | 		else: | 
					
						
							|  |  |  | 			clean = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if clean: | 
					
						
							|  |  |  | 		if os.path.isdir(kV8Work): | 
					
						
							| 
									
										
										
										
											2016-06-05 12:07:04 +00:00
										 |  |  | 			shutil.rmtree(kV8Work, onerror=makeWritableAndRetry) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-20 14:08:04 +00:00
										 |  |  | 	if True or sys.platform == 'linux2': | 
					
						
							| 
									
										
										
										
											2016-03-20 14:00:11 +00:00
										 |  |  | 		# XXX Modify this one .py file which assumes things that conflict with my debian environment. | 
					
						
							|  |  |  | 		if os.path.isfile(os.path.join(kV8Work, 'tools/swarming_client/third_party/requests/packages/urllib3/contrib/pyopenssl.py')): | 
					
						
							|  |  |  | 			print 'resetting tools/swarming_client' | 
					
						
							|  |  |  | 			print run(['git', 'checkout', '.'], cwd=os.path.join(kV8Work, 'tools', 'swarming_client')) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	extension = '' | 
					
						
							|  |  |  | 	if sys.platform == 'win32': | 
					
						
							|  |  |  | 		extension = '.bat' | 
					
						
							|  |  |  | 	if not os.path.isdir(kV8Work): | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | 		run(['fetch' + extension, 'v8']) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	win32Env = os.environ.copy() | 
					
						
							|  |  |  | 	win32Env['DEPOT_TOOLS_WIN_TOOLCHAIN'] = '0' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	open(os.path.join(kV8Work, '.update-deps-branch'), 'w').write(kV8Branch) | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | 	run(['git', 'fetch'], cwd=kV8Work) | 
					
						
							|  |  |  | 	run(['git', 'checkout', kV8Branch], cwd=kV8Work) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if sys.platform == 'win32': | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | 		run(['gclient' + extension, 'sync'], cwd=kV8Work, env=win32Env) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 	else: | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | 		run(['gclient' + extension, 'sync'], cwd=kV8Work) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if sys.platform == 'linux2': | 
					
						
							| 
									
										
										
										
											2016-06-12 13:45:57 +00:00
										 |  |  | 		run(['make', '-j' + str(cores), 'native'], cwd=kV8Work) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 	elif sys.platform == 'darwin': | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | 		run(['build/gyp_v8', '-Dtarget_arch=x64'], cwd=kV8Work) | 
					
						
							|  |  |  | 		run(['xcodebuild', '-project', 'build/all.xcodeproj', '-configuration', 'Release'], cwd=kV8Work) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 	elif sys.platform == 'win32': | 
					
						
							| 
									
										
										
										
											2016-03-19 20:02:11 +00:00
										 |  |  | 		run(['python', 'build\\gyp_v8', '-Dtarget_arch=x64'], cwd=kV8Work, env=win32Env) | 
					
						
							|  |  |  | 		run(['devenv.com', '/Build', 'Release', 'build\\All.sln'], cwd=kV8Work) | 
					
						
							| 
									
										
										
										
											2016-03-12 18:50:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  | 	updateUv() | 
					
						
							|  |  |  | 	updateV8() |