| 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, |
| ) |