Mercurial
diff third_party/emsdk/bazel/emscripten_deps.bzl @ 179:8d17f6e6e290
[ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Thu, 22 Jan 2026 21:23:17 -0800 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/third_party/emsdk/bazel/emscripten_deps.bzl Thu Jan 22 21:23:17 2026 -0800 @@ -0,0 +1,99 @@ +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, +)