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