Skip to content

Commit

Permalink
Bump emscripten to 3.1.30 (2nd try) (#298)
Browse files Browse the repository at this point in the history
* Revert "Revert "Bump emscripten to 3.1.30 (#282)" (#291)"

This reverts commit a117e26.

* Also update clang version in the wrapper
  • Loading branch information
radekdoulik authored Feb 22, 2023
1 parent cec9f18 commit 9c29816
Show file tree
Hide file tree
Showing 27 changed files with 402 additions and 537 deletions.
11 changes: 5 additions & 6 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
test/test.py
test-mac:
macos:
xcode: "12.2.0"
xcode: "12.5.1"
environment:
EMSDK_NOTTY: "1"
# Without this, any `brew installl` command will result in self-update of
Expand Down Expand Up @@ -140,8 +140,7 @@ jobs:
- run:
name: install docker
command: apt-get update -q && apt-get install -q -y docker.io
- setup_remote_docker:
version: 19.03.13
- setup_remote_docker
# Build and test the tip-of-tree build of EMSDK
- run:
name: build
Expand All @@ -157,8 +156,7 @@ jobs:
- run:
name: install docker
command: apt-get update -q && apt-get install -q -y docker.io
- setup_remote_docker:
version: 19.03.13
- setup_remote_docker
- run:
name: build
command: make -C ./docker version=${CIRCLE_TAG} build
Expand Down Expand Up @@ -193,7 +191,7 @@ jobs:

test-bazel-mac:
macos:
xcode: "12.2.0"
xcode: "12.5.1"
environment:
EMSDK_NOTTY: "1"
HOMEBREW_NO_AUTO_UPDATE: "1"
Expand All @@ -213,6 +211,7 @@ jobs:
environment:
PYTHONUNBUFFERED: "1"
EMSDK_NOTTY: "1"
USE_BAZEL_VERSION: "5.4.0"
steps:
- checkout
- run:
Expand Down
1 change: 1 addition & 0 deletions bazel/.bazelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build --incompatible_enable_cc_toolchain_resolution
7 changes: 7 additions & 0 deletions bazel/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,10 @@ alias(
"//conditions:default": ":empty",
}),
)

platform(
name = "platform_wasm",
constraint_values = [
"@platforms//cpu:wasm32",
],
)
26 changes: 10 additions & 16 deletions bazel/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ emsdk_deps()
load("@emsdk//:emscripten_deps.bzl", emsdk_emscripten_deps = "emscripten_deps")
emsdk_emscripten_deps(emscripten_version = "2.0.31")
load("@emsdk//:toolchains.bzl", "register_emscripten_toolchains")
register_emscripten_toolchains()
```
The SHA1 hash in the above `strip_prefix` and `url` parameters correspond to the git revision of
[emsdk 2.0.31](https://github.com/emscripten-core/emsdk/releases/tag/2.0.31). To get access to
Expand All @@ -26,8 +29,13 @@ parameter of `emsdk_emscripten_deps()`. Supported versions are listed in `revisi

## Building

### Using wasm_cc_binary (preferred)
First, write a new rule wrapping your `cc_binary`.
Put the following line into your `.bazelrc`:

```
build --incompatible_enable_cc_toolchain_resolution
```

Then write a new rule wrapping your `cc_binary`.

```
load("@rules_cc//cc:defs.bzl", "cc_binary")
Expand All @@ -54,17 +62,3 @@ and all of its dependencies, and does not require amending `.bazelrc`. This
is the preferred way, since it also unpacks the resulting tarball.

See `test_external/` for an example using [embind](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html).

### Using --config=wasm

Put the following lines into your `.bazelrc`:
```
build:wasm --crosstool_top=@emsdk//emscripten_toolchain:everything
build:wasm --cpu=wasm
build:wasm --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
```

Simply pass `--config=wasm` when building a normal `cc_binary`. The result of
this build will be a tar archive containing any files produced by emscripten.
See the [Bazel documentation](https://docs.bazel.build/versions/main/tutorial/cc-toolchain-config.html)
for more details
4 changes: 4 additions & 0 deletions bazel/WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,7 @@ deps()
load(":emscripten_deps.bzl", "emscripten_deps")

emscripten_deps()

load(":toolchains.bzl", "register_emscripten_toolchains")

register_emscripten_toolchains()
7 changes: 2 additions & 5 deletions bazel/bazelrc
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
build:wasm --crosstool_top=//emscripten_toolchain:everything

build:wasm --cpu=wasm

build:wasm --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
build:wasm --incompatible_enable_cc_toolchain_resolution
build:wasm --platforms=@emsdk//:platform_wasm
30 changes: 22 additions & 8 deletions bazel/deps.bzl
Original file line number Diff line number Diff line change
@@ -1,11 +1,25 @@
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")

def deps():
excludes = native.existing_rules().keys()

if "build_bazel_rules_nodejs" not in excludes:
http_archive(
name = "build_bazel_rules_nodejs",
sha256 = "4501158976b9da216295ac65d872b1be51e3eeb805273e68c516d2eb36ae1fbb",
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/4.4.1/rules_nodejs-4.4.1.tar.gz"],
)
maybe(
http_archive,
name = "bazel_skylib",
sha256 = "c6966ec828da198c5d9adbaa94c05e3a1c7f21bd012a0b29ba8ddbccb2c93b0d",
urls = [
"https://github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz",
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz",
],
)
maybe(
http_archive,
name = "rules_nodejs",
sha256 = "08337d4fffc78f7fe648a93be12ea2fc4e8eb9795a4e6aa48595b66b34555626",
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.0/rules_nodejs-core-5.8.0.tar.gz"],
)
maybe(
http_archive,
name = "build_bazel_rules_nodejs",
sha256 = "dcc55f810142b6cf46a44d0180a5a7fb923c04a5061e2e8d8eb05ccccc60864b",
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.0/rules_nodejs-5.8.0.tar.gz"],
)
50 changes: 43 additions & 7 deletions bazel/emscripten_deps.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -14,41 +14,77 @@ filegroup(
"emscripten/cache/sysroot/include/c++/v1/**",
"emscripten/cache/sysroot/include/compat/**",
"emscripten/cache/sysroot/include/**",
"lib/clang/15.0.0/include/**",
"lib/clang/16/include/**",
]),
)
filegroup(
name = "compiler_files",
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 = [
"emscripten/emcc.py",
"bin/clang{bin_extension}",
"bin/llc{bin_extension}",
"bin/llvm-ar{bin_extension}",
"bin/llvm-nm{bin_extension}",
"bin/llvm-objcopy{bin_extension}",
"bin/wasm-emscripten-finalize{bin_extension}",
"bin/wasm-ld{bin_extension}",
"bin/wasm-opt{bin_extension}",
] + glob(["emscripten/node_modules/**"]),
"bin/wasm-metadce{bin_extension}",
":emcc_common",
] + glob(
include = [
"emscripten/cache/sysroot/lib/**",
"emscripten/node_modules/**",
"emscripten/src/**",
],
),
)
filegroup(
name = "ar_files",
srcs = [
"emscripten/emar.py",
"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__/**",
],
),
)
"""

Expand Down
16 changes: 9 additions & 7 deletions bazel/emscripten_toolchain/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
load(":crosstool.bzl", "emscripten_cc_toolchain_config_rule")
load(":toolchain.bzl", "emscripten_cc_toolchain_config_rule")

package(default_visibility = ["//visibility:public"])

# Name depends on rules_nodejs version being used.
# https://github.com/emscripten-core/emsdk/issues/1020
# https://github.com/bazelbuild/rules_nodejs/issues/3375
node_files = "@nodejs_host//:node_files" if existing_rule("@nodejs_host//:node_files") else "@nodejs//:node_files"

filegroup(
name = "common_files",
srcs = [
"emscripten_config",
"env.sh",
"env.bat",
node_files,
"@nodejs//:node_files",
],
)

Expand Down Expand Up @@ -86,6 +81,13 @@ cc_toolchain_suite(
},
)

toolchain(
name = "cc-toolchain-wasm",
target_compatible_with = ["@platforms//cpu:wasm32"],
toolchain = ":cc-compiler-wasm",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)

py_binary(
name = "wasm_binary",
srcs = ["wasm_binary.py"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,9 @@ def _impl(ctx):
name = "output_format_js",
enabled = True,
),
feature(
name = "wasm_standalone",
),
]

crosstool_default_flag_sets = [
Expand Down Expand Up @@ -911,7 +914,7 @@ def _impl(ctx):
"-iwithsysroot" + "/include/compat",
"-iwithsysroot" + "/include",
"-isystem",
emscripten_dir + "/lib/clang/15.0.0/include",
emscripten_dir + "/lib/clang/16/include",
],
),
# Inputs and outputs
Expand Down Expand Up @@ -1015,6 +1018,11 @@ def _impl(ctx):
flags = ["-Werror"],
features = ["wasm_warnings_as_errors"],
),
flag_set(
actions = all_link_actions,
flags = ["-sSTANDALONE_WASM"],
features = ["wasm_standalone"],
),
]

crosstool_default_env_sets = [
Expand Down Expand Up @@ -1073,7 +1081,7 @@ def _impl(ctx):
emscripten_dir + "/emscripten/cache/sysroot/include/c++/v1",
emscripten_dir + "/emscripten/cache/sysroot/include/compat",
emscripten_dir + "/emscripten/cache/sysroot/include",
emscripten_dir + "/lib/clang/15.0.0/include",
emscripten_dir + "/lib/clang/16/include",
]

artifact_name_patterns = []
Expand Down Expand Up @@ -1105,7 +1113,7 @@ emscripten_cc_toolchain_config_rule = rule(
attrs = {
"cpu": attr.string(mandatory = True, values = ["asmjs", "wasm"]),
"em_config": attr.label(mandatory = True, allow_single_file = True),
"emscripten_binaries": attr.label(mandatory = True),
"emscripten_binaries": attr.label(mandatory = True, cfg = "exec"),
"script_extension": attr.string(mandatory = True, values = ["sh", "bat"]),
},
provides = [CcToolchainConfigInfo],
Expand Down
14 changes: 13 additions & 1 deletion bazel/emscripten_toolchain/wasm_cc_binary.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,17 @@ def _wasm_transition_impl(settings, attr):
if attr.simd:
features.append("wasm_simd")

if attr.standalone:
features.append("wasm_standalone")

return {
"//command_line_option:compiler": "emscripten",
"//command_line_option:crosstool_top": "@emsdk//emscripten_toolchain:everything",
"//command_line_option:cpu": "wasm",
"//command_line_option:features": features,
"//command_line_option:dynamic_mode": "off",
"//command_line_option:linkopt": linkopts,
"//command_line_option:platforms": [],
"//command_line_option:platforms": ["@emsdk//:platform_wasm"],
"//command_line_option:custom_malloc": "@emsdk//emscripten_toolchain:malloc",
}

Expand Down Expand Up @@ -86,6 +89,9 @@ _WASM_BINARY_COMMON_ATTRS = {
"simd": attr.bool(
default = False,
),
"standalone": attr.bool(
default = False,
),
"_allowlist_function_transition": attr.label(
default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
),
Expand Down Expand Up @@ -163,7 +169,10 @@ def _wasm_cc_binary_legacy_impl(ctx):
)

_wasm_cc_binary = rule(
<<<<<<< HEAD
name = "wasm_cc_binary",
=======
>>>>>>> 3.1.30
implementation = _wasm_cc_binary_impl,
attrs = dict(
_WASM_BINARY_COMMON_ATTRS,
Expand Down Expand Up @@ -193,7 +202,10 @@ def _wasm_binary_legacy_outputs(name, cc_target):
return outputs

_wasm_cc_binary_legacy = rule(
<<<<<<< HEAD
name = "wasm_cc_binary",
=======
>>>>>>> 3.1.30
implementation = _wasm_cc_binary_legacy_impl,
attrs = _WASM_BINARY_COMMON_ATTRS,
outputs = _wasm_binary_legacy_outputs,
Expand Down
Loading

0 comments on commit 9c29816

Please sign in to comment.