github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/third_party/clang_toolchain/download_clang.bzl (about)

     1  """ Helpers to download a recent clang release."""
     2  
     3  def _get_platform_folder(os_name):
     4      os_name = os_name.lower()
     5      if os_name.startswith("windows"):
     6          return "Win"
     7      if os_name.startswith("mac os"):
     8          return "Mac"
     9      if not os_name.startswith("linux"):
    10          fail("Unknown platform")
    11      return "Linux_x64"
    12  
    13  def _download_chromium_clang(
    14          repo_ctx,
    15          platform_folder,
    16          package_version,
    17          sha256,
    18          out_folder):
    19      cds_url = "https://commondatastorage.googleapis.com/chromium-browser-clang"
    20      cds_file = "clang-%s.tgz" % package_version
    21      cds_full_url = "{0}/{1}/{2}".format(cds_url, platform_folder, cds_file)
    22      repo_ctx.download_and_extract(cds_full_url, output = out_folder, sha256 = sha256)
    23  
    24  def download_clang(repo_ctx, out_folder):
    25      """ Download a fresh clang release and put it into out_folder.
    26  
    27      Clang itself will be located in 'out_folder/bin/clang'.
    28      We currently download one of the latest releases of clang by the
    29      Chromium project (see
    30      https://chromium.googlesource.com/chromium/src/+/master/docs/clang.md).
    31  
    32      Args:
    33        repo_ctx: An instance of repository_context object.
    34        out_folder: A folder to extract the compiler into.
    35      """
    36      # TODO(ibiryukov): we currently download and extract some extra tools in the
    37      # clang release (e.g., sanitizers). We should probably remove the ones
    38      # we don't need and document the ones we want provide in addition to clang.
    39  
    40      # Latest CLANG_REVISION and CLANG_SUB_REVISION of the Chromiums's release
    41      # can be found in https://chromium.googlesource.com/chromium/src/tools/clang/+/master/scripts/update.py
    42      CLANG_REVISION = "348507"
    43      CLANG_SUB_REVISION = 1
    44  
    45      package_version = "%s-%s" % (CLANG_REVISION, CLANG_SUB_REVISION)
    46  
    47      checksums = {
    48          "Linux_x64": "85a24f215737af91e0054d3a1cb435bd8ff06178cef14241c029c8a04ff16a79",
    49          "Mac": "16a96a3c4b599d0418e812307087a223d5fee2ee3c7fd96f5cbc2a9e5bf8607d",
    50          "Win": "4c144f24d3a82d546845c680f5b029ff02dd4de7614e93d1b21cfc6e20a26dad",
    51      }
    52  
    53      platform_folder = _get_platform_folder(repo_ctx.os.name)
    54      _download_chromium_clang(
    55          repo_ctx,
    56          platform_folder,
    57          package_version,
    58          checksums[platform_folder],
    59          out_folder,
    60      )