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 )