| #!/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()) |