| #!/usr/bin/env python3 |
| # Copyright 2017 The Dart project authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Pulls down tools required to build Dart.""" |
| |
| import errno |
| import os |
| import platform |
| import subprocess |
| import sys |
| |
| THIS_DIR = os.path.abspath(os.path.dirname(__file__)) |
| DART_ROOT = os.path.abspath(os.path.join(THIS_DIR, '..', '..')) |
| BUILDTOOLS = os.path.join(DART_ROOT, 'buildtools') |
| TOOLS_BUILDTOOLS = os.path.join(DART_ROOT, 'tools', 'buildtools') |
| |
| sys.path.insert(0, os.path.join(DART_ROOT, 'tools')) |
| import find_depot_tools |
| |
| DEPOT_PATH = find_depot_tools.add_depot_tools_to_path() |
| |
| |
| def UpdateClangFormatOnWindows(): |
| sha1_file = os.path.join(TOOLS_BUILDTOOLS, 'win', 'clang-format.exe.sha1') |
| output_dir = os.path.join(BUILDTOOLS, 'win', 'clang-format.exe') |
| downloader_script = os.path.join(DEPOT_PATH, |
| 'download_from_google_storage.py') |
| download_cmd = [ |
| sys.executable, downloader_script, '--no_auth', '--no_resume', |
| '--quiet', '--platform=win', '--bucket', 'chromium-clang-format', '-s', |
| sha1_file, '-o', output_dir |
| ] |
| return subprocess.call(download_cmd) |
| |
| |
| def CreateSymlink(symlink, link_name): |
| try: |
| os.symlink(symlink, link_name) |
| except OSError as e: |
| if e.errno == errno.EEXIST: |
| os.remove(link_name) |
| os.symlink(symlink, link_name) |
| else: |
| raise e |
| |
| |
| # On Mac and Linux we symlink clang-format and gn to the place where |
| # 'git cl format' expects them to be. |
| def LinksForGitCLFormat(): |
| if sys.platform == 'darwin': |
| platform = 'darwin' |
| tools = 'mac' |
| toolchain = 'mac-x64' |
| elif sys.platform.startswith('linux'): |
| platform = 'linux' |
| tools = 'linux64' |
| toolchain = 'linux-x64' |
| else: |
| print('Unknown platform: ' + sys.platform) |
| return 1 |
| |
| clang_format = os.path.join(BUILDTOOLS, toolchain, 'clang', 'bin', |
| 'clang-format') |
| gn = os.path.join(BUILDTOOLS, 'gn') |
| dest_dir = os.path.join(BUILDTOOLS, tools) |
| if not os.path.exists(dest_dir): |
| os.makedirs(dest_dir) |
| clang_format_dest = os.path.join(dest_dir, 'clang-format') |
| gn_dest = os.path.join(dest_dir, 'gn') |
| CreateSymlink(clang_format, clang_format_dest) |
| CreateSymlink(gn, gn_dest) |
| return 0 |
| |
| |
| def main(argv): |
| arch_id = platform.machine() |
| # Don't try to download binaries if we're on an arm machine unless it is a |
| # Mac arm machine because the x64 binaries work using rosetta translation. |
| if ((arch_id.startswith('arm') and sys.platform != 'darwin') or |
| arch_id.startswith('aarch64')): |
| print('Not downloading buildtools binaries for ' + arch_id) |
| return 0 |
| if sys.platform.startswith('win'): |
| return UpdateClangFormatOnWindows() |
| return LinksForGitCLFormat() |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main(sys.argv)) |