65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
""" 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,
|
|
)
|