Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(379)

Side by Side Diff: win_toolchain/package_from_installed.py

Issue 1706423002: Let package_from_installed write the build env into json files in addition to SetEnv.cmd (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: wb Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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 """ 5 """
6 From a system-installed copy of the toolchain, packages all the required bits 6 From a system-installed copy of the toolchain, packages all the required bits
7 into a .zip file. 7 into a .zip file.
8 8
9 It assumes default install locations for tools, in particular: 9 It assumes default install locations for tools, in particular:
10 - C:\Program Files (x86)\Microsoft Visual Studio 12.0\... 10 - C:\Program Files (x86)\Microsoft Visual Studio 12.0\...
11 - C:\Program Files (x86)\Windows Kits\10\... 11 - C:\Program Files (x86)\Windows Kits\10\...
12 12
13 1. Start from a fresh Win7 VM image. 13 1. Start from a fresh Win7 VM image.
14 2. Install VS Pro. Deselect everything except MFC. 14 2. Install VS Pro. Deselect everything except MFC.
15 3. Install Windows 10 SDK. Select only the Windows SDK and Debugging Tools for 15 3. Install Windows 10 SDK. Select only the Windows SDK and Debugging Tools for
16 Windows. 16 Windows.
17 4. Run this script, which will build a <sha1>.zip. 17 4. Run this script, which will build a <sha1>.zip.
18 18
19 Express is not yet supported by this script, but patches welcome (it's not too 19 Express is not yet supported by this script, but patches welcome (it's not too
20 useful as the resulting zip can't be redistributed, and most will presumably 20 useful as the resulting zip can't be redistributed, and most will presumably
21 have a Pro license anyway). 21 have a Pro license anyway).
22 """ 22 """
23 23
24 import collections
24 import glob 25 import glob
26 import json
25 import optparse 27 import optparse
26 import os 28 import os
27 import platform 29 import platform
28 import shutil 30 import shutil
29 import sys 31 import sys
30 import tempfile 32 import tempfile
31 import zipfile 33 import zipfile
32 34
33 import get_toolchain_if_necessary 35 import get_toolchain_if_necessary
34 36
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 ['..', '..', 'win_sdk', 'Include', WIN_VERSION, 'shared'], 209 ['..', '..', 'win_sdk', 'Include', WIN_VERSION, 'shared'],
208 ['..', '..', 'win_sdk', 'Include', WIN_VERSION, 'winrt'], 210 ['..', '..', 'win_sdk', 'Include', WIN_VERSION, 'winrt'],
209 ] 211 ]
210 if VS_VERSION == '2015': 212 if VS_VERSION == '2015':
211 include_dirs.append(['..', '..', 'win_sdk', 'Include', WIN_VERSION, 'ucrt']) 213 include_dirs.append(['..', '..', 'win_sdk', 'Include', WIN_VERSION, 'ucrt'])
212 include_dirs.extend([ 214 include_dirs.extend([
213 ['..', '..', 'VC', 'include'], 215 ['..', '..', 'VC', 'include'],
214 ['..', '..', 'VC', 'atlmfc', 'include'], 216 ['..', '..', 'VC', 'atlmfc', 'include'],
215 ]) 217 ])
216 # Common to x86 and x64 218 # Common to x86 and x64
217 env = [ 219 env = collections.OrderedDict([
218 # Yuck: These two have a trailing \ character. No good way to represent this 220 # Yuck: These two have a trailing \ character. No good way to represent this
219 # in an OS-independent way. 221 # in an OS-independent way.
220 ('VSINSTALLDIR', [['..', '..\\']]), 222 ('VSINSTALLDIR', [['..', '..\\']]),
221 ('VCINSTALLDIR', [['..', '..', 'VC\\']]), 223 ('VCINSTALLDIR', [['..', '..', 'VC\\']]),
222 ('INCLUDE', include_dirs), 224 ('INCLUDE', include_dirs),
223 ] 225 ])
224 # x86. Always use amd64_x86 cross, not x86 on x86. 226 # x86. Always use amd64_x86 cross, not x86 on x86.
225 env_x86 = [ 227 env_x86 = collections.OrderedDict([
226 ('PATH', [ 228 ('PATH', [
227 ['..', '..', 'win_sdk', 'bin', 'x86'], 229 ['..', '..', 'win_sdk', 'bin', 'x86'],
228 ['..', '..', 'VC', 'bin', 'amd64_x86'], 230 ['..', '..', 'VC', 'bin', 'amd64_x86'],
229 ['..', '..', 'VC', 'bin', 'amd64'], # Needed for mspdb1x0.dll. 231 ['..', '..', 'VC', 'bin', 'amd64'], # Needed for mspdb1x0.dll.
230 ]), 232 ]),
231 ('LIB', [ 233 ('LIB', [
232 ['..', '..', 'VC', 'lib'], 234 ['..', '..', 'VC', 'lib'],
233 ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'um', 'x86'], 235 ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'um', 'x86'],
234 ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'ucrt', 'x86'], # VS 2015 236 ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'ucrt', 'x86'], # VS 2015
235 ['..', '..', 'VC', 'atlmfc', 'lib'], 237 ['..', '..', 'VC', 'atlmfc', 'lib'],
236 ]), 238 ]),
237 ] 239 ])
238 # x64. 240 # x64.
239 env_x64 = [ 241 env_x64 = collections.OrderedDict([
240 ('PATH', [ 242 ('PATH', [
241 ['..', '..', 'win_sdk', 'bin', 'x64'], 243 ['..', '..', 'win_sdk', 'bin', 'x64'],
242 ['..', '..', 'VC', 'bin', 'amd64'], 244 ['..', '..', 'VC', 'bin', 'amd64'],
243 ]), 245 ]),
244 ('LIB', [ 246 ('LIB', [
245 ['..', '..', 'VC', 'lib', 'amd64'], 247 ['..', '..', 'VC', 'lib', 'amd64'],
246 ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'um', 'x64'], 248 ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'um', 'x64'],
247 ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'ucrt', 'x64'], # VS 2015 249 ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'ucrt', 'x64'], # VS 2015
248 ['..', '..', 'VC', 'atlmfc', 'lib', 'amd64'], 250 ['..', '..', 'VC', 'atlmfc', 'lib', 'amd64'],
249 ]), 251 ]),
250 ] 252 ])
251 def BatDirs(dirs): 253 def BatDirs(dirs):
252 return ';'.join(['%~dp0' + os.path.join(*d) for d in dirs]) 254 return ';'.join(['%~dp0' + os.path.join(*d) for d in dirs])
253 with open(os.path.join(target_dir, r'win_sdk\bin\SetEnv.cmd'), 'w') as f: 255 set_env_prefix = os.path.join(target_dir, r'win_sdk\bin\SetEnv')
256 with open(set_env_prefix + '.cmd', 'w') as f:
254 f.write('@echo off\n' 257 f.write('@echo off\n'
255 ':: Generated by win_toolchain\\package_from_installed.py.\n') 258 ':: Generated by win_toolchain\\package_from_installed.py.\n')
256 for var, dirs in env: 259 for var, dirs in env.iteritems():
257 f.write('set %s=%s\n' % (var, BatDirs(dirs))) 260 f.write('set %s=%s\n' % (var, BatDirs(dirs)))
258 f.write('if "%1"=="/x64" goto x64\n') 261 f.write('if "%1"=="/x64" goto x64\n')
259 262
260 for var, dirs in env_x86: 263 for var, dirs in env_x86.iteritems():
261 f.write('set %s=%s%s\n' % ( 264 f.write('set %s=%s%s\n' % (
262 var, BatDirs(dirs), ';%PATH%' if var == 'PATH' else '')) 265 var, BatDirs(dirs), ';%PATH%' if var == 'PATH' else ''))
263 f.write('goto :EOF\n') 266 f.write('goto :EOF\n')
264 267
265 f.write(':x64\n') 268 f.write(':x64\n')
266 for var, dirs in env_x64: 269 for var, dirs in env_x64.iteritems():
267 f.write('set %s=%s%s\n' % ( 270 f.write('set %s=%s%s\n' % (
268 var, BatDirs(dirs), ';%PATH%' if var == 'PATH' else '')) 271 var, BatDirs(dirs), ';%PATH%' if var == 'PATH' else ''))
272 with open(set_env_prefix + '.x86.json', 'wb') as f:
273 assert not set(env.keys()) & set(env_x86.keys()), 'dupe keys'
274 json.dump(collections.OrderedDict(env.items() + env_x86.items()), f)
275 with open(set_env_prefix + '.x64.json', 'wb') as f:
276 assert not set(env.keys()) & set(env_x64.keys()), 'dupe keys'
277 json.dump(collections.OrderedDict(env.items() + env_x64.items()), f)
269 278
270 279
271 def AddEnvSetup(files): 280 def AddEnvSetup(files):
272 """We need to generate this file in the same way that the "from pieces" 281 """We need to generate this file in the same way that the "from pieces"
273 script does, so pull that in here.""" 282 script does, so pull that in here."""
274 tempdir = tempfile.mkdtemp() 283 tempdir = tempfile.mkdtemp()
275 os.makedirs(os.path.join(tempdir, 'win_sdk', 'bin')) 284 os.makedirs(os.path.join(tempdir, 'win_sdk', 'bin'))
276 GenerateSetEnvCmd(tempdir) 285 GenerateSetEnvCmd(tempdir)
277 files.append((os.path.join(tempdir, 'win_sdk', 'bin', 'SetEnv.cmd'), 286 files.append((os.path.join(tempdir, 'win_sdk', 'bin', 'SetEnv.cmd'),
278 'win_sdk\\bin\\SetEnv.cmd')) 287 'win_sdk\\bin\\SetEnv.cmd'))
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 sys.stdout.write('\rWrote to %s.%s\n' % (output, ' '*50)) 379 sys.stdout.write('\rWrote to %s.%s\n' % (output, ' '*50))
371 sys.stdout.flush() 380 sys.stdout.flush()
372 381
373 RenameToSha1(output) 382 RenameToSha1(output)
374 383
375 return 0 384 return 0
376 385
377 386
378 if __name__ == '__main__': 387 if __name__ == '__main__':
379 sys.exit(main()) 388 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698