summaryrefslogtreecommitdiffstats
path: root/tools/win
diff options
context:
space:
mode:
authorscottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-05 17:09:15 +0000
committerscottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-05 17:09:15 +0000
commit0f089e5fe219e9502fc966675caadf9cd22970b4 (patch)
treef1a05d93ea9584263c80f2031934dbd4c8136f7e /tools/win
parent409b46cad7f4fd721e410d2aaeb0c3bc3efe84aa (diff)
downloadchromium_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.py138
-rw-r--r--tools/win/toolchain/toolchain2013.py229
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()