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..8d49457 100644 --- a/bazel/dep/deps.bzl +++ b/bazel/dep/deps.bzl @@ -12,35 +12,27 @@ # 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(): - _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..4e6870a 100644 --- a/bazel/wasm/wasm.bzl +++ b/bazel/wasm/wasm.bzl @@ -68,15 +68,32 @@ wasm_cc_binary_rule = rule( attrs = _wasm_attrs(wasm_cc_transition), ) -def wasm_cc_binary(name, tags = [], **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( 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..705b1cf 100644 --- a/example/BUILD +++ b/example/BUILD @@ -1,11 +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"], - 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