100 lines
3.1 KiB
Python
100 lines
3.1 KiB
Python
load(":remote_emscripten_repository.bzl", "remote_emscripten_repository")
|
|
load(":revisions.bzl", "EMSCRIPTEN_TAGS")
|
|
|
|
def _parse_version(v):
|
|
return [int(u) for u in v.split(".")]
|
|
|
|
def _empty_repository_impl(ctx):
|
|
ctx.file("MODULE.bazel", """module(name = "{}")""".format(ctx.name))
|
|
ctx.file("BUILD.bazel", "")
|
|
|
|
_empty_repository = repository_rule(
|
|
implementation = _empty_repository_impl,
|
|
)
|
|
|
|
def emscripten_repo_name(name):
|
|
return "emscripten_bin_{}".format(name)
|
|
|
|
def _emscripten_deps_impl(ctx):
|
|
version = None
|
|
|
|
for mod in ctx.modules:
|
|
for config in mod.tags.config:
|
|
if config.version and version != None:
|
|
fail("More than one emscripten version specified!")
|
|
version = config.version
|
|
if version == None:
|
|
version = "latest"
|
|
|
|
if version == "latest":
|
|
version = reversed(sorted(EMSCRIPTEN_TAGS.keys(), key = _parse_version))[0]
|
|
|
|
revision = EMSCRIPTEN_TAGS[version]
|
|
|
|
emscripten_url = "https://storage.googleapis.com/webassembly/emscripten-releases-builds/{}/{}/wasm-binaries{}.{}"
|
|
|
|
remote_emscripten_repository(
|
|
name = emscripten_repo_name("linux"),
|
|
bin_extension = "",
|
|
sha256 = revision.sha_linux,
|
|
strip_prefix = "install",
|
|
type = "tar.xz",
|
|
url = emscripten_url.format("linux", revision.hash, "", "tar.xz"),
|
|
)
|
|
|
|
# Not all versions have a linux/arm64 release: https://github.com/emscripten-core/emsdk/issues/547
|
|
if hasattr(revision, "sha_linux_arm64"):
|
|
remote_emscripten_repository(
|
|
name = emscripten_repo_name("linux_arm64"),
|
|
bin_extension = "",
|
|
sha256 = revision.sha_linux_arm64,
|
|
strip_prefix = "install",
|
|
type = "tar.xz",
|
|
url = emscripten_url.format("linux", revision.hash, "-arm64", "tar.xz"),
|
|
)
|
|
else:
|
|
_empty_repository(
|
|
name = emscripten_repo_name("linux_arm64"),
|
|
)
|
|
|
|
remote_emscripten_repository(
|
|
name = emscripten_repo_name("mac"),
|
|
bin_extension = "",
|
|
sha256 = revision.sha_mac,
|
|
strip_prefix = "install",
|
|
type = "tar.xz",
|
|
url = emscripten_url.format("mac", revision.hash, "", "tar.xz"),
|
|
)
|
|
|
|
remote_emscripten_repository(
|
|
name = emscripten_repo_name("mac_arm64"),
|
|
bin_extension = "",
|
|
sha256 = revision.sha_mac_arm64,
|
|
strip_prefix = "install",
|
|
type = "tar.xz",
|
|
url = emscripten_url.format("mac", revision.hash, "-arm64", "tar.xz"),
|
|
)
|
|
|
|
remote_emscripten_repository(
|
|
name = emscripten_repo_name("win"),
|
|
bin_extension = ".exe",
|
|
sha256 = revision.sha_win,
|
|
strip_prefix = "install",
|
|
type = "zip",
|
|
url = emscripten_url.format("win", revision.hash, "", "zip"),
|
|
)
|
|
|
|
emscripten_deps = module_extension(
|
|
tag_classes = {
|
|
"config": tag_class(
|
|
attrs = {
|
|
"version": attr.string(
|
|
doc = "Version to use. 'latest' to use latest.",
|
|
values = ["latest"] + EMSCRIPTEN_TAGS.keys(),
|
|
),
|
|
},
|
|
),
|
|
},
|
|
implementation = _emscripten_deps_impl,
|
|
)
|