mirror of
https://github.com/dart-lang/sdk
synced 2024-09-06 00:59:09 +00:00
![Josh Soref](/assets/img/avatar_default.png)
Closes https://github.com/dart-lang/sdk/pull/50773 GitOrigin-RevId: 8f729bf80cce3c39b788a61591f14db234297186 Change-Id: I5a07bf96a2f8920560983fda504000c39e598e05 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276560 Reviewed-by: Srujan Gaddam <srujzs@google.com> Reviewed-by: Jonas Termansen <sortie@google.com> Reviewed-by: Erik Ernst <eernst@google.com>
91 lines
2.9 KiB
Python
Executable file
91 lines
2.9 KiB
Python
Executable file
#!/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))
|