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

Side by Side Diff: win_toolchain/package_from_installed.py

Issue 462913002: win: Add recipe to package Pro toolchain (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: . Created 6 years, 4 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 | Annotate | Revision Log
« 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
(Empty)
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
3 # found in the LICENSE file.
4
5 """
6 From a system-installed copy of the toolchain, packages all the required bits
7 into a .zip file.
8
9 It assumes default install locations for tools, in particular:
10 - C:\Program Files (x86)\Microsoft Visual Studio 12.0\...
11 - C:\Program Files (x86)\Windows Kits\8.0\...
12
13 1. Start from a fresh Win7 VM image.
14 2. Install VS Pro. Deselect everything except MFC.
15 3. Install Windows 8 SDK. Select only the Windows SDK and Debugging Tools for
16 Windows.
17 4. Run this script, which will build a <sha1>.zip.
18
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
21 have a Pro license anyway).
22 """
23
24 import os
25 import shutil
26 import sys
27 import tempfile
28 import zipfile
29
30 import get_toolchain_if_necessary
31 import toolchain2013 # pylint: disable=F0401
32
33
34 def BuildFileList():
35 result = []
36
37 # Subset of VS corresponding roughly to VC.
38 vs_path = r'C:\Program Files (x86)\Microsoft Visual Studio 12.0'
39 for path in [
40 'DIA SDK/bin',
41 'DIA SDK/idl',
42 'DIA SDK/include',
43 'DIA SDK/lib',
44 'VC/atlmfc',
45 'VC/bin',
46 'VC/crt',
47 'VC/include',
48 'VC/lib',
49 'VC/redist',
50 ('VC/redist/x86/Microsoft.VC120.CRT', 'sys32'),
51 ('VC/redist/x86/Microsoft.VC120.MFC', 'sys32'),
52 ('VC/redist/Debug_NonRedist/x86/Microsoft.VC120.DebugCRT', 'sys32'),
53 ('VC/redist/Debug_NonRedist/x86/Microsoft.VC120.DebugMFC', 'sys32'),
54 ('VC/redist/x64/Microsoft.VC120.CRT', 'sys64'),
55 ('VC/redist/x64/Microsoft.VC120.MFC', 'sys64'),
56 ('VC/redist/Debug_NonRedist/x64/Microsoft.VC120.DebugCRT', 'sys64'),
57 ('VC/redist/Debug_NonRedist/x64/Microsoft.VC120.DebugMFC', 'sys64'),
58 ]:
59 src = path[0] if isinstance(path, tuple) else path
60 combined = os.path.join(vs_path, src)
61 assert os.path.exists(combined) and os.path.isdir(combined)
62 for root, _, files in os.walk(combined):
63 for f in files:
64 final_from = os.path.normpath(os.path.join(root, f))
65 if isinstance(path, tuple):
66 result.append(
67 (final_from, os.path.normpath(os.path.join(path[1], f))))
68 else:
69 assert final_from.startswith(vs_path)
70 dest = final_from[len(vs_path) + 1:]
71 if dest.lower().endswith('\\xtree'):
72 # Patch for C4702 in xtree. http://crbug.com/346399.
73 (handle, patched) = tempfile.mkstemp()
74 with open(final_from, 'rb') as unpatched_f:
75 unpatched_contents = unpatched_f.read()
76 os.write(handle,
77 unpatched_contents.replace('warning(disable: 4127)',
78 'warning(disable: 4127 4702)'))
79 result.append((patched, dest))
80 else:
81 result.append((final_from, dest))
82
83 # Just copy the whole SDK.
84 sdk_path = r'C:\Program Files (x86)\Windows Kits\8.0'
85 for root, _, files in os.walk(sdk_path):
86 for f in files:
87 combined = os.path.normpath(os.path.join(root, f))
88 to = os.path.join('win8sdk', combined[len(sdk_path) + 1:])
89 result.append((combined, to))
90
91 # Generically drop all arm stuff that we don't need.
92 return [(f, t) for f, t in result if 'arm\\' not in f.lower()]
93
94
95 def AddEnvSetup(files):
96 """We need to generate this file in the same way that the "from pieces"
97 script does, so pull that in here."""
98 tempdir = tempfile.mkdtemp()
99 os.makedirs(os.path.join(tempdir, 'win8sdk', 'bin'))
100 toolchain2013.GenerateSetEnvCmd(tempdir, True)
101 files.append((os.path.join(tempdir, 'win8sdk', 'bin', 'SetEnv.cmd'),
102 'win8sdk\\bin\\SetEnv.cmd'))
103
104
105 def RenameToSha1(output):
106 """Determine the hash in the same way that the unzipper does to rename the
107 # .zip file."""
108 print 'Extracting to determine hash...'
109 tempdir = tempfile.mkdtemp()
110 old_dir = os.getcwd()
111 os.chdir(tempdir)
112 rel_dir = 'vs2013_files'
113 with zipfile.ZipFile(
114 os.path.join(old_dir, output), 'r', zipfile.ZIP_DEFLATED, True) as zf:
115 zf.extractall(rel_dir)
116 print 'Hashing...'
117 sha1 = get_toolchain_if_necessary.CalculateHash(rel_dir)
118 os.chdir(old_dir)
119 shutil.rmtree(tempdir)
120 final_name = sha1 + '.zip'
121 os.rename(output, final_name)
122 print 'Renamed %s to %s.' % (output, final_name)
123
124
125 def main():
126 print 'Building file list...'
127 files = BuildFileList()
128
129 AddEnvSetup(files)
130
131 if False:
132 for f in files:
133 print f[0], '->', f[1]
134 return 0
135
136 output = 'out.zip'
137 if os.path.exists(output):
138 os.unlink(output)
139 count = 0
140 with zipfile.ZipFile(output, 'w', zipfile.ZIP_DEFLATED, True) as zf:
141 for disk_name, archive_name in files:
142 sys.stdout.write('\r%d/%d ...%s' % (count, len(files), disk_name[-40:]))
143 sys.stdout.flush()
144 count += 1
145 zf.write(disk_name, archive_name)
146 sys.stdout.write('\rWrote to %s.%s\n' % (output, ' '*50))
147 sys.stdout.flush()
148
149 RenameToSha1(output)
150
151 return 0
152
153
154 if __name__ == '__main__':
155 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