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

Unified Diff: win_toolchain/toolchain2013.py

Issue 148453008: Support VS2013 Express for automatic toolchain too (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: bot-mode arg Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « win_toolchain/get_toolchain_if_necessary.py ('k') | win_toolchain/toolchain_vs2013.hash » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: win_toolchain/toolchain2013.py
diff --git a/win_toolchain/toolchain2013.py b/win_toolchain/toolchain2013.py
index 47963f094a052ec51a7ad0f6abc3f12b4a488671..cd91175086e81d54a9de4edad8c069432dc59fb1 100755
--- a/win_toolchain/toolchain2013.py
+++ b/win_toolchain/toolchain2013.py
@@ -17,6 +17,9 @@ import urllib2
BASEDIR = os.path.dirname(os.path.abspath(__file__))
+WDK_ISO_URL = (
+ 'http://download.microsoft.com/download/'
+ '4/A/2/4A25C7D5-EFBE-4182-B6A9-AE6850409A78/GRMWDK_EN_7600_1.ISO')
g_temp_dirs = []
@@ -57,8 +60,8 @@ def DeleteAllTempDirs():
g_temp_dirs = []
-def GetIsoUrl(pro):
- """Gets the .iso URL.
+def GetMainIsoUrl(pro):
+ """Gets the main .iso URL.
If |pro| is False, downloads the Express edition. If |CHROME_HEADLESS| is
set in the environment, then we assume we're on an internal bot, and download
@@ -151,6 +154,7 @@ def DownloadSDK8():
while count < 5:
rc = os.system(target_path + ' /quiet '
'/features OptionId.WindowsDesktopDebuggers '
+ 'OptionId.WindowsDesktopSoftwareDevelopmentKit '
'/layout ' + standalone_path)
if rc == 0:
return standalone_path
@@ -159,6 +163,13 @@ def DownloadSDK8():
sys.exit('After multiple retries, couldn\'t download Win8 SDK')
+def DownloadWDKIso():
+ wdk_temp_dir = TempDir()
+ target_path = os.path.join(wdk_temp_dir, 'GRMWDK_EN_7600_1.ISO')
+ Download(WDK_ISO_URL, target_path)
+ return target_path
+
+
def DownloadUsingGsutil(filename):
"""Downloads the given file from Google Storage chrome-wintoolchain bucket."""
temp_dir = TempDir()
@@ -185,23 +196,36 @@ def GetSDKInternal():
class SourceImages(object):
- def __init__(self, vs_path, sdk8_path):
+ """Local paths for components. |wdk_path| may be None if it's unnecessary for
+ the given configuration."""
+ def __init__(self, vs_path, sdk8_path, wdk_path):
self.vs_path = vs_path
self.sdk8_path = sdk8_path
+ self.wdk_path = wdk_path
-def GetSourceImages(local_dir, pro):
- url = GetIsoUrl(pro)
- if os.environ.get('CHROME_HEADLESS'):
- return SourceImages(GetVSInternal(), GetSDKInternal())
+def GetSourceImages(local_dir, pro, bot_mode):
+ """Downloads the various sources that we need.
+
+ Of note: Because Express does not include ATL, there's an additional download
+ of the 7.1 WDK which is the latest publically accessible source for ATL. When
+ |pro| this is not necessary (and CHROME_HEADLESS always implies Pro).
+ """
+ url = GetMainIsoUrl(pro)
+ if bot_mode:
+ return SourceImages(GetVSInternal(), GetSDKInternal(), wdk_path=None)
elif local_dir:
+ wdk_path = (os.path.join(local_dir, os.path.basename(WDK_ISO_URL))
+ if not pro else None)
return SourceImages(os.path.join(local_dir, os.path.basename(url)),
- os.path.join(local_dir, 'Standalone'))
+ os.path.join(local_dir, 'Standalone'),
+ wdk_path=wdk_path)
else:
# Note that we do the SDK first, as it might cause an elevation prompt.
sdk8_path = DownloadSDK8()
vs_path = DownloadMainIso(url)
- return SourceImages(vs_path, sdk8_path)
+ wdk_path = DownloadWDKIso() if not pro else None
+ return SourceImages(vs_path, sdk8_path, wdk_path=wdk_path)
def ExtractMsiList(root_dir, packages):
@@ -238,10 +262,6 @@ def ExtractComponents(image):
(r'vc_libraryDesktop\x64\vc_LibraryDesktopX64.msi', True),
(r'vc_libraryDesktop\x86\vc_LibraryDesktopX86.msi', True),
(r'vc_libraryextended\vc_libraryextended.msi', False),
- (r'Windows_SDK\Windows Software Development Kit-x86_en-us.msi', True),
- ('Windows_SDK\\'
- r'Windows Software Development Kit for Metro style Apps-x86_en-us.msi',
- True),
]
extracted_iso = ExtractIso(image.vs_path)
result = ExtractMsiList(os.path.join(extracted_iso, 'packages'), vs_packages)
@@ -250,10 +270,25 @@ def ExtractComponents(image):
(r'X86 Debuggers And Tools-x86_en-us.msi', True),
(r'X64 Debuggers And Tools-x64_en-us.msi', True),
(r'SDK Debuggers-x86_en-us.msi', True),
+ (r'Windows Software Development Kit-x86_en-us.msi', True),
+ (r'Windows Software Development Kit for Metro style Apps-x86_en-us.msi',
+ True),
]
result.extend(ExtractMsiList(os.path.join(image.sdk8_path, 'Installers'),
sdk_packages))
+ if image.wdk_path:
+ # This image will only be set when using Express, when we need the WDK
+ # headers and libs to supplement Express with ATL.
+ wdk_packages = [
+ (r'headers.msi', True),
+ (r'libs_x86fre.msi', True),
+ (r'libs_x64fre.msi', True),
+ ]
+ extracted_iso = ExtractIso(image.wdk_path)
+ result.extend(ExtractMsiList(os.path.join(extracted_iso, 'WDK'),
+ wdk_packages))
+
return result
@@ -264,6 +299,7 @@ def CopyToFinalLocation(extracted_dirs, target_dir):
'System64\\': 'sys64\\',
'System\\': 'sys32\\',
'Windows Kits\\8.0\\': 'win8sdk\\',
+ 'WinDDK\\7600.16385.win7_wdk.100208-1538\\': 'wdk\\',
}
matches = []
for extracted_dir in extracted_dirs:
@@ -327,6 +363,9 @@ def GenerateSetEnvCmd(target_dir, pro):
f.write(':x64\n'
'set PATH=%~dp0..\\..\\win8sdk\\bin\\x64;'
'%~dp0..\\..\\VC\\bin\\x86_amd64;'
+ # Needed for mspdb120.dll. Must be after above though, so
+ # that cl.exe is the x86_amd64 one.
+ '%~dp0..\\..\\VC\\bin;'
'%PATH%\n')
else:
# x64 native.
@@ -351,6 +390,10 @@ def main():
help='use downloaded files from DIR')
parser.add_option('--express',
help='use VS Express instead of Pro', action='store_true')
+ parser.add_option('--bot-mode',
+ help='Use internal servers to pull isos',
+ default=bool(int(os.environ.get('CHROME_HEADLESS', 0))),
+ action='store_true')
options, _ = parser.parse_args()
try:
target_dir = os.path.abspath(options.targetdir)
@@ -362,11 +405,14 @@ def main():
# codec dll very well, so this is the simplest way to make sure it runs
# correctly, as we don't otherwise care about working directory.
os.chdir(os.path.join(BASEDIR, '7z'))
- images = GetSourceImages(options.local, not options.express)
+ images = GetSourceImages(
+ options.local, not options.express, options.bot_mode)
extracted = ExtractComponents(images)
CopyToFinalLocation(extracted, target_dir)
GenerateSetEnvCmd(target_dir, not options.express)
+ with open(os.path.join(target_dir, '.version'), 'w') as f:
+ f.write('express' if options.express else 'pro')
finally:
if options.clean:
DeleteAllTempDirs()
« no previous file with comments | « win_toolchain/get_toolchain_if_necessary.py ('k') | win_toolchain/toolchain_vs2013.hash » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698