Skip to content

Commit

Permalink
Bump emscripten to 3.1.30 (#282)
Browse files Browse the repository at this point in the history
* [bazel] Set CLOSURE_COMPILER to workaround RBE+symlinks issue (#1037)

* [bazel] Set CLOSURE_COMPILER to workaround RBE+symlinks issue

* space

* specify node_js

* 3.1.10 (#1046)

* Optimize sandbox performance (#1045)

* Optimize sandbox performance

Link just the files needed to compile, link, or archive, rather than the entire directory tree. This drastically improves build times on macOS, where the sandbox is known to be slow (bazelbuild/bazel#8230).

* Linux wants clang to link

* all_files not needed?

* Linux wants llc

* And llvm-ar

* Templated build_file_content

* include node modules glob with linker files. also some minor formatting fixes. (#1052)

* Using bazelisk on macOS CI (#1049)

* Explicit outputs for wasm_cc_binary (#1047)

* Explicit outputs for wasm_cc_binary

* Backwards compatibility

* data_runfiles restore

* restore test_bazel.sh

* Using wrong path on accident

* two separate rules for legacy support

* Added name attribute to wasm_cc_binary rule

* 3.1.11 (#1053)

* 3.1.12 (#1054)

* 3.1.13 (#1055)

* [bazel] Add additional files necessary for building with closure and on RBE (#1057)

* 3.1.14 (#1061)

* 3.1.15 (#1066)

* Pin `latest` to a specific version for arm64-linux (#1065)

Fixes: #1040

* 3.1.16 (emscripten-core#1071)

* 3.1.17 (emscripten-core#1076)

* Exclude msys from path fix function. (emscripten-core#1078)

Fixes: #911

* 3.1.18 (emscripten-core#1081)

* 3.1.18

* Update LLVM include path in Bazel files

* Version 3.1.18-2 (emscripten-core#1083)

3.1.18 had a bad release binary on ARM64 Mac so push an updated version of the release.

* 3.1.19 (emscripten-core#1090)

* Add EMSDK_QUIET to make emsdk_env less chatting (emscripten-core#1091)

Without this the recommended way to silence emsdk_env was to pipe its
stderr to /dev/null.. but then you also loose potentially useful error
message.

Fixes: #946

* 3.1.20 (emscripten-core#1095)

* Add double-quotes to allow spaces in path (emscripten-core#1097)

* 3.1.21 (emscripten-core#1101)

* Update latest-arm64-linux to 3.1.21 (emscripten-core#1102)

* Update XCode version on CircleCI (emscripten-core#1103)

12.2 is being deprecated

* 3.1.22 (emscripten-core#1107)

* 3.1.23 (emscripten-core#1111)

* Avoid exporting EM_CONFIG for modern SDK versions (emscripten-core#1110)

Newer versions of emscipten, starting all the way back in 1.39.13, can
automatically locate the `.emscripten` config file that emsdk creates so
there is no need for the explicit EM_CONFIG environment variable.  Its
redundant and adds unnessary noisce/complexity.

Really, adding emcc to the PATH is all the is needed these days.

One nice thing about this change is that it allows folks to run
whichever emcc they want to and have it just work, even if they have
configured emsdk.   Without this change, if I activate emsdk and I run
`some/other/emcc` then emsdk's `EM_CONFIG` will still be present and
override the configuration embedded in `some/other/emcc`.

e.g. in the same shell, with emsdk activated, I can run both these
commands and have them both just work as expected.

```
$ emcc --version
$ /path/to/my/emcc --version
```

* Use x64 version for Windows on Arm (emscripten-core#1115)

* 3.1.24 (emscripten-core#1122)

* 3.1.25 (emscripten-core#1130)

* [bazel] Switch to platforms-based toolchain resolution (#1036)

* remove "name" attribute from bazel rules (emscripten-core#1131)

* 3.1.26 (emscripten-core#1134)

* Update remote_docker version in CircleCI config (emscripten-core#1117)

20.10.17 is the current default.

* docker image: Change base to Ubuntu 22.04 LTS (jammy) (emscripten-core#1135)

Done to upgrade from CMake 3.16.3 to 3.22.1. CMake 3.21 or newer is needed to build the Qt 6.4.1 sources with emscripten.

Also update to libidn12 to resolve an "Unable to locate package libidn11" error.

* 3.1.27 (emscripten-core#1139)

* Use constants for fixed paths. NFC (emscripten-core#1140)

* Add standalone_wasm feature to bazel emscripten_toolchain (emscripten-core#1145)

* 3.1.28 (emscripten-core#1149)

* Upgrade to rules_nodejs 5.8.0 (emscripten-core#1150)

Fixes emscripten-core#1020

* 3.1.29 (emscripten-core#1160)

* Pin Windows CI to Bazel 5.4.0 (emscripten-core#1163)

* Remove reference to fastcomp-latest. NFC (emscripten-core#1164)

fastcomp can only be install using explicit versions names so this name
doesn't work.

* Remove fastcomp SDK and fastcomp build rules. NFC (emscripten-core#1165)

Folks that want to work with fastcomp will now need to use an older
checkout of emsdk.

* 3.1.30 (emscripten-core#1167)

* Bump emscripten to 3.1.30

* Bump clang version

* Do not include test directory

* Update eng/emsdk.proj

Co-authored-by: Alexander Köplinger <[email protected]>

---------

Co-authored-by: Kevin Lubick <[email protected]>
Co-authored-by: Sam Clegg <[email protected]>
Co-authored-by: John Firebaugh <[email protected]>
Co-authored-by: walkingeyerobot <[email protected]>
Co-authored-by: Ezekiel Warren <[email protected]>
Co-authored-by: Heejin Ahn <[email protected]>
Co-authored-by: Tim Ebbeke <[email protected]>
Co-authored-by: Derek Schuff <[email protected]>
Co-authored-by: Joel Van Eenwyk <[email protected]>
Co-authored-by: Pierrick Bouvier <[email protected]>
Co-authored-by: Trevor Hickey <[email protected]>
Co-authored-by: Fredrik Orderud <[email protected]>
Co-authored-by: Robbert van Ginkel <[email protected]>
Co-authored-by: Alexander Köplinger <[email protected]>
  • Loading branch information
15 people authored Feb 7, 2023
1 parent 3ae16c4 commit f55ecf5
Show file tree
Hide file tree
Showing 26 changed files with 399 additions and 534 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 f55ecf5

Please sign in to comment.