[Bazel] Support generating a secondary cache (#1405)
This is a working solution for generating a separate Emscripten cache.
Note that this requires an additional entry in the workspace as follows:
```starlark
load("@emsdk//:emscripten_cache.bzl", emsdk_emscripten_cache = "emscripten_cache")
emsdk_emscripten_cache()
```
When used like this, the default Emscripten cache will be used. However,
if the entry is as follows:
```starlark
load("@emsdk//:emscripten_cache.bzl", emsdk_emscripten_cache = "emscripten_cache")
emsdk_emscripten_cache(flags = ["--lto"])
```
Then embuilder will be called to build all system libraries and ports
(i.e., the `ALL` option to embuilder) with the LTO option enabled. This
can take awhile, so I have also made possible to specify which libraries
you want to build explicitly:
```starlark
load("@emsdk//:emscripten_cache.bzl", emsdk_emscripten_cache = "emscripten_cache")
emsdk_emscripten_cache(
flags = ["--lto"],
libraries = [
"crtbegin",
"libprintf_long_double-debug",
"libstubs-debug",
"libnoexit",
"libc-debug",
"libdlmalloc",
"libcompiler_rt",
"libc++-noexcept",
"libc++abi-debug-noexcept",
"libsockets"
]
)
```
Resolves #807, resolves #971, resolves #1099, resolves #1362, resolves
#1401
This commit is contained in:
committed by
GitHub
parent
7fbd555dbe
commit
82d41a76d3
23
bazel/emscripten_toolchain/default_config
Normal file
23
bazel/emscripten_toolchain/default_config
Normal file
@@ -0,0 +1,23 @@
|
||||
import os
|
||||
import platform
|
||||
|
||||
ROOT_DIR = os.environ["ROOT_DIR"]
|
||||
EMSCRIPTEN_ROOT = os.environ["EMSCRIPTEN"]
|
||||
BINARYEN_ROOT = os.path.join(ROOT_DIR, os.environ["EM_BIN_PATH"])
|
||||
LLVM_ROOT = os.path.join(BINARYEN_ROOT, "bin")
|
||||
FROZEN_CACHE = True
|
||||
|
||||
system = platform.system()
|
||||
|
||||
machine = "arm64" if platform.machine() in ('arm64', 'aarch64') else "amd64"
|
||||
nodejs_binary = "bin/nodejs/node.exe" if(system =="Windows") else "bin/node"
|
||||
NODE_JS = ROOT_DIR + "/external/nodejs_{}_{}/{}".format(system.lower(), machine, nodejs_binary)
|
||||
|
||||
|
||||
# This works around an issue with Bazel RBE where the symlinks in node_modules/.bin
|
||||
# are uploaded as the linked files, which means the cli.js cannot load its
|
||||
# dependencies from the expected locations.
|
||||
# See https://github.com/emscripten-core/emscripten/pull/16640 for more
|
||||
if system != "Windows":
|
||||
CLOSURE_COMPILER = [NODE_JS, os.path.join(EMSCRIPTEN_ROOT, "node_modules",
|
||||
"google-closure-compiler", "cli.js")]
|
||||
Reference in New Issue
Block a user