Mercurial
comparison third_party/emsdk/bazel/remote_emscripten_repository.bzl @ 179:8d17f6e6e290
[ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Thu, 22 Jan 2026 21:23:17 -0800 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 178:94705b5986b3 | 179:8d17f6e6e290 |
|---|---|
| 1 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") | |
| 2 load("@rules_cc//cc:defs.bzl", "cc_toolchain", "cc_toolchain_suite") | |
| 3 load(":emscripten_build_file.bzl", "EMSCRIPTEN_BUILD_FILE_CONTENT_TEMPLATE") | |
| 4 load(":revisions.bzl", "EMSCRIPTEN_TAGS") | |
| 5 load("//emscripten_toolchain:toolchain.bzl", "emscripten_cc_toolchain_config_rule") | |
| 6 | |
| 7 def remote_emscripten_repository( | |
| 8 name, | |
| 9 bin_extension, | |
| 10 **kwargs, | |
| 11 ): | |
| 12 """Imports an Emscripten from an http archive | |
| 13 | |
| 14 Args: | |
| 15 name: A unique name for this Emscripten repository. | |
| 16 bin_extension: Extension for the binaries in this Emscripten repository | |
| 17 **kwargs: Args for http_archive. Refer to http_archive documentation for more info. | |
| 18 """ | |
| 19 http_archive( | |
| 20 name = name, | |
| 21 build_file_content = EMSCRIPTEN_BUILD_FILE_CONTENT_TEMPLATE.format(bin_extension = bin_extension), | |
| 22 **kwargs | |
| 23 ) | |
| 24 | |
| 25 def emscripten_toolchain_name(name): | |
| 26 return "emscripten_{}".format(name) | |
| 27 | |
| 28 def _get_name_and_target(name): | |
| 29 return name, ":" + name | |
| 30 | |
| 31 def create_toolchains(name, repo_name, exec_compatible_with): | |
| 32 """Creates toolchain definition for an Emscripten | |
| 33 | |
| 34 Register the toolchains defined by this macro via | |
| 35 `register_toolchains("//<path-to-target>:cc-toolchain-wasm-<name>")` | |
| 36 | |
| 37 Args: | |
| 38 name: A unique name for this Emscripten toolchain | |
| 39 repo_name: The name of the Emscripten repository for this toolchain | |
| 40 exec_compatible_with: Execute platform constraints for the Emscripten toolchain associated | |
| 41 with this repository. | |
| 42 **kwargs: Args for http_archive. Refer to http_archive documentation for more info. | |
| 43 """ | |
| 44 common_files_name, common_files_target = _get_name_and_target("common_files_" + name) | |
| 45 compiler_files_name, compiler_files_target = _get_name_and_target("compiler_files_" + name) | |
| 46 linker_files_name, linker_files_target = _get_name_and_target("linker_files_" + name) | |
| 47 ar_files_name, ar_files_target = _get_name_and_target("ar_files_" + name) | |
| 48 all_files_name, all_files_target = _get_name_and_target("all_files_" + name) | |
| 49 cc_wasm_name, cc_wasm_target = _get_name_and_target("cc-compiler-wasm-" + name) | |
| 50 | |
| 51 wasm_name = "wasm-" + name | |
| 52 | |
| 53 # These are file groups defined by the build_file_content on the Emscripten http_archive | |
| 54 remote_repo = "@{}//".format(repo_name) | |
| 55 repo_compiler_files_target = remote_repo + ":compiler_files" | |
| 56 repo_linker_files_target = remote_repo + ":linker_files" | |
| 57 repo_ar_files_target = remote_repo + ":ar_files" | |
| 58 | |
| 59 native.filegroup( | |
| 60 name = common_files_name, | |
| 61 srcs = [ | |
| 62 "@emscripten_cache//:emscripten_config", | |
| 63 "@emsdk//emscripten_toolchain:env.sh", | |
| 64 "@emsdk//emscripten_toolchain:env.bat", | |
| 65 "@nodejs//:node_files", | |
| 66 ], | |
| 67 ) | |
| 68 | |
| 69 native.filegroup( | |
| 70 name = compiler_files_name, | |
| 71 srcs = [ | |
| 72 "@emsdk//emscripten_toolchain:emcc.sh", | |
| 73 "@emsdk//emscripten_toolchain:emcc.bat", | |
| 74 repo_compiler_files_target, | |
| 75 common_files_target, | |
| 76 ], | |
| 77 ) | |
| 78 | |
| 79 native.filegroup( | |
| 80 name = linker_files_name, | |
| 81 srcs = [ | |
| 82 "@emsdk//emscripten_toolchain:emcc_link.sh", | |
| 83 "@emsdk//emscripten_toolchain:emcc_link.bat", | |
| 84 "link_wrapper.py", | |
| 85 repo_linker_files_target, | |
| 86 common_files_target, | |
| 87 ], | |
| 88 ) | |
| 89 | |
| 90 native.filegroup( | |
| 91 name = ar_files_name, | |
| 92 srcs = [ | |
| 93 "@emsdk//emscripten_toolchain:emar.sh", | |
| 94 "@emsdk//emscripten_toolchain:emar.bat", | |
| 95 repo_ar_files_target, | |
| 96 common_files_target, | |
| 97 ], | |
| 98 ) | |
| 99 | |
| 100 native.filegroup( | |
| 101 name = all_files_name, | |
| 102 srcs = [ | |
| 103 ar_files_target, | |
| 104 compiler_files_target, | |
| 105 linker_files_target, | |
| 106 ], | |
| 107 ) | |
| 108 | |
| 109 emscripten_cc_toolchain_config_rule( | |
| 110 name = wasm_name, | |
| 111 cpu = "wasm", | |
| 112 em_config = "@emscripten_cache//:emscripten_config", | |
| 113 emscripten_binaries = repo_compiler_files_target, | |
| 114 nodejs_bin = "@nodejs//:node", | |
| 115 script_extension = select({ | |
| 116 "@bazel_tools//src/conditions:host_windows": "bat", | |
| 117 "//conditions:default": "sh", | |
| 118 }), | |
| 119 ) | |
| 120 | |
| 121 cc_toolchain( | |
| 122 name = cc_wasm_name, | |
| 123 all_files = all_files_target, | |
| 124 ar_files = ar_files_target, | |
| 125 as_files = ":empty", | |
| 126 compiler_files = compiler_files_target, | |
| 127 dwp_files = ":empty", | |
| 128 linker_files = linker_files_target, | |
| 129 objcopy_files = ":empty", | |
| 130 strip_files = ":empty", | |
| 131 toolchain_config = wasm_name, | |
| 132 toolchain_identifier = "emscripten-wasm-" + name, | |
| 133 ) | |
| 134 | |
| 135 native.toolchain( | |
| 136 name = "cc-toolchain-wasm-" + name, | |
| 137 target_compatible_with = ["@platforms//cpu:wasm32"], | |
| 138 exec_compatible_with = exec_compatible_with, | |
| 139 toolchain = cc_wasm_target, | |
| 140 toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", | |
| 141 ) | |
| 142 | |
| 143 cc_toolchain_suite( | |
| 144 name = "everything-" + name, | |
| 145 toolchains = { | |
| 146 "wasm": cc_wasm_target, | |
| 147 "wasm|emscripten": cc_wasm_target, | |
| 148 }, | |
| 149 ) |