load(":crosstool.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-script-includes", srcs = [ "emar.sh", "emar.bat", "emcc.sh", "emcc.bat", "emscripten_config", "env.sh", "env.bat", "@emsdk//:binaries", "@emsdk//:node_modules", node_files, ], ) filegroup( name = "compile-emscripten", srcs = [":common-script-includes"], ) filegroup( name = "link-emscripten", srcs = [ "emcc_link.sh", "emcc_link.bat", "link_wrapper.py", ":common-script-includes", "@emsdk//:binaries", node_files, ], ) filegroup( name = "every-file", srcs = [ ":compile-emscripten", ":link-emscripten", "@emsdk//:binaries", node_files, ], ) filegroup(name = "empty") # dlmalloc.bc is implictly added by the emscripten toolchain cc_library(name = "malloc") emscripten_cc_toolchain_config_rule( name = "wasm", cpu = "wasm", em_config = "emscripten_config", emscripten_binaries = "@emsdk//:binaries", script_extension = select({ "@bazel_tools//src/conditions:host_windows": "bat", "//conditions:default": "sh", }), ) cc_toolchain( name = "cc-compiler-wasm", all_files = ":every-file", ar_files = ":common-script-includes", as_files = ":empty", compiler_files = ":compile-emscripten", dwp_files = ":empty", linker_files = ":link-emscripten", objcopy_files = ":empty", strip_files = ":empty", toolchain_config = "wasm", toolchain_identifier = "emscripten-wasm", ) cc_toolchain_suite( name = "everything", toolchains = { "wasm": ":cc-compiler-wasm", "wasm|emscripten": ":cc-compiler-wasm", }, ) py_binary( name = "wasm_binary", srcs = ["wasm_binary.py"], )