diff options
author | scottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-05 17:09:15 +0000 |
---|---|---|
committer | scottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-05 17:09:15 +0000 |
commit | 0f089e5fe219e9502fc966675caadf9cd22970b4 (patch) | |
tree | f1a05d93ea9584263c80f2031934dbd4c8136f7e /tools/win | |
parent | 409b46cad7f4fd721e410d2aaeb0c3bc3efe84aa (diff) | |
download | chromium_src-0f089e5fe219e9502fc966675caadf9cd22970b4.zip chromium_src-0f089e5fe219e9502fc966675caadf9cd22970b4.tar.gz chromium_src-0f089e5fe219e9502fc966675caadf9cd22970b4.tar.bz2 |
Remove old 2013 toolchain script from tools/win/
This functionality for 2013 now lives in depot_tools.
TBR=maruel@chromium.org
BUG=323300
Review URL: https://codereview.chromium.org/150003008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@249029 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/win')
-rw-r--r-- | tools/win/toolchain/get_toolchain_if_necessary.py | 138 | ||||
-rw-r--r-- | tools/win/toolchain/toolchain2013.py | 229 |
2 files changed, 0 insertions, 367 deletions
diff --git a/tools/win/toolchain/get_toolchain_if_necessary.py b/tools/win/toolchain/get_toolchain_if_necessary.py deleted file mode 100644 index da21f95..0000000 --- a/tools/win/toolchain/get_toolchain_if_necessary.py +++ /dev/null @@ -1,138 +0,0 @@ -# Copyright 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import ctypes.wintypes -import hashlib -import json -import os -import subprocess -import sys - - -BASEDIR = os.path.dirname(os.path.abspath(__file__)) - - -GetFileAttributes = ctypes.windll.kernel32.GetFileAttributesW -GetFileAttributes.argtypes = (ctypes.wintypes.LPWSTR,) -GetFileAttributes.restype = ctypes.wintypes.DWORD -FILE_ATTRIBUTE_HIDDEN = 0x2 -FILE_ATTRIBUTE_SYSTEM = 0x4 - - -def IsHidden(file_path): - """Returns whether the given |file_path| has the 'system' or 'hidden' - attribute set.""" - p = GetFileAttributes(file_path) - assert p != 0xffffffff - return bool(p & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) - - -def GetFileList(root): - """Gets a normalized list of files under |root|.""" - assert not os.path.isabs(root) - assert os.path.normpath(root) == root - file_list = [] - for base, _, files in os.walk(root): - paths = [os.path.join(base, f) for f in files] - file_list.extend(x.lower() for x in paths if not IsHidden(x)) - return sorted(file_list) - - -def MakeTimestampsFileName(root): - return os.path.join(root, '..', '.timestamps') - - -def CalculateHash(root): - """Calculates the sha1 of the paths to all files in the given |root| and the - contents of those files, and returns as a hex string.""" - file_list = GetFileList(root) - - # Check whether we previously saved timestamps in $root/../.timestamps. If - # we didn't, or they don't match, then do the full calculation, otherwise - # return the saved value. - timestamps_file = MakeTimestampsFileName(root) - timestamps_data = {'files': [], 'sha1': ''} - if os.path.exists(timestamps_file): - with open(timestamps_file, 'rb') as f: - try: - timestamps_data = json.load(f) - except ValueError: - # json couldn't be loaded, empty data will force a re-hash. - pass - - matches = len(file_list) == len(timestamps_data['files']) - if matches: - for disk, cached in zip(file_list, timestamps_data['files']): - if disk != cached[0] or os.stat(disk).st_mtime != cached[1]: - matches = False - break - if matches: - return timestamps_data['sha1'] - - digest = hashlib.sha1() - for path in file_list: - digest.update(path) - with open(path, 'rb') as f: - digest.update(f.read()) - return digest.hexdigest() - - -def SaveTimestampsAndHash(root, sha1): - """Save timestamps and the final hash to be able to early-out more quickly - next time.""" - file_list = GetFileList(root) - timestamps_data = { - 'files': [[f, os.stat(f).st_mtime] for f in file_list], - 'sha1': sha1, - } - with open(MakeTimestampsFileName(root), 'wb') as f: - json.dump(timestamps_data, f) - - -def main(): - if sys.platform not in ('win32', 'cygwin'): - return 0 - - if len(sys.argv) != 1: - print >> sys.stderr, 'Unexpected arguments.' - return 1 - - # Move to same location as .gclient. This is a no-op when run via gclient. - os.chdir(os.path.normpath(os.path.join(BASEDIR, '..\\..\\..\\..'))) - toolchain_dir = 'src\\third_party\\win_toolchain' - target_dir = os.path.join(toolchain_dir, 'files') - - sha1path = os.path.join(toolchain_dir, 'toolchain.sha1') - desired_hash = '' - if os.path.isfile(sha1path): - with open(sha1path, 'rb') as f: - desired_hash = f.read().strip() - - # If the current hash doesn't match what we want in the file, nuke and pave. - # Typically this script is only run when the .sha1 one file is updated, but - # directly calling "gclient runhooks" will also run it, so we cache - # based on timestamps to make that case fast. - current_hash = CalculateHash(target_dir) - if current_hash != desired_hash: - print 'Windows toolchain out of date or doesn\'t exist, updating...' - if os.path.isdir(target_dir): - subprocess.check_call('rmdir /s/q "%s"' % target_dir, shell=True) - subprocess.check_call([ - sys.executable, - 'src\\tools\\win\\toolchain\\toolchain2013.py', - '--targetdir', target_dir]) - current_hash = CalculateHash(target_dir) - if current_hash != desired_hash: - print >> sys.stderr, ( - 'Got wrong hash after pulling a new toolchain. ' - 'Wanted \'%s\', got \'%s\'.' % ( - desired_hash, current_hash)) - return 1 - SaveTimestampsAndHash(target_dir, current_hash) - - return 0 - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/tools/win/toolchain/toolchain2013.py b/tools/win/toolchain/toolchain2013.py deleted file mode 100644 index 9b886d4..0000000 --- a/tools/win/toolchain/toolchain2013.py +++ /dev/null @@ -1,229 +0,0 @@ -# Copyright 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Extracts a Windows VS2013 toolchain from various downloadable pieces. - - -from toolchain import * - - -def GetIsoUrl(pro): - """Get the .iso path.""" - prefix = 'http://download.microsoft.com/download/' - if pro: - return (prefix + - 'A/F/1/AF128362-A6A8-4DB3-A39A-C348086472CC/VS2013_RTM_PRO_ENU.iso') - else: - return (prefix + - '7/2/E/72E0F986-D247-4289-B9DC-C4FB07374894/VS2013_RTM_DskExp_ENU.iso') - - -def DownloadMainIso(url): - temp_dir = TempDir() - target_path = os.path.join(temp_dir, os.path.basename(url)) - Download(url, target_path) - return target_path - - -def GetSourceImage(local_dir, pro): - url = GetIsoUrl(pro) - if local_dir: - return os.path.join(local_dir, os.path.basename(url)) - else: - return DownloadMainIso(url) - - -def ExtractMsiList(iso_dir, packages): - results = [] - for (package, skippable) in packages: - path_to_package = os.path.join(iso_dir, 'packages', package) - if not os.path.exists(path_to_package) and skippable: - sys.stdout.write('Pro-only %s skipped.\n' % package) - continue - results.append(ExtractMsi(path_to_package)) - return results - - -def ExtractComponents(image): - extracted_iso = ExtractIso(image) - results = ExtractMsiList(extracted_iso, [ - (r'vcRuntimeAdditional_amd64\vc_runtimeAdditional_x64.msi', False), - (r'vcRuntimeAdditional_x86\vc_runtimeAdditional_x86.msi', False), - (r'vcRuntimeDebug_amd64\vc_runtimeDebug_x64.msi', False), - (r'vcRuntimeDebug_x86\vc_runtimeDebug_x86.msi', False), - (r'vcRuntimeMinimum_amd64\vc_runtimeMinimum_x64.msi', False), - (r'vcRuntimeMinimum_x86\vc_runtimeMinimum_x86.msi', False), - (r'vc_compilerCore86\vc_compilerCore86.msi', False), - (r'vc_compilerCore86res\vc_compilerCore86res.msi', False), - (r'vc_compilerx64nat\vc_compilerx64nat.msi', True), - (r'vc_compilerx64natres\vc_compilerx64natres.msi', True), - (r'vc_compilerx64x86\vc_compilerx64x86.msi', True), - (r'vc_compilerx64x86res\vc_compilerx64x86res.msi', True), - (r'vc_librarycore86\vc_librarycore86.msi', False), - (r'vc_libraryDesktop\x64\vc_LibraryDesktopX64.msi', False), - (r'vc_libraryDesktop\x86\vc_LibraryDesktopX86.msi', False), - (r'vc_libraryextended\vc_libraryextended.msi', True), - (r'Windows_SDK\Windows Software Development Kit-x86_en-us.msi', False), - ('Windows_SDK\\' - r'Windows Software Development Kit for Metro style Apps-x86_en-us.msi', - False), - ]) - return results - - -def CopyToFinalLocation(extracted_dirs, target_dir): - sys.stdout.write('Copying to final location...\n') - mappings = { - 'Program Files\\Microsoft Visual Studio 12.0\\': '.\\', - 'Windows Kits\\8.0\\': 'win8sdk\\', - 'System64\\': 'sys64\\', - 'System\\': 'sys32\\', - } - matches = [] - for extracted_dir in extracted_dirs: - for root, dirnames, filenames in os.walk(extracted_dir): - for filename in filenames: - matches.append((extracted_dir, os.path.join(root, filename))) - - copies = [] - for prefix, full_path in matches: - partial_path = full_path[len(prefix) + 1:] # +1 for trailing \ - #print 'partial_path', partial_path - for map_from, map_to in mappings.iteritems(): - #print 'map_from:', map_from, ', map_to:', map_to - if partial_path.startswith(map_from): - target_path = os.path.join(map_to, partial_path[len(map_from):]) - copies.append((full_path, os.path.join(target_dir, target_path))) - - for full_source, full_target in copies: - target_dir = os.path.dirname(full_target) - if not os.path.isdir(target_dir): - os.makedirs(target_dir) - shutil.copy2(full_source, full_target) - - -def GenerateSetEnvCmd(target_dir, pro): - """Generate a batch file that gyp expects to exist to set up the compiler - environment. This is normally generated by a full install of the SDK, but we - do it here manually since we do not do a full install.""" - with open(os.path.join( - target_dir, r'win8sdk\bin\SetEnv.cmd'), 'w') as file: - file.write('@echo off\n') - file.write(':: Generated by tools\\win\\toolchain\\toolchain2013.py.\n') - # Common to x86 and x64 - file.write('set PATH=%~dp0..\\..\\Common7\\IDE;%PATH%\n') - file.write('set INCLUDE=%~dp0..\\..\\win8sdk\\Include\\um;' - '%~dp0..\\..\\win8sdk\\Include\\shared;' - '%~dp0..\\..\\VC\\include;' - '%~dp0..\\..\\VC\\atlmfc\\include\n') - file.write('if "%1"=="/x64" goto x64\n') - - # x86. If we're Pro, then use the amd64_x86 cross (we don't support x86 - # host at all). - if pro: - file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x86;' - '%~dp0..\\..\\VC\\bin\\amd64_x86;' - '%~dp0..\\..\\VC\\bin\\amd64;' # Needed for mspdb120.dll. - '%PATH%\n') - else: - file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x86;' - '%~dp0..\\..\\VC\\bin;%PATH%\n') - file.write('set LIB=%~dp0..\\..\\VC\\lib;' - '%~dp0..\\..\\win8sdk\\Lib\\win8\\um\\x86;' - '%~dp0..\\..\\VC\\atlmfc\\lib\n') - file.write('goto done\n') - - # Express does not include a native 64 bit compiler, so we have to use - # the x86->x64 cross. - if not pro: - # x86->x64 cross. - file.write(':x64\n') - file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x64;' - '%~dp0..\\..\\VC\\bin\\x86_amd64;' - '%PATH%\n') - else: - # x64 native. - file.write(':x64\n') - file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x64;' - '%~dp0..\\..\\VC\\bin\\amd64;' - '%PATH%\n') - file.write('set LIB=%~dp0..\\..\\VC\\lib\\amd64;' - '%~dp0..\\..\\win8sdk\\Lib\\win8\\um\\x64;' - '%~dp0..\\..\\VC\\atlmfc\\lib\\amd64\n') - file.write(':done\n') - - -def GenerateTopLevelEnv(target_dir, pro): - """Generate a batch file that sets up various environment variables that let - the Chromium build files and gyp find SDKs and tools.""" - with open(os.path.join(target_dir, r'env.bat'), 'w') as file: - file.write('@echo off\n') - file.write(':: Generated by tools\\win\\toolchain\\toolchain2013.py.\n') - file.write('set GYP_DEFINES=windows_sdk_path="%~dp0win8sdk" ' - 'component=shared_library\n') - file.write('set GYP_MSVS_VERSION=2013%s\n' % '' if pro else 'e') - file.write('set GYP_MSVS_OVERRIDE_PATH=%~dp0\n') - file.write('set GYP_GENERATORS=ninja\n') - file.write('set WindowsSDKDir=%~dp0win8sdk\n') - paths = [ - r'Debug_NonRedist\x64\Microsoft.VC120.DebugCRT', - r'Debug_NonRedist\x86\Microsoft.VC120.DebugCRT', - r'x64\Microsoft.VC120.CRT', - r'x86\Microsoft.VC120.CRT', - ] - additions = ';'.join(('%~dp0' + x) for x in paths) - file.write('set PATH=%s;%%PATH%%\n' % additions) - file.write('echo Environment set for toolchain in %~dp0.\n') - file.write('cd /d %~dp0..\n') - - -def main(): - parser = OptionParser() - parser.add_option('--targetdir', metavar='DIR', - help='put toolchain into DIR', - default=os.path.abspath('win_toolchain_2013')) - parser.add_option('--noclean', action='store_false', dest='clean', - help='do not remove temp files', - default=True) - parser.add_option('--local', metavar='DIR', - help='use downloaded files from DIR') - parser.add_option('--express', metavar='EXPRESS', - help='use VS Express instead of Pro', action='store_true') - options, args = parser.parse_args() - try: - target_dir = os.path.abspath(options.targetdir) - if os.path.exists(target_dir): - sys.stderr.write('%s already exists. Please [re]move it or use ' - '--targetdir to select a different target.\n' % - target_dir) - return 1 - pro = not options.express - # Set the working directory to 7z subdirectory. 7-zip doesn't find its - # 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(os.path.dirname(os.path.abspath(__file__)), '7z')) - image = GetSourceImage(options.local, pro) - extracted = ExtractComponents(image) - CopyToFinalLocation(extracted, target_dir) - - GenerateSetEnvCmd(target_dir, pro) - GenerateTopLevelEnv(target_dir, pro) - finally: - if options.clean: - DeleteAllTempDirs() - - sys.stdout.write( - '\nIn a (clean) cmd shell, you can now run\n\n' - ' %s\\env.bat\n\n' - 'then\n\n' - " gclient runhooks (or gclient sync if you haven't pulled deps yet)\n" - ' ninja -C out\Debug chrome\n\n' - 'Note that this script intentionally does not modify any global\n' - 'settings like the registry, or system environment variables, so you\n' - 'will need to run the above env.bat whenever you start a new\n' - 'shell.\n\n' % target_dir) - - -if __name__ == '__main__': - main() |