diff --git a/bazel/test_external/BUILD b/bazel/test_external/BUILD index d824f09..4e69238 100644 --- a/bazel/test_external/BUILD +++ b/bazel/test_external/BUILD @@ -13,10 +13,14 @@ wasm_cc_binary( BASE_LINKOPTS = [ "--bind", # Enable embind "-sMODULARIZE", + "--pre-js", + "hello-embind-interface.js", ] RELEASE_OPTS = [ "--closure=1", # Run the closure compiler + # Tell closure about the externs file, so as not to minify our JS public API. + "--closure-args=--externs=$(location hello-embind-externs.js)" ] DEBUG_OPTS = [ @@ -36,6 +40,11 @@ config_setting( cc_binary( name = "hello-embind", srcs = ["hello-embind.cc"], + features = ["emcc_debug_link"], + additional_linker_inputs = [ + "hello-embind-externs.js", + "hello-embind-interface.js", + ], linkopts = select({ ":debug_opts": BASE_LINKOPTS + DEBUG_OPTS, ":release_opts": BASE_LINKOPTS + RELEASE_OPTS, @@ -50,3 +59,4 @@ wasm_cc_binary( name = "hello-embind-wasm", cc_target = ":hello-embind", ) + diff --git a/bazel/test_external/hello-embind-externs.js b/bazel/test_external/hello-embind-externs.js new file mode 100644 index 0000000..864d220 --- /dev/null +++ b/bazel/test_external/hello-embind-externs.js @@ -0,0 +1,2 @@ +// This file prevents customJSFunctionToTestClosure from being minified by the Closure compiler. +Module.customJSFunctionToTestClosure = function() {} \ No newline at end of file diff --git a/bazel/test_external/hello-embind-interface.js b/bazel/test_external/hello-embind-interface.js new file mode 100644 index 0000000..ddc4d2f --- /dev/null +++ b/bazel/test_external/hello-embind-interface.js @@ -0,0 +1,3 @@ +Module.customJSFunctionToTestClosure = function(firstParam, secondParam) { + console.log("This function adds two numbers to get", firstParam + secondParam); +} \ No newline at end of file diff --git a/test/test_bazel.sh b/test/test_bazel.sh index 5b06692..f52daa4 100755 --- a/test/test_bazel.sh +++ b/test/test_bazel.sh @@ -27,5 +27,8 @@ bazel build //hello-world:hello-world-wasm-simd cd test_external bazel build //:hello-world-wasm bazel build //:hello-embind-wasm --compilation_mode dbg # debug + # Test use of the closure compiler bazel build //:hello-embind-wasm --compilation_mode opt # release +# This function should not be minified if the externs file is loaded correctly. +grep "customJSFunctionToTestClosure" bazel-bin/hello-embind-wasm/hello-embind.js \ No newline at end of file