""" Helpers to download a recent clang release.""" def _get_platform_folder(os_name): os_name = os_name.lower() if os_name.startswith("windows"): return "Win" if os_name.startswith("mac os"): return "Mac" if not os_name.startswith("linux"): fail("Unknown platform") return "Linux_x64" def _download_chromium_clang( repo_ctx, platform_folder, package_version, sha256, out_folder): cds_url = "https://commondatastorage.googleapis.com/chromium-browser-clang" cds_file = "clang-%s.tgz" % package_version cds_full_url = "{0}/{1}/{2}".format(cds_url, platform_folder, cds_file) repo_ctx.download_and_extract(cds_full_url, output = out_folder, sha256 = sha256) def download_clang(repo_ctx, out_folder): """ Download a fresh clang release and put it into out_folder. Clang itself will be located in 'out_folder/bin/clang'. We currently download one of the latest releases of clang by the Chromium project (see https://chromium.googlesource.com/chromium/src/+/master/docs/clang.md). Args: repo_ctx: An instance of repository_context object. out_folder: A folder to extract the compiler into. """ # TODO(ibiryukov): we currently download and extract some extra tools in the # clang release (e.g., sanitizers). We should probably remove the ones # we don't need and document the ones we want provide in addition to clang. # Latest CLANG_REVISION and CLANG_SUB_REVISION of the Chromiums's release # can be found in https://chromium.googlesource.com/chromium/src/tools/clang/+/master/scripts/update.py CLANG_REVISION = "b4160cb94c54f0b31d0ce14694950dac7b6cd83f" CLANG_SVN_REVISION = "371856" CLANG_SUB_REVISION = 1 package_version = "%s-%s-%s" % ( CLANG_SVN_REVISION, CLANG_REVISION[:8], CLANG_SUB_REVISION, ) checksums = { "Linux_x64": "919c19df3ebd7db03b72575b2de5198404357659fc8c85c2d66e679ad4acbafe", "Mac": "5632c516f3ac5fab3654d0a874688cad6c7f99b96845da27ab12336a14187aa2", "Win": "235545b33f4d697190032cb538fdcaba227017c95b752ea8af8f29aab8da7479", } platform_folder = _get_platform_folder(repo_ctx.os.name) _download_chromium_clang( repo_ctx, platform_folder, package_version, checksums[platform_folder], out_folder, )