* Add linux/arm64 support to bazel rules * Make linux arm64 sha optional and PR feedback Not all releases have linux shas. Use getattr to default to no sha if none was present. This way non linux arm64 builds should not fail. * Update linux arm64 sha for 3.1.33 This is the latest arm64 release according to #1204. There do not seem to be a any releases between .21 and .33.
205 lines
6.9 KiB
Python
205 lines
6.9 KiB
Python
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
|
load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "npm_install")
|
|
load(":revisions.bzl", "EMSCRIPTEN_TAGS")
|
|
|
|
def _parse_version(v):
|
|
return [int(u) for u in v.split(".")]
|
|
|
|
BUILD_FILE_CONTENT_TEMPLATE = """
|
|
package(default_visibility = ['//visibility:public'])
|
|
|
|
filegroup(
|
|
name = "includes",
|
|
srcs = glob([
|
|
"emscripten/cache/sysroot/include/c++/v1/**",
|
|
"emscripten/cache/sysroot/include/compat/**",
|
|
"emscripten/cache/sysroot/include/**",
|
|
"lib/clang/17/include/**",
|
|
]),
|
|
)
|
|
|
|
filegroup(
|
|
name = "emcc_common",
|
|
srcs = [
|
|
"emscripten/emcc.py",
|
|
"emscripten/emscripten.py",
|
|
"emscripten/emscripten-version.txt",
|
|
"emscripten/cache/sysroot_install.stamp",
|
|
"emscripten/src/settings.js",
|
|
"emscripten/src/settings_internal.js",
|
|
] + glob(
|
|
include = [
|
|
"emscripten/third_party/**",
|
|
"emscripten/tools/**",
|
|
],
|
|
exclude = [
|
|
"**/__pycache__/**",
|
|
],
|
|
),
|
|
)
|
|
|
|
filegroup(
|
|
name = "compiler_files",
|
|
srcs = [
|
|
"bin/clang{bin_extension}",
|
|
"bin/clang++{bin_extension}",
|
|
":emcc_common",
|
|
":includes",
|
|
],
|
|
)
|
|
|
|
filegroup(
|
|
name = "linker_files",
|
|
srcs = [
|
|
"bin/clang{bin_extension}",
|
|
"bin/llvm-ar{bin_extension}",
|
|
"bin/llvm-dwarfdump{bin_extension}",
|
|
"bin/llvm-nm{bin_extension}",
|
|
"bin/llvm-objcopy{bin_extension}",
|
|
"bin/wasm-ctor-eval{bin_extension}",
|
|
"bin/wasm-emscripten-finalize{bin_extension}",
|
|
"bin/wasm-ld{bin_extension}",
|
|
"bin/wasm-metadce{bin_extension}",
|
|
"bin/wasm-opt{bin_extension}",
|
|
"bin/wasm-split{bin_extension}",
|
|
"bin/wasm2js{bin_extension}",
|
|
":emcc_common",
|
|
] + glob(
|
|
include = [
|
|
"emscripten/cache/sysroot/lib/**",
|
|
"emscripten/node_modules/**",
|
|
"emscripten/src/**",
|
|
],
|
|
),
|
|
)
|
|
|
|
filegroup(
|
|
name = "ar_files",
|
|
srcs = [
|
|
"bin/llvm-ar{bin_extension}",
|
|
"emscripten/emar.py",
|
|
"emscripten/emscripten-version.txt",
|
|
"emscripten/src/settings.js",
|
|
"emscripten/src/settings_internal.js",
|
|
] + glob(
|
|
include = [
|
|
"emscripten/tools/**",
|
|
],
|
|
exclude = [
|
|
"**/__pycache__/**",
|
|
],
|
|
),
|
|
)
|
|
"""
|
|
|
|
def emscripten_deps(emscripten_version = "latest"):
|
|
version = emscripten_version
|
|
|
|
if version == "latest":
|
|
version = reversed(sorted(EMSCRIPTEN_TAGS.keys(), key = _parse_version))[0]
|
|
|
|
if version not in EMSCRIPTEN_TAGS.keys():
|
|
error_msg = "Emscripten version {} not found.".format(version)
|
|
error_msg += " Look at @emsdk//:revisions.bzl for the list "
|
|
error_msg += "of currently supported versions."
|
|
fail(error_msg)
|
|
|
|
revision = EMSCRIPTEN_TAGS[version]
|
|
|
|
emscripten_url = "https://storage.googleapis.com/webassembly/emscripten-releases-builds/{}/{}/wasm-binaries{}.{}"
|
|
|
|
# This could potentially backfire for projects with multiple emscripten
|
|
# dependencies that use different emscripten versions
|
|
excludes = native.existing_rules().keys()
|
|
if "nodejs_toolchains" not in excludes:
|
|
# Node 16 is the first version that supports darwin_arm64
|
|
node_repositories(
|
|
node_version = "16.6.2",
|
|
)
|
|
|
|
if "emscripten_bin_linux" not in excludes:
|
|
http_archive(
|
|
name = "emscripten_bin_linux",
|
|
strip_prefix = "install",
|
|
url = emscripten_url.format("linux", revision.hash, "", "tbz2"),
|
|
sha256 = revision.sha_linux,
|
|
build_file_content = BUILD_FILE_CONTENT_TEMPLATE.format(bin_extension = ""),
|
|
type = "tar.bz2",
|
|
)
|
|
|
|
if "emscripten_bin_linux_arm64" not in excludes:
|
|
http_archive(
|
|
name = "emscripten_bin_linux_arm64",
|
|
strip_prefix = "install",
|
|
url = emscripten_url.format("linux", revision.hash, "-arm64", "tbz2"),
|
|
# Not all versions have a linux/arm64 release: https://github.com/emscripten-core/emsdk/issues/547
|
|
sha256 = getattr(revision, "sha_linux_arm64", None),
|
|
build_file_content = BUILD_FILE_CONTENT_TEMPLATE.format(bin_extension = ""),
|
|
type = "tar.bz2",
|
|
)
|
|
|
|
if "emscripten_bin_mac" not in excludes:
|
|
http_archive(
|
|
name = "emscripten_bin_mac",
|
|
strip_prefix = "install",
|
|
url = emscripten_url.format("mac", revision.hash, "", "tbz2"),
|
|
sha256 = revision.sha_mac,
|
|
build_file_content = BUILD_FILE_CONTENT_TEMPLATE.format(bin_extension = ""),
|
|
type = "tar.bz2",
|
|
)
|
|
|
|
if "emscripten_bin_mac_arm64" not in excludes:
|
|
http_archive(
|
|
name = "emscripten_bin_mac_arm64",
|
|
strip_prefix = "install",
|
|
url = emscripten_url.format("mac", revision.hash, "-arm64", "tbz2"),
|
|
sha256 = revision.sha_mac_arm64,
|
|
build_file_content = BUILD_FILE_CONTENT_TEMPLATE.format(bin_extension = ""),
|
|
type = "tar.bz2",
|
|
)
|
|
|
|
if "emscripten_bin_win" not in excludes:
|
|
http_archive(
|
|
name = "emscripten_bin_win",
|
|
strip_prefix = "install",
|
|
url = emscripten_url.format("win", revision.hash, "", "zip"),
|
|
sha256 = revision.sha_win,
|
|
build_file_content = BUILD_FILE_CONTENT_TEMPLATE.format(bin_extension = ".exe"),
|
|
type = "zip",
|
|
)
|
|
|
|
if "emscripten_npm_linux" not in excludes:
|
|
npm_install(
|
|
name = "emscripten_npm_linux",
|
|
package_json = "@emscripten_bin_linux//:emscripten/package.json",
|
|
package_lock_json = "@emscripten_bin_linux//:emscripten/package-lock.json",
|
|
)
|
|
|
|
if "emscripten_npm_linux_arm64" not in excludes:
|
|
npm_install(
|
|
name = "emscripten_npm_linux_arm64",
|
|
package_json = "@emscripten_bin_linux_arm64//:emscripten/package.json",
|
|
package_lock_json = "@emscripten_bin_linux_arm64//:emscripten/package-lock.json",
|
|
)
|
|
|
|
if "emscripten_npm_mac" not in excludes:
|
|
npm_install(
|
|
name = "emscripten_npm_mac",
|
|
package_json = "@emscripten_bin_mac//:emscripten/package.json",
|
|
package_lock_json = "@emscripten_bin_mac//:emscripten/package-lock.json",
|
|
)
|
|
|
|
if "emscripten_npm_mac_arm64" not in excludes:
|
|
npm_install(
|
|
name = "emscripten_npm_mac",
|
|
package_json = "@emscripten_bin_mac_arm64//:emscripten/package.json",
|
|
package_lock_json = "@emscripten_bin_mac_arm64//:emscripten/package-lock.json",
|
|
)
|
|
|
|
if "emscripten_npm_win" not in excludes:
|
|
npm_install(
|
|
name = "emscripten_npm_win",
|
|
package_json = "@emscripten_bin_win//:emscripten/package.json",
|
|
package_lock_json = "@emscripten_bin_win//:emscripten/package-lock.json",
|
|
)
|