Chromium Code Reviews| Index: build/vs_toolchain.py |
| diff --git a/build/vs_toolchain.py b/build/vs_toolchain.py |
| index 247703b8654094dd91eb4767eff3593eaa5561e7..6dadb7e3dbddc2825a541cf794d005994c2d6592 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 UpdateOnly(): |
|
Dirk Pranke
2014/04/08 20:50:57
Nit: It's not clear to me what "UpdateOnly" means;
scottmg
2014/04/08 20:53:03
Done.
|
| + """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': UpdateOnly, |
| + '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__': |