|  | #!/usr/bin/env python3 | 
|  | # | 
|  | # Copyright (c) 2012 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. | 
|  |  | 
|  | """ | 
|  | This script is based on chromium/chromium/main/tools/clang/scripts/update.py. | 
|  |  | 
|  | It is used on Windows platforms to copy the correct msdia*.dll to the | 
|  | clang folder, as a "gclient hook". | 
|  | """ | 
|  |  | 
|  | import os | 
|  | import shutil | 
|  | import stat | 
|  | import sys | 
|  |  | 
|  | # Path constants. (All of these should be absolute paths.) | 
|  | THIS_DIR = os.path.abspath(os.path.dirname(__file__)) | 
|  | LLVM_BUILD_DIR = os.path.abspath(os.path.join(THIS_DIR, '..', 'buildtools', 'windows-x64', 'clang')) | 
|  |  | 
|  |  | 
|  | def GetDiaDll(): | 
|  | """Get the location of msdia*.dll for the platform.""" | 
|  |  | 
|  | # Bump after VC updates. | 
|  | DIA_DLL = { | 
|  | '2013': 'msdia120.dll', | 
|  | '2015': 'msdia140.dll', | 
|  | '2017': 'msdia140.dll', | 
|  | '2019': 'msdia140.dll', | 
|  | '2022': 'msdia140.dll', | 
|  | } | 
|  |  | 
|  | # Don't let vs_toolchain overwrite our environment. | 
|  | environ_bak = os.environ | 
|  |  | 
|  | sys.path.append(os.path.join(THIS_DIR, '..', '..', 'build')) | 
|  | import vs_toolchain | 
|  | win_sdk_dir = vs_toolchain.SetEnvironmentAndGetSDKDir() | 
|  | msvs_version = vs_toolchain.GetVisualStudioVersion() | 
|  |  | 
|  | if bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1'))): | 
|  | # Depot tools .zip layout: | 
|  | # \- DIA SDK | 
|  | # \- Windows Kits | 
|  | #   \- 10 | 
|  | #     \- ... # Location of `DEPOT_TOOLS_WIN_TOOLCHAIN` | 
|  | dia_path = os.path.join(win_sdk_dir, '..', '..', 'DIA SDK', 'bin', 'amd64') | 
|  | else: | 
|  | if 'GYP_MSVS_OVERRIDE_PATH' in os.environ: | 
|  | vs_path = os.environ['GYP_MSVS_OVERRIDE_PATH'] | 
|  | else: | 
|  | vs_path = vs_toolchain.DetectVisualStudioPath() | 
|  | dia_path = os.path.join(vs_path, 'DIA SDK', 'bin', 'amd64') | 
|  |  | 
|  | os.environ = environ_bak | 
|  | return os.path.join(dia_path, DIA_DLL[msvs_version]) | 
|  |  | 
|  |  | 
|  | def CopyFile(src, dst): | 
|  | """Copy a file from src to dst.""" | 
|  | print("Copying %s to %s" % (str(src), str(dst))) | 
|  | shutil.copy(src, dst) | 
|  |  | 
|  |  | 
|  | def CopyDiaDllTo(target_dir): | 
|  | # This script always wants to use the 64-bit msdia*.dll. | 
|  | dia_dll = GetDiaDll() | 
|  | CopyFile(dia_dll, target_dir) | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | CopyDiaDllTo(os.path.join(LLVM_BUILD_DIR, 'bin')) | 
|  | return 0 | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(main()) |