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

Unified Diff: build/vs_toolchain.py

Issue 226643011: Split toolchain update and install lookup to make generation faster (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rename to Update Created 6 years, 8 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 | « build/gyp_chromium ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/vs_toolchain.py
diff --git a/build/vs_toolchain.py b/build/vs_toolchain.py
index 247703b8654094dd91eb4767eff3593eaa5561e7..4b925f0799f2ade1abbb97834b44ebdddc591a85 100644
--- a/build/vs_toolchain.py
+++ b/build/vs_toolchain.py
@@ -8,7 +8,6 @@ import pipes
import shutil
import subprocess
import sys
-import tempfile
script_dir = os.path.dirname(os.path.realpath(__file__))
@@ -16,46 +15,23 @@ chrome_src = os.path.abspath(os.path.join(script_dir, os.pardir))
SRC_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(1, os.path.join(chrome_src, 'tools'))
sys.path.insert(0, os.path.join(chrome_src, 'tools', 'gyp', 'pylib'))
+json_data_file = os.path.join(script_dir, 'win_toolchain.json')
import gyp
-def GetDesiredVsToolchainHashes():
- """Load a list of SHA1s corresponding to the toolchains that we want installed
- to build with."""
- sha1path = os.path.join(script_dir, 'toolchain_vs2013.hash')
- with open(sha1path, 'rb') as f:
- return f.read().strip().splitlines()
-
-
-def DownloadVsToolchain():
- """Download the Visual Studio toolchain on Windows.
-
- If on Windows, request that depot_tools install/update the automatic
- toolchain, and then use it (unless opted-out) and return a tuple containing
- the x64 and x86 paths. Otherwise return None.
+def SetEnvironmentAndGetRuntimeDllDirs():
+ """Sets up os.environ to use the depot_tools VS toolchain with gyp, and
+ returns the location of the VS runtime DLLs so they can be copied into
+ the output directory after gyp generation.
"""
vs2013_runtime_dll_dirs = None
depot_tools_win_toolchain = \
bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1')))
if sys.platform in ('win32', 'cygwin') and depot_tools_win_toolchain:
- import find_depot_tools
- depot_tools_path = find_depot_tools.add_depot_tools_to_path()
- temp_handle, data_file = tempfile.mkstemp(suffix='.json')
- os.close(temp_handle)
- get_toolchain_args = [
- sys.executable,
- os.path.join(depot_tools_path,
- 'win_toolchain',
- 'get_toolchain_if_necessary.py'),
- '--output-json', data_file,
- ] + GetDesiredVsToolchainHashes()
- subprocess.check_call(get_toolchain_args)
-
- with open(data_file, 'r') as tempf:
+ with open(json_data_file, 'r') as tempf:
toolchain_data = json.load(tempf)
- os.unlink(data_file)
toolchain = toolchain_data['path']
version = toolchain_data['version']
@@ -132,18 +108,58 @@ def CopyVsRuntimeDlls(output_dir, runtime_dirs):
copy_runtime(out_release_nacl64, x64, 'msvc%s120.dll')
+def _GetDesiredVsToolchainHashes():
+ """Load a list of SHA1s corresponding to the toolchains that we want installed
+ to build with."""
+ sha1path = os.path.join(script_dir, 'toolchain_vs2013.hash')
+ with open(sha1path, 'rb') as f:
+ return f.read().strip().splitlines()
+
+
+def Update():
+ """Requests an update of the toolchain to the specific hashes we have at
+ this revision. The update outputs a .json of the various configuration
+ information required to pass to gyp which we use in |GetToolchainDir()|.
+ """
+ depot_tools_win_toolchain = \
+ bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1')))
+ if sys.platform in ('win32', 'cygwin') and depot_tools_win_toolchain:
+ import find_depot_tools
+ depot_tools_path = find_depot_tools.add_depot_tools_to_path()
+ json_data_file = os.path.join(script_dir, 'win_toolchain.json')
+ get_toolchain_args = [
+ sys.executable,
+ os.path.join(depot_tools_path,
+ 'win_toolchain',
+ 'get_toolchain_if_necessary.py'),
+ '--output-json', json_data_file,
+ ] + _GetDesiredVsToolchainHashes()
+ subprocess.check_call(get_toolchain_args)
+
+ return 0
+
+
+def GetToolchainDir():
+ """Gets location information about the current toolchain (must have been
+ previously updated by 'update')."""
+ SetEnvironmentAndGetRuntimeDllDirs()
+ print '["%s", "%s"]' % (
+ os.environ['GYP_MSVS_OVERRIDE_PATH'], os.environ['WINDOWSSDKDIR'])
+
+
def main():
- if len(sys.argv) < 2:
- print >>sys.stderr, 'Expected either "get_toolchain_dir" or "copy_dlls"'
+ if not sys.platform.startswith(('win32', 'cygwin')):
+ return 0
+ commands = {
+ 'update': Update,
+ 'get_toolchain_dir': GetToolchainDir,
+ # TODO(scottmg): Add copy_dlls for GN builds (gyp_chromium calls
+ # CopyVsRuntimeDlls via import, currently).
+ }
+ if len(sys.argv) < 2 or sys.argv[1] not in commands:
+ print >>sys.stderr, 'Expected one of: %s' % ', '.join(commands)
return 1
- if sys.argv[1] == 'get_toolchain_dir':
- DownloadVsToolchain()
- print '["%s", "%s"]' % (
- os.environ['GYP_MSVS_OVERRIDE_PATH'], os.environ['WINDOWSSDKDIR'])
- else:
- print >>sys.stderr, 'TODO: not implemented "%s"' % sys.argv[1]
- return 1
- return 0
+ return commands[sys.argv[1]]()
if __name__ == '__main__':
« no previous file with comments | « build/gyp_chromium ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698