From 35bf5f1787bcad6d347b78e48cb411a7eefacd40 Mon Sep 17 00:00:00 2001 From: Piotr Sikora Date: Tue, 18 Jan 2022 14:56:10 -0800 Subject: [PATCH 1/4] Update Emscripten to v3.1.1. Signed-off-by: Piotr Sikora --- BUILD | 2 +- README.md | 6 +++--- bazel/dep/deps.bzl | 28 ++++++++++------------------ bazel/wasm/wasm.bzl | 16 ++++++++++++++-- example/BUILD | 3 --- sdk_container.sh | 4 ++-- toolchain/cc_toolchain_config.bzl | 8 ++++---- toolchain/emcc.sh | 6 ++++-- 8 files changed, 38 insertions(+), 35 deletions(-) diff --git a/BUILD b/BUILD index ea654ea..f5b8ec3 100644 --- a/BUILD +++ b/BUILD @@ -104,7 +104,7 @@ proto_library( ) filegroup( - name = "jslib", + name = "proxy_wasm_intrinsics_js", srcs = [ "proxy_wasm_intrinsics.js", ], diff --git a/README.md b/README.md index a178431..dd5e416 100644 --- a/README.md +++ b/README.md @@ -175,8 +175,8 @@ sudo make install git clone https://github.com/emscripten-core/emsdk.git cd emsdk ./emsdk update-tags -./emsdk install 2.0.7 -./emsdk activate 2.0.7 +./emsdk install 3.1.1 +./emsdk activate 3.1.1 source ./emsdk\_env.sh ``` @@ -189,7 +189,7 @@ It is possible later versions will work, e.g. ./emsdk activate latest ``` -However 2.0.7 is known to work. +However 3.1.1 is known to work. ### Rebuilding the libprotobuf.a files diff --git a/bazel/dep/deps.bzl b/bazel/dep/deps.bzl index 0ec42e4..f2eeec5 100644 --- a/bazel/dep/deps.bzl +++ b/bazel/dep/deps.bzl @@ -13,34 +13,26 @@ # limitations under the License. load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file") +load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") def wasm_dependencies(): - _http_archive( + maybe( + http_archive, name = "emscripten_toolchain", build_file = "@proxy_wasm_cpp_sdk//:emscripten-toolchain.BUILD", patch_cmds = [ - "./emsdk install 2.0.7", - "./emsdk activate --embedded 2.0.7", + "./emsdk install 3.1.1", + "./emsdk activate --embedded 3.1.1", ], - strip_prefix = "emsdk-2.0.7", - url = "https://github.com/emscripten-core/emsdk/archive/2.0.7.tar.gz", - sha256 = "ce7a5c76e8b425aca874cea329fd9ac44b203b777053453b6a37b4496c5ce34f" + strip_prefix = "emsdk-3.1.1", + url = "https://github.com/emscripten-core/emsdk/archive/3.1.1.tar.gz", + sha256 = "3a4893f0bb8203469e1197aa235fc49ed6f5dd2d490e9244a6899a8ad860f3e6" ) - _http_archive( + maybe( + http_archive, name = "com_google_protobuf", sha256 = "77ad26d3f65222fd96ccc18b055632b0bfedf295cb748b712a98ba1ac0b704b2", strip_prefix = "protobuf-3.17.3", url = "https://github.com/protocolbuffers/protobuf/releases/download/v3.17.3/protobuf-all-3.17.3.tar.gz", ) - -def _http_archive(name, **kwargs): - existing_rule_keys = native.existing_rules().keys() - if name in existing_rule_keys: - # This repository has already been defined. - return - - http_archive( - name = name, - **kwargs - ) diff --git a/bazel/wasm/wasm.bzl b/bazel/wasm/wasm.bzl index eaa1b0e..a38ce73 100644 --- a/bazel/wasm/wasm.bzl +++ b/bazel/wasm/wasm.bzl @@ -68,15 +68,27 @@ wasm_cc_binary_rule = rule( attrs = _wasm_attrs(wasm_cc_transition), ) -def wasm_cc_binary(name, tags = [], **kwargs): +def wasm_cc_binary(name, additional_linker_inputs = [], linkopts = [], tags = [], deps = [], **kwargs): wasm_name = "_wasm_" + name kwargs.setdefault("visibility", ["//visibility:public"]) cc_binary( name = wasm_name, + additional_linker_inputs = additional_linker_inputs + [ + "@proxy_wasm_cpp_sdk//:proxy_wasm_intrinsics_js", + ], + linkopts = linkopts + [ + "--no-entry", + "--js-library=$(location @proxy_wasm_cpp_sdk//:proxy_wasm_intrinsics_js)", + "-sSTANDALONE_WASM", + "-sEXPORTED_FUNCTIONS=_malloc", + ], # Adding manual tag it won't be built in non-Wasm (e.g. x86_64 config) # when an wildcard is specified, but it will be built in Wasm configuration # when the wasm_binary below is built. - tags = ["manual"], + tags = tags + ["manual"], + deps = deps + [ + "@proxy_wasm_cpp_sdk//:proxy_wasm_intrinsics", + ], **kwargs ) diff --git a/example/BUILD b/example/BUILD index 82b05a3..1c85c28 100644 --- a/example/BUILD +++ b/example/BUILD @@ -5,7 +5,4 @@ licenses(["notice"]) # Apache 2 wasm_cc_binary( name = "http_wasm_example.wasm", srcs = ["http_wasm_example.cc"], - deps = [ - "@proxy_wasm_cpp_sdk//:proxy_wasm_intrinsics", - ], ) diff --git a/sdk_container.sh b/sdk_container.sh index daa5aff..0cab9e4 100755 --- a/sdk_container.sh +++ b/sdk_container.sh @@ -51,8 +51,8 @@ rm -rf protobuf git clone https://github.com/emscripten-core/emsdk.git cd emsdk ./emsdk update-tags -./emsdk install 2.0.7 -./emsdk activate 2.0.7 +./emsdk install 3.1.1 +./emsdk activate 3.1.1 source ./emsdk_env.sh cd diff --git a/toolchain/cc_toolchain_config.bzl b/toolchain/cc_toolchain_config.bzl index 288215a..50ee150 100644 --- a/toolchain/cc_toolchain_config.bzl +++ b/toolchain/cc_toolchain_config.bzl @@ -79,9 +79,9 @@ def _impl(ctx): flag_group( flags = [ "-isystem", - "external/emscripten_toolchain/upstream/emscripten/system/include/libcxx", + "external/emscripten_toolchain/upstream/emscripten/cache/sysroot/include/", "-isystem", - "external/emscripten_toolchain/upstream/emscripten/system/include/libc", + "external/emscripten_toolchain/upstream/lib/clang/14.0.0/include/", ], ), ], @@ -161,8 +161,8 @@ def _impl(ctx): # we just need to include them here so that bazel doesn't complain on # "this rule is missing dependency declarations for the following files included". cxx_builtin_include_directories = [ - "external/emscripten_toolchain/upstream/emscripten/system/include/libcxx", - "external/emscripten_toolchain/upstream/emscripten/system/include/libc", + "external/emscripten_toolchain/upstream/emscripten/cache/sysroot/include/", + "external/emscripten_toolchain/upstream/lib/clang/14.0.0/include/", ], features = [cxx17_feature, no_canonical_prefixes_feature, opt_feature], ) diff --git a/toolchain/emcc.sh b/toolchain/emcc.sh index b7e2181..e927fa2 100755 --- a/toolchain/emcc.sh +++ b/toolchain/emcc.sh @@ -18,7 +18,7 @@ set -euo pipefail . $(dirname $0)/common.sh -emcc --no-entry -s EXPORTED_FUNCTIONS=['_malloc'] "$@" +emcc "$@" # clang doesn't support `-no-canonical-system-headers` so sed it # find the .d file in the args and fix it: @@ -27,7 +27,9 @@ for arg in "$@" do if [ "${arg: -2}" == ".d" ]; then echo Fixing $arg - sed -e 's%[^ ]*/external/emscripten_toolchain/upstream/emscripten/system/%external/emscripten_toolchain/upstream/emscripten/system/%' $arg > $arg.tmp + sed -e 's%[^ ]*/tmp/emscripten_cache/sysroot/include/%external/emscripten_toolchain/upstream/emscripten/cache/sysroot/include/%' $arg > $arg.tmp + mv $arg.tmp $arg + sed -e 's%[^ ]*/external/emscripten_toolchain/upstream/lib/clang/%external/emscripten_toolchain/upstream/lib/clang/%' $arg > $arg.tmp mv $arg.tmp $arg # some zlib headers are treated as system headers sed -e 's%[^ ]*/external/zlib/%external/zlib/%' $arg > $arg.tmp From a73731c165ef60e54d650a59d170997fc786e5bb Mon Sep 17 00:00:00 2001 From: Piotr Sikora Date: Wed, 19 Jan 2022 10:38:36 -0800 Subject: [PATCH 2/4] review: wasm_cc_binary -> proxy_wasm_cc_binary. Signed-off-by: Piotr Sikora --- bazel/wasm/wasm.bzl | 5 ++++- example/BUILD | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bazel/wasm/wasm.bzl b/bazel/wasm/wasm.bzl index a38ce73..624b108 100644 --- a/bazel/wasm/wasm.bzl +++ b/bazel/wasm/wasm.bzl @@ -68,7 +68,10 @@ wasm_cc_binary_rule = rule( attrs = _wasm_attrs(wasm_cc_transition), ) -def wasm_cc_binary(name, additional_linker_inputs = [], linkopts = [], tags = [], deps = [], **kwargs): +def wasm_cc_binary(**kwargs): + fail("`wasm_cc_binary` is deprecated. Please use `proxy_wasm_cc_binary`.") + +def proxy_wasm_cc_binary(name, additional_linker_inputs = [], linkopts = [], tags = [], deps = [], **kwargs): wasm_name = "_wasm_" + name kwargs.setdefault("visibility", ["//visibility:public"]) cc_binary( diff --git a/example/BUILD b/example/BUILD index 1c85c28..705b1cf 100644 --- a/example/BUILD +++ b/example/BUILD @@ -1,8 +1,8 @@ -load("//bazel/wasm:wasm.bzl", "wasm_cc_binary") +load("//bazel/wasm:wasm.bzl", "proxy_wasm_cc_binary") licenses(["notice"]) # Apache 2 -wasm_cc_binary( +proxy_wasm_cc_binary( name = "http_wasm_example.wasm", srcs = ["http_wasm_example.cc"], ) From d96b2320264a2661bb2e02486dc2b4c940d82830 Mon Sep 17 00:00:00 2001 From: Piotr Sikora Date: Wed, 19 Jan 2022 11:02:18 -0800 Subject: [PATCH 3/4] review: remove unused import. Signed-off-by: Piotr Sikora --- bazel/dep/deps.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bazel/dep/deps.bzl b/bazel/dep/deps.bzl index f2eeec5..c4bafdb 100644 --- a/bazel/dep/deps.bzl +++ b/bazel/dep/deps.bzl @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file") +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") def wasm_dependencies(): From 3984ba489d0524a48150a37411fbc5dc04a7b66b Mon Sep 17 00:00:00 2001 From: Piotr Sikora Date: Wed, 19 Jan 2022 11:10:14 -0800 Subject: [PATCH 4/4] review: style. Signed-off-by: Piotr Sikora --- bazel/dep/deps.bzl | 2 +- bazel/wasm/wasm.bzl | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/bazel/dep/deps.bzl b/bazel/dep/deps.bzl index c4bafdb..8d49457 100644 --- a/bazel/dep/deps.bzl +++ b/bazel/dep/deps.bzl @@ -26,7 +26,7 @@ def wasm_dependencies(): ], strip_prefix = "emsdk-3.1.1", url = "https://github.com/emscripten-core/emsdk/archive/3.1.1.tar.gz", - sha256 = "3a4893f0bb8203469e1197aa235fc49ed6f5dd2d490e9244a6899a8ad860f3e6" + sha256 = "3a4893f0bb8203469e1197aa235fc49ed6f5dd2d490e9244a6899a8ad860f3e6", ) maybe( diff --git a/bazel/wasm/wasm.bzl b/bazel/wasm/wasm.bzl index 624b108..4e6870a 100644 --- a/bazel/wasm/wasm.bzl +++ b/bazel/wasm/wasm.bzl @@ -88,7 +88,9 @@ def proxy_wasm_cc_binary(name, additional_linker_inputs = [], linkopts = [], tag # Adding manual tag it won't be built in non-Wasm (e.g. x86_64 config) # when an wildcard is specified, but it will be built in Wasm configuration # when the wasm_binary below is built. - tags = tags + ["manual"], + tags = tags + [ + "manual", + ], deps = deps + [ "@proxy_wasm_cpp_sdk//:proxy_wasm_intrinsics", ],