arudradey commited on
Commit
00df61d
·
verified ·
1 Parent(s): 299a8ae

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .circleci/config.yml +388 -0
  2. .dockerignore +21 -0
  3. .flake8 +24 -0
  4. .gitattributes +220 -0
  5. .github/workflows/create-release.yml +40 -0
  6. .github/workflows/tag-release.yml +78 -0
  7. .gitignore +36 -0
  8. LICENSE +27 -0
  9. README.md +246 -0
  10. SECURITY.md +16 -0
  11. bazel/.bazelrc +1 -0
  12. bazel/.gitignore +1 -0
  13. bazel/BUILD +19 -0
  14. bazel/MODULE.bazel +40 -0
  15. bazel/MODULE.bazel.lock +698 -0
  16. bazel/README.md +89 -0
  17. bazel/bazelrc +2 -0
  18. bazel/emscripten_build_file.bzl +93 -0
  19. bazel/emscripten_cache.bzl +113 -0
  20. bazel/emscripten_deps.bzl +99 -0
  21. bazel/emscripten_toolchain/BUILD.bazel +69 -0
  22. bazel/emscripten_toolchain/default_config +16 -0
  23. bazel/emscripten_toolchain/emar.bat +5 -0
  24. bazel/emscripten_toolchain/emar.sh +5 -0
  25. bazel/emscripten_toolchain/emcc.bat +5 -0
  26. bazel/emscripten_toolchain/emcc.sh +5 -0
  27. bazel/emscripten_toolchain/emcc_link.bat +5 -0
  28. bazel/emscripten_toolchain/emcc_link.sh +5 -0
  29. bazel/emscripten_toolchain/env.bat +7 -0
  30. bazel/emscripten_toolchain/env.sh +6 -0
  31. bazel/emscripten_toolchain/link_wrapper.py +164 -0
  32. bazel/emscripten_toolchain/platform_info.bzl +22 -0
  33. bazel/emscripten_toolchain/toolchain.bzl +1194 -0
  34. bazel/emscripten_toolchain/wasm_binary.py +56 -0
  35. bazel/emscripten_toolchain/wasm_cc_binary.bzl +221 -0
  36. bazel/emscripten_toolchain/wasm_rules.bzl +6 -0
  37. bazel/hello-world/BUILD +23 -0
  38. bazel/hello-world/hello-world-simd.cc +10 -0
  39. bazel/hello-world/hello-world.cc +6 -0
  40. bazel/remote_emscripten_repository.bzl +148 -0
  41. bazel/revisions.bzl +949 -0
  42. bazel/test_external/.bazelrc +1 -0
  43. bazel/test_external/.gitignore +4 -0
  44. bazel/test_external/BUILD +66 -0
  45. bazel/test_external/MODULE.bazel +6 -0
  46. bazel/test_external/MODULE.bazel.lock +902 -0
  47. bazel/test_external/hello-embind-externs.js +2 -0
  48. bazel/test_external/hello-embind-interface.js +3 -0
  49. bazel/test_external/hello-embind.cc +16 -0
  50. bazel/test_external/hello-world.cc +6 -0
.circleci/config.yml ADDED
@@ -0,0 +1,388 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: 2.1
2
+
3
+ orbs:
4
+ win: circleci/windows@5.0
5
+
6
+ executors:
7
+ ubuntu:
8
+ docker:
9
+ - image: buildpack-deps:jammy
10
+ mac_arm64:
11
+ environment:
12
+ EMSDK_NOTTY: "1"
13
+ # Without this, any `brew install` command will result in self-update of
14
+ # brew itself which takes more than 4 minutes.
15
+ HOMEBREW_NO_AUTO_UPDATE: "1"
16
+ macos:
17
+ # Corresponds to macOS 13.2.1
18
+ # See https://circleci.com/docs/guides/execution-managed/using-macos/#supported-xcode-versions
19
+ xcode: "14.3.1"
20
+ resource_class: m4pro.medium
21
+ linux_arm64:
22
+ machine:
23
+ image: ubuntu-2004:2023.07.1
24
+ resource_class: arm.medium
25
+
26
+ commands:
27
+ setup-macos:
28
+ steps:
29
+ - checkout
30
+ - run:
31
+ name: Install CMake
32
+ command: brew install cmake
33
+ test-macos:
34
+ steps:
35
+ - run:
36
+ name: test.sh
37
+ command: test/test.sh
38
+ - run:
39
+ name: test.py
40
+ command: |
41
+ source emsdk_env.sh
42
+ test/test.py
43
+ setup-docker:
44
+ steps:
45
+ - run:
46
+ name: install docker
47
+ command: |
48
+ apt-get update -q
49
+ apt-get install -q -y ca-certificates curl gnupg lsb-release
50
+ mkdir -p /etc/apt/keyrings
51
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
52
+ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
53
+ apt-get update -q
54
+ apt-get install -q -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
55
+ test-bazel-linux:
56
+ steps:
57
+ - checkout
58
+ - run:
59
+ name: install bazelisk
60
+ command: |
61
+ wget https://github.com/bazelbuild/bazelisk/releases/download/v1.25.0/bazelisk-linux-amd64
62
+ chmod +x bazelisk-linux-amd64
63
+ mv bazelisk-linux-amd64 /usr/local/bin/bazel
64
+ - run: test/test_bazel.sh
65
+ test-bazel-mac:
66
+ steps:
67
+ - checkout
68
+ - run:
69
+ name: install bazelisk
70
+ command: |
71
+ brew install bazelisk
72
+ - run: test/test_bazel_mac.sh
73
+ test-bazel-windows:
74
+ steps:
75
+ - checkout
76
+ - run:
77
+ name: Download Bazelisk
78
+ shell: powershell.exe
79
+ command: |
80
+ $ProgressPreference = "SilentlyContinue"
81
+ Invoke-WebRequest -Uri https://github.com/bazelbuild/bazelisk/releases/download/v1.10.1/bazelisk-windows-amd64.exe -OutFile ( New-Item -Path "temp\bazel\bazel.exe" -Force )
82
+ - run:
83
+ name: Run Tests
84
+ shell: powershell.exe
85
+ command: |
86
+ $env:Path += ";C:\Python27amd64;$pwd\temp\bazel"
87
+ .\test\test_bazel.ps1
88
+
89
+ jobs:
90
+ lint:
91
+ executor: ubuntu
92
+ steps:
93
+ - checkout
94
+ - restore_cache:
95
+ keys:
96
+ - v1-lint-deps-{{ arch }}-{{ checksum "requirements-dev.txt" }}
97
+ - run:
98
+ name: install python deps
99
+ command: |
100
+ # Check if packages are already installed from cache
101
+ if python3 -m flake8 --version >/dev/null 2>&1 && \
102
+ python3 -m ruff --version >/dev/null 2>&1; then
103
+ echo "Packages already installed from cache, skipping pip install"
104
+ else
105
+ echo "Installing packages"
106
+ apt-get update -q
107
+ apt-get install -q -y python3-pip
108
+ python3 -m pip install --upgrade pip
109
+ python3 -m pip install -r requirements-dev.txt
110
+ fi
111
+ - save_cache:
112
+ key: v1-lint-deps-{{ arch }}-{{ checksum "requirements-dev.txt" }}
113
+ paths:
114
+ - ~/.cache/pip
115
+ - run:
116
+ name: python lint
117
+ command: |
118
+ python3 -m flake8 --show-source --statistics --extend-exclude=./scripts
119
+ python3 -m ruff check
120
+ test-linux:
121
+ executor: ubuntu
122
+ environment:
123
+ EMSDK_NOTTY: "1"
124
+ # This is needed because the old gcc-7 that is installed on debian/bionic
125
+ # generates warnings about unused variables when doing C++17
126
+ # destructuring:
127
+ # https://github.com/WebAssembly/binaryen/issues/4353
128
+ CXXFLAGS: "-Wno-unused-variable"
129
+ # I don't know why circleci VMs pretent to have 36 cores but its a lie.
130
+ EMSDK_NUM_CORES: "4"
131
+ steps:
132
+ - checkout
133
+ - run:
134
+ name: Install debian packages
135
+ command: apt-get update -q && apt-get install -q -y cmake build-essential openjdk-8-jre-headless ksh zsh
136
+ - run: test/test_node_path.sh
137
+ - run: test/test.sh
138
+ - run: test/test_source_env.sh
139
+ - run:
140
+ name: test.py
141
+ command: |
142
+ source emsdk_env.sh
143
+ test/test.py
144
+ test-linux-arm64:
145
+ executor: linux_arm64
146
+ steps:
147
+ - checkout
148
+ - run:
149
+ name: Install debian packages
150
+ command: sudo apt-get update -q && sudo apt-get install -q cmake build-essential openjdk-8-jre-headless
151
+ - run: test/test.sh
152
+ test-mac-arm64:
153
+ executor: mac_arm64
154
+ steps:
155
+ - setup-macos
156
+ - test-macos
157
+ test-windows:
158
+ executor:
159
+ name: win/server-2019
160
+ shell: bash.exe
161
+ environment:
162
+ PYTHONUNBUFFERED: "1"
163
+ EMSDK_NOTTY: "1"
164
+ working_directory: ~/project with spaces
165
+ steps:
166
+ - checkout
167
+ - run: pwd
168
+ - run: where python
169
+ - run: pip install pip-system-certs
170
+ - run:
171
+ name: Install packages
172
+ command: choco install -y cmake.portable ninja pkgconfiglite
173
+
174
+ - run:
175
+ name: Install latest
176
+ shell: cmd.exe
177
+ command: test\test.bat
178
+
179
+ - run:
180
+ name: test.py
181
+ command: |
182
+ source emsdk_env.sh
183
+ python test/test.py
184
+
185
+ - run:
186
+ name: flagless (process/shell) test
187
+ shell: powershell.exe
188
+ command: |
189
+ test/test_activation.ps1
190
+
191
+ - run:
192
+ name: --permanent test
193
+ shell: powershell.exe
194
+ command: |
195
+ $env:PERMANENT_FLAG="--permanent"
196
+ test/test_activation.ps1
197
+
198
+ - run:
199
+ name: --system test
200
+ shell: powershell.exe
201
+ command: |
202
+ $env:SYSTEM_FLAG="--system"
203
+ test/test_activation.ps1
204
+
205
+ - run:
206
+ name: Process/Shell PATH preservation test
207
+ shell: powershell.exe
208
+ command: |
209
+ test/test_path_preservation.ps1
210
+
211
+ - run:
212
+ name: User PATH preservation test
213
+ shell: powershell.exe
214
+ command: |
215
+ $env:PERMANENT_FLAG="--permanent"
216
+ test/test_path_preservation.ps1
217
+
218
+ - run:
219
+ name: System PATH preservation test
220
+ shell: powershell.exe
221
+ command: |
222
+ $env:SYSTEM_FLAG="--system"
223
+ test/test_path_preservation.ps1
224
+
225
+ build-docker-image-x64:
226
+ executor: ubuntu
227
+ steps:
228
+ - checkout
229
+ - setup-docker
230
+ - setup_remote_docker
231
+ # Build the `latest` version of EMSDK as docker image
232
+ - run:
233
+ name: build
234
+ command: make -C ./docker version=latest build
235
+ - run:
236
+ name: test
237
+ command: make -C ./docker version=latest test
238
+
239
+ publish-docker-image-x64:
240
+ executor: ubuntu
241
+ steps:
242
+ - checkout
243
+ - setup-docker
244
+ - setup_remote_docker
245
+ - run:
246
+ name: build
247
+ command: make -C ./docker version=${CIRCLE_TAG} build
248
+ - run:
249
+ name: test
250
+ command: make -C ./docker version=${CIRCLE_TAG} test
251
+ - run:
252
+ name: push image
253
+ command: |
254
+ docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"
255
+ make -C ./docker version=${CIRCLE_TAG} tag=${CIRCLE_TAG}-x64 push
256
+
257
+ publish-docker-image-arm64:
258
+ executor: linux_arm64
259
+ steps:
260
+ - checkout
261
+ - run:
262
+ name: build
263
+ command: make -C ./docker version=${CIRCLE_TAG} build
264
+ - run:
265
+ name: test
266
+ command: make -C ./docker version=${CIRCLE_TAG} test
267
+ - run:
268
+ name: push image
269
+ command: |
270
+ docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"
271
+ make -C ./docker version=${CIRCLE_TAG} tag=${CIRCLE_TAG}-arm64 push
272
+
273
+ publish-docker-image-multiplatform:
274
+ executor: linux_arm64
275
+ steps:
276
+ - checkout
277
+ - run:
278
+ name: push image
279
+ command: |
280
+ docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"
281
+ make -C ./docker version=${CIRCLE_TAG} tag=${CIRCLE_TAG} push-multiplatform
282
+ make -C ./docker version=${CIRCLE_TAG} tag="latest" push-multiplatform
283
+
284
+ test-bazel-linux:
285
+ parameters:
286
+ bazel_version:
287
+ type: string
288
+ default: "latest"
289
+ executor: ubuntu
290
+ environment:
291
+ USE_BAZEL_VERSION: << parameters.bazel_version >>
292
+ steps:
293
+ - test-bazel-linux
294
+
295
+ test-bazel-mac-arm64:
296
+ parameters:
297
+ bazel_version:
298
+ type: string
299
+ default: "latest"
300
+ executor: mac_arm64
301
+ environment:
302
+ USE_BAZEL_VERSION: << parameters.bazel_version >>
303
+ steps:
304
+ - test-bazel-mac
305
+
306
+ test-bazel-windows:
307
+ parameters:
308
+ bazel_version:
309
+ type: string
310
+ default: "latest"
311
+ executor:
312
+ name: win/server-2019
313
+ shell: powershell.exe -ExecutionPolicy Bypass
314
+ environment:
315
+ PYTHONUNBUFFERED: "1"
316
+ EMSDK_NOTTY: "1"
317
+ USE_BAZEL_VERSION: << parameters.bazel_version >>
318
+ steps:
319
+ - test-bazel-windows
320
+
321
+ workflows:
322
+ lint:
323
+ jobs:
324
+ - lint
325
+ test-linux:
326
+ jobs:
327
+ - test-linux
328
+ test-linux-arm64:
329
+ jobs:
330
+ - test-linux-arm64
331
+ test-mac-arm64:
332
+ jobs:
333
+ - test-mac-arm64
334
+ test-windows:
335
+ jobs:
336
+ - test-windows
337
+ docker:
338
+ jobs:
339
+ - build-docker-image-x64
340
+ - publish-docker-image-x64:
341
+ filters:
342
+ branches:
343
+ ignore: /.*/
344
+ tags:
345
+ only: /.*/
346
+ - publish-docker-image-arm64:
347
+ filters:
348
+ branches:
349
+ ignore: /.*/
350
+ tags:
351
+ only: /.*/
352
+ - publish-docker-image-multiplatform:
353
+ filters:
354
+ tags:
355
+ only: /.*/
356
+ requires:
357
+ - publish-docker-image-x64
358
+ - publish-docker-image-arm64
359
+
360
+ test-bazel-linux:
361
+ jobs:
362
+ - test-bazel-linux:
363
+ matrix:
364
+ parameters:
365
+ bazel_version:
366
+ - "7.x"
367
+ - "8.x"
368
+ - "9.x"
369
+ test-bazel-mac-arm64:
370
+ jobs:
371
+ - test-bazel-mac-arm64:
372
+ matrix:
373
+ parameters:
374
+ bazel_version:
375
+ - "7.x"
376
+ - "8.x"
377
+ - "9.x"
378
+ test-bazel-windows:
379
+ jobs:
380
+ - test-bazel-windows:
381
+ matrix:
382
+ parameters:
383
+ # For some reason version resolution with "x.x" does not work on Windows,
384
+ # so we have to specify full versions.
385
+ bazel_version:
386
+ - "7.7.1"
387
+ - "8.5.1"
388
+ - "9.0.0"
.dockerignore ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Ignore everything
2
+ *
3
+
4
+ # Allow the entrypoint/test script inside the Docker container
5
+ !/docker/entrypoint.sh
6
+ !/docker/test_dockerimage.sh
7
+
8
+ # Allow license file
9
+ !LICENSE
10
+
11
+ # Allow necessary build files in top-level directory
12
+ !emscripten-releases-tags.json
13
+ !emsdk
14
+ !emsdk.py
15
+ !emsdk_env.sh
16
+ !emsdk_manifest.json
17
+
18
+ # Allow files required to install legacy versions
19
+ !legacy-binaryen-tags.txt
20
+ !legacy-emscripten-tags.txt
21
+ !llvm-tags-64bit.txt
.flake8 ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [flake8]
2
+ extend-exclude =
3
+ ./.*,
4
+ ./binaryen,
5
+ ./clang,
6
+ ./crunch,
7
+ ./downloads,
8
+ ./emscripten,
9
+ ./fastcomp-clang,
10
+ ./fastcomp,
11
+ ./git,
12
+ ./gnu,
13
+ ./llvm,
14
+ ./node,
15
+ ./python,
16
+ ./releases,
17
+ ./temp,
18
+ ./upstream,
19
+
20
+ # E111: Indentation is not a multiple of four
21
+ # E114: Indentation is not a multiple of four (comment)
22
+ extend-ignore = E111, E114
23
+
24
+ max-line-length = 326
.gitattributes CHANGED
@@ -33,3 +33,223 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ node/22.16.0_64bit/bin/node filter=lfs diff=lfs merge=lfs -text
37
+ upstream/bin/clang filter=lfs diff=lfs merge=lfs -text
38
+ upstream/bin/clang++ filter=lfs diff=lfs merge=lfs -text
39
+ upstream/bin/clang-23 filter=lfs diff=lfs merge=lfs -text
40
+ upstream/bin/clang-scan-deps filter=lfs diff=lfs merge=lfs -text
41
+ upstream/bin/lld filter=lfs diff=lfs merge=lfs -text
42
+ upstream/bin/llvm-addr2line filter=lfs diff=lfs merge=lfs -text
43
+ upstream/bin/llvm-ar filter=lfs diff=lfs merge=lfs -text
44
+ upstream/bin/llvm-cov filter=lfs diff=lfs merge=lfs -text
45
+ upstream/bin/llvm-cxxfilt filter=lfs diff=lfs merge=lfs -text
46
+ upstream/bin/llvm-dwarfdump filter=lfs diff=lfs merge=lfs -text
47
+ upstream/bin/llvm-dwp filter=lfs diff=lfs merge=lfs -text
48
+ upstream/bin/llvm-nm filter=lfs diff=lfs merge=lfs -text
49
+ upstream/bin/llvm-objcopy filter=lfs diff=lfs merge=lfs -text
50
+ upstream/bin/llvm-objdump filter=lfs diff=lfs merge=lfs -text
51
+ upstream/bin/llvm-profdata filter=lfs diff=lfs merge=lfs -text
52
+ upstream/bin/llvm-ranlib filter=lfs diff=lfs merge=lfs -text
53
+ upstream/bin/llvm-readobj filter=lfs diff=lfs merge=lfs -text
54
+ upstream/bin/llvm-size filter=lfs diff=lfs merge=lfs -text
55
+ upstream/bin/llvm-strings filter=lfs diff=lfs merge=lfs -text
56
+ upstream/bin/llvm-strip filter=lfs diff=lfs merge=lfs -text
57
+ upstream/bin/llvm-symbolizer filter=lfs diff=lfs merge=lfs -text
58
+ upstream/bin/wasm-as filter=lfs diff=lfs merge=lfs -text
59
+ upstream/bin/wasm-ctor-eval filter=lfs diff=lfs merge=lfs -text
60
+ upstream/bin/wasm-dis filter=lfs diff=lfs merge=lfs -text
61
+ upstream/bin/wasm-emscripten-finalize filter=lfs diff=lfs merge=lfs -text
62
+ upstream/bin/wasm-fuzz-lattices filter=lfs diff=lfs merge=lfs -text
63
+ upstream/bin/wasm-fuzz-types filter=lfs diff=lfs merge=lfs -text
64
+ upstream/bin/wasm-ld filter=lfs diff=lfs merge=lfs -text
65
+ upstream/bin/wasm-merge filter=lfs diff=lfs merge=lfs -text
66
+ upstream/bin/wasm-metadce filter=lfs diff=lfs merge=lfs -text
67
+ upstream/bin/wasm-opt filter=lfs diff=lfs merge=lfs -text
68
+ upstream/bin/wasm-reduce filter=lfs diff=lfs merge=lfs -text
69
+ upstream/bin/wasm-shell filter=lfs diff=lfs merge=lfs -text
70
+ upstream/bin/wasm-split filter=lfs diff=lfs merge=lfs -text
71
+ upstream/bin/wasm2js filter=lfs diff=lfs merge=lfs -text
72
+ upstream/bin/wasm32-clang filter=lfs diff=lfs merge=lfs -text
73
+ upstream/bin/wasm32-clang++ filter=lfs diff=lfs merge=lfs -text
74
+ upstream/bin/wasm32-wasi-clang filter=lfs diff=lfs merge=lfs -text
75
+ upstream/bin/wasm32-wasi-clang++ filter=lfs diff=lfs merge=lfs -text
76
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-emu-ofb-full_es3-getprocaddr.a filter=lfs diff=lfs merge=lfs -text
77
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-emu-ofb-full_es3.a filter=lfs diff=lfs merge=lfs -text
78
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-emu-ofb-getprocaddr.a filter=lfs diff=lfs merge=lfs -text
79
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-emu-webgl2-ofb-full_es3-getprocaddr.a filter=lfs diff=lfs merge=lfs -text
80
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-emu-webgl2-ofb-full_es3.a filter=lfs diff=lfs merge=lfs -text
81
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-emu-webgl2-ofb-getprocaddr.a filter=lfs diff=lfs merge=lfs -text
82
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-emu-webgl2-ofb.a filter=lfs diff=lfs merge=lfs -text
83
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-ofb-full_es3-getprocaddr.a filter=lfs diff=lfs merge=lfs -text
84
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-ofb-full_es3.a filter=lfs diff=lfs merge=lfs -text
85
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-ofb-getprocaddr.a filter=lfs diff=lfs merge=lfs -text
86
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-webgl2-ofb-full_es3-getprocaddr.a filter=lfs diff=lfs merge=lfs -text
87
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-webgl2-ofb-full_es3.a filter=lfs diff=lfs merge=lfs -text
88
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-webgl2-ofb-getprocaddr.a filter=lfs diff=lfs merge=lfs -text
89
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libGL-mt-webgl2-ofb.a filter=lfs diff=lfs merge=lfs -text
90
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libasan_rt-mt.a filter=lfs diff=lfs merge=lfs -text
91
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libasan_rt-ww.a filter=lfs diff=lfs merge=lfs -text
92
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libasan_rt.a filter=lfs diff=lfs merge=lfs -text
93
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
94
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug-mt-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
95
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug-mt-noexcept.a filter=lfs diff=lfs merge=lfs -text
96
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug-mt-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
97
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug-mt.a filter=lfs diff=lfs merge=lfs -text
98
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug-noexcept.a filter=lfs diff=lfs merge=lfs -text
99
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
100
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug-ww-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
101
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug-ww-noexcept.a filter=lfs diff=lfs merge=lfs -text
102
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug-ww-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
103
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug-ww.a filter=lfs diff=lfs merge=lfs -text
104
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-debug.a filter=lfs diff=lfs merge=lfs -text
105
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
106
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-mt-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
107
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-mt-noexcept.a filter=lfs diff=lfs merge=lfs -text
108
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-mt-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
109
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-mt.a filter=lfs diff=lfs merge=lfs -text
110
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-noexcept.a filter=lfs diff=lfs merge=lfs -text
111
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
112
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-ww-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
113
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-ww-noexcept.a filter=lfs diff=lfs merge=lfs -text
114
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-ww-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
115
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++-ww.a filter=lfs diff=lfs merge=lfs -text
116
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++.a filter=lfs diff=lfs merge=lfs -text
117
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
118
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug-mt-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
119
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug-mt-noexcept.a filter=lfs diff=lfs merge=lfs -text
120
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug-mt-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
121
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug-mt.a filter=lfs diff=lfs merge=lfs -text
122
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug-noexcept.a filter=lfs diff=lfs merge=lfs -text
123
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
124
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug-ww-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
125
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug-ww-noexcept.a filter=lfs diff=lfs merge=lfs -text
126
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug-ww-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
127
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug-ww.a filter=lfs diff=lfs merge=lfs -text
128
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-debug.a filter=lfs diff=lfs merge=lfs -text
129
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
130
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-mt-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
131
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-mt-noexcept.a filter=lfs diff=lfs merge=lfs -text
132
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-mt-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
133
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-mt.a filter=lfs diff=lfs merge=lfs -text
134
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-noexcept.a filter=lfs diff=lfs merge=lfs -text
135
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
136
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-ww-legacyexcept.a filter=lfs diff=lfs merge=lfs -text
137
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-ww-noexcept.a filter=lfs diff=lfs merge=lfs -text
138
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-ww-wasmexcept.a filter=lfs diff=lfs merge=lfs -text
139
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi-ww.a filter=lfs diff=lfs merge=lfs -text
140
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc++abi.a filter=lfs diff=lfs merge=lfs -text
141
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-asan-debug.a filter=lfs diff=lfs merge=lfs -text
142
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-asan.a filter=lfs diff=lfs merge=lfs -text
143
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-debug.a filter=lfs diff=lfs merge=lfs -text
144
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-mt-asan-debug.a filter=lfs diff=lfs merge=lfs -text
145
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-mt-asan.a filter=lfs diff=lfs merge=lfs -text
146
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-mt-debug.a filter=lfs diff=lfs merge=lfs -text
147
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-mt.a filter=lfs diff=lfs merge=lfs -text
148
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-ww-asan-debug.a filter=lfs diff=lfs merge=lfs -text
149
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-ww-asan.a filter=lfs diff=lfs merge=lfs -text
150
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-ww-debug.a filter=lfs diff=lfs merge=lfs -text
151
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-ww.a filter=lfs diff=lfs merge=lfs -text
152
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc.a filter=lfs diff=lfs merge=lfs -text
153
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libcompiler_rt-legacysjlj-mt.a filter=lfs diff=lfs merge=lfs -text
154
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libcompiler_rt-legacysjlj-ww.a filter=lfs diff=lfs merge=lfs -text
155
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libcompiler_rt-legacysjlj.a filter=lfs diff=lfs merge=lfs -text
156
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libcompiler_rt-mt.a filter=lfs diff=lfs merge=lfs -text
157
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libcompiler_rt-wasmsjlj-mt.a filter=lfs diff=lfs merge=lfs -text
158
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libcompiler_rt-wasmsjlj-ww.a filter=lfs diff=lfs merge=lfs -text
159
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libcompiler_rt-wasmsjlj.a filter=lfs diff=lfs merge=lfs -text
160
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libcompiler_rt-ww.a filter=lfs diff=lfs merge=lfs -text
161
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libcompiler_rt.a filter=lfs diff=lfs merge=lfs -text
162
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libembind-mt-rtti.a filter=lfs diff=lfs merge=lfs -text
163
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libembind-mt.a filter=lfs diff=lfs merge=lfs -text
164
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libembind-rtti.a filter=lfs diff=lfs merge=lfs -text
165
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libembind-ww-rtti.a filter=lfs diff=lfs merge=lfs -text
166
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libembind-ww.a filter=lfs diff=lfs merge=lfs -text
167
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libembind.a filter=lfs diff=lfs merge=lfs -text
168
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc-asan-debug.a filter=lfs diff=lfs merge=lfs -text
169
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc-asan.a filter=lfs diff=lfs merge=lfs -text
170
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc-debug.a filter=lfs diff=lfs merge=lfs -text
171
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc-mt-asan-debug.a filter=lfs diff=lfs merge=lfs -text
172
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc-mt-asan.a filter=lfs diff=lfs merge=lfs -text
173
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc-mt-debug.a filter=lfs diff=lfs merge=lfs -text
174
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc-mt.a filter=lfs diff=lfs merge=lfs -text
175
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc-ww-asan-debug.a filter=lfs diff=lfs merge=lfs -text
176
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc-ww-asan.a filter=lfs diff=lfs merge=lfs -text
177
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc-ww-debug.a filter=lfs diff=lfs merge=lfs -text
178
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc-ww.a filter=lfs diff=lfs merge=lfs -text
179
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libllvmlibc.a filter=lfs diff=lfs merge=lfs -text
180
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/liblsan_common_rt-mt.a filter=lfs diff=lfs merge=lfs -text
181
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/liblsan_common_rt-ww.a filter=lfs diff=lfs merge=lfs -text
182
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/liblsan_common_rt.a filter=lfs diff=lfs merge=lfs -text
183
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/liblsan_rt-mt.a filter=lfs diff=lfs merge=lfs -text
184
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/liblsan_rt-ww.a filter=lfs diff=lfs merge=lfs -text
185
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/liblsan_rt.a filter=lfs diff=lfs merge=lfs -text
186
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libmimalloc-mt.a filter=lfs diff=lfs merge=lfs -text
187
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libmimalloc-ww.a filter=lfs diff=lfs merge=lfs -text
188
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libmimalloc.a filter=lfs diff=lfs merge=lfs -text
189
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libsanitizer_common_rt-mt.a filter=lfs diff=lfs merge=lfs -text
190
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libsanitizer_common_rt-ww.a filter=lfs diff=lfs merge=lfs -text
191
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libsanitizer_common_rt.a filter=lfs diff=lfs merge=lfs -text
192
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libstb_image.a filter=lfs diff=lfs merge=lfs -text
193
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libubsan_rt-mt.a filter=lfs diff=lfs merge=lfs -text
194
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libubsan_rt-ww.a filter=lfs diff=lfs merge=lfs -text
195
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libubsan_rt.a filter=lfs diff=lfs merge=lfs -text
196
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-asan-debug-icase.a filter=lfs diff=lfs merge=lfs -text
197
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-asan-debug.a filter=lfs diff=lfs merge=lfs -text
198
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-asan-icase.a filter=lfs diff=lfs merge=lfs -text
199
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-asan.a filter=lfs diff=lfs merge=lfs -text
200
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-debug-icase.a filter=lfs diff=lfs merge=lfs -text
201
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-debug.a filter=lfs diff=lfs merge=lfs -text
202
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-icase.a filter=lfs diff=lfs merge=lfs -text
203
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-mt-asan-debug-icase.a filter=lfs diff=lfs merge=lfs -text
204
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-mt-asan-debug.a filter=lfs diff=lfs merge=lfs -text
205
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-mt-asan-icase.a filter=lfs diff=lfs merge=lfs -text
206
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-mt-asan.a filter=lfs diff=lfs merge=lfs -text
207
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-mt-debug-icase.a filter=lfs diff=lfs merge=lfs -text
208
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-mt-debug.a filter=lfs diff=lfs merge=lfs -text
209
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-mt-icase.a filter=lfs diff=lfs merge=lfs -text
210
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-mt.a filter=lfs diff=lfs merge=lfs -text
211
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-ww-asan-debug-icase.a filter=lfs diff=lfs merge=lfs -text
212
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-ww-asan-debug.a filter=lfs diff=lfs merge=lfs -text
213
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-ww-asan-icase.a filter=lfs diff=lfs merge=lfs -text
214
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-ww-asan.a filter=lfs diff=lfs merge=lfs -text
215
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-ww-debug-icase.a filter=lfs diff=lfs merge=lfs -text
216
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-ww-debug.a filter=lfs diff=lfs merge=lfs -text
217
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-ww-icase.a filter=lfs diff=lfs merge=lfs -text
218
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs-ww.a filter=lfs diff=lfs merge=lfs -text
219
+ upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libwasmfs.a filter=lfs diff=lfs merge=lfs -text
220
+ upstream/emscripten/docs/paper.pdf filter=lfs diff=lfs merge=lfs -text
221
+ upstream/emscripten/docs/splashpres.pdf filter=lfs diff=lfs merge=lfs -text
222
+ upstream/emscripten/node_modules/google-closure-compiler-java/compiler.jar filter=lfs diff=lfs merge=lfs -text
223
+ upstream/emscripten/node_modules/google-closure-compiler-linux/compiler filter=lfs diff=lfs merge=lfs -text
224
+ upstream/emscripten/test/browser/cocos2d_hello.png filter=lfs diff=lfs merge=lfs -text
225
+ upstream/emscripten/test/browser/cube_explosion.png filter=lfs diff=lfs merge=lfs -text
226
+ upstream/emscripten/test/browser/gl_ps.png filter=lfs diff=lfs merge=lfs -text
227
+ upstream/emscripten/test/browser/gl_renderers.png filter=lfs diff=lfs merge=lfs -text
228
+ upstream/emscripten/test/browser/gl_stride.png filter=lfs diff=lfs merge=lfs -text
229
+ upstream/emscripten/test/browser/gl_triangle.png filter=lfs diff=lfs merge=lfs -text
230
+ upstream/emscripten/test/browser/s3tc.png filter=lfs diff=lfs merge=lfs -text
231
+ upstream/emscripten/test/browser/screenshot-fog-density.png filter=lfs diff=lfs merge=lfs -text
232
+ upstream/emscripten/test/browser/screenshot-fog-exp2.png filter=lfs diff=lfs merge=lfs -text
233
+ upstream/emscripten/test/browser/screenshot-fog-linear.png filter=lfs diff=lfs merge=lfs -text
234
+ upstream/emscripten/test/browser/screenshot-gray-purple.png filter=lfs diff=lfs merge=lfs -text
235
+ upstream/emscripten/test/browser/screenshot-gray.png filter=lfs diff=lfs merge=lfs -text
236
+ upstream/emscripten/test/browser/screenshot.dds filter=lfs diff=lfs merge=lfs -text
237
+ upstream/emscripten/test/browser/screenshot.png filter=lfs diff=lfs merge=lfs -text
238
+ upstream/emscripten/test/browser/test_sdl_rotozoom.png filter=lfs diff=lfs merge=lfs -text
239
+ upstream/emscripten/test/freetype/LiberationSansBold.ttf filter=lfs diff=lfs merge=lfs -text
240
+ upstream/emscripten/test/poppler/emscripten_html5.pdf filter=lfs diff=lfs merge=lfs -text
241
+ upstream/emscripten/test/poppler/ref.ppm filter=lfs diff=lfs merge=lfs -text
242
+ upstream/emscripten/test/sounds/alarmcreatemiltaryfoot_1.wav filter=lfs diff=lfs merge=lfs -text
243
+ upstream/emscripten/test/sounds/audio.wav filter=lfs diff=lfs merge=lfs -text
244
+ upstream/emscripten/test/sounds/pudinha.mp3 filter=lfs diff=lfs merge=lfs -text
245
+ upstream/emscripten/test/sounds/the_entertainer.ogg filter=lfs diff=lfs merge=lfs -text
246
+ upstream/emscripten/test/sounds/the_entertainer.wav filter=lfs diff=lfs merge=lfs -text
247
+ upstream/emscripten/test/webaudio/audio_files/emscripten-bass-left.mp3 filter=lfs diff=lfs merge=lfs -text
248
+ upstream/emscripten/test/webaudio/audio_files/emscripten-bass-mono.mp3 filter=lfs diff=lfs merge=lfs -text
249
+ upstream/emscripten/test/webaudio/audio_files/emscripten-bass.mp3 filter=lfs diff=lfs merge=lfs -text
250
+ upstream/emscripten/test/webaudio/audio_files/emscripten-beat-mono.mp3 filter=lfs diff=lfs merge=lfs -text
251
+ upstream/emscripten/test/webaudio/audio_files/emscripten-beat-right.mp3 filter=lfs diff=lfs merge=lfs -text
252
+ upstream/emscripten/test/webaudio/audio_files/emscripten-beat.mp3 filter=lfs diff=lfs merge=lfs -text
253
+ upstream/lib/libc++.a filter=lfs diff=lfs merge=lfs -text
254
+ upstream/lib/libc++abi.a filter=lfs diff=lfs merge=lfs -text
255
+ upstream/lib/libc++experimental.a filter=lfs diff=lfs merge=lfs -text
.github/workflows/create-release.yml ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Create Release PR
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ lto-sha:
7
+ required: true
8
+ type: string
9
+ nonlto-sha:
10
+ required: true
11
+ type: string
12
+
13
+ jobs:
14
+ create-release-pr:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: Checkout repo
18
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
19
+ - name: Run create_release.py
20
+ run: python3 scripts/create_release.py -r ${{ inputs.lto-sha }} -a ${{ inputs.nonlto-sha }} --gh-action
21
+ - name: Create PR
22
+ id: cpr
23
+ uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
24
+ with:
25
+ token: ${{ secrets.EMSCRIPTEN_BOT_TOKEN }}
26
+ title: Release ${{ env.RELEASE_VERSION }}
27
+ commit-message: |
28
+ Release ${{ env.RELEASE_VERSION }}
29
+ team-reviewers: release-reviewers
30
+ labels: release
31
+ body: |
32
+ With emscripten-releases revisions:
33
+ https://chromium.googlesource.com/emscripten-releases/+/${{ inputs.lto-sha }} (LTO)
34
+ https://chromium.googlesource.com/emscripten-releases/+/${{ inputs.nonlto-sha }} (asserts)
35
+ branch: release_${{ env.RELEASE_VERSION }}
36
+ delete-branch: true
37
+ - name: Enable auto-merge
38
+ run: gh pr merge --squash --auto "${{ steps.cpr.outputs.pull-request-number }}"
39
+ env:
40
+ GH_TOKEN: ${{ secrets.EMSCRIPTEN_BOT_TOKEN }}
.github/workflows/tag-release.yml ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # When a release commit created by create-release.yml is landed, create the
2
+ # corresponding tag.
3
+ name: Create release tag
4
+
5
+ on:
6
+ push:
7
+ paths:
8
+ - emscripten-releases-tags.json
9
+ - .github/workflows/tag-release.yml
10
+ branches:
11
+ - main
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ tag-release:
16
+ # Only activate for commits created by the create-release.yml workflow.
17
+ # The assumption is that when manual changes happen, we want to handle
18
+ # tagging manually too.
19
+ name: Check for release commit and create tag
20
+ # The author is emscripten-bot when triggered from Chromium CI, and github-actions when manually triggered.
21
+ if: ${{ github.event.head_commit.author.username == 'github-actions[bot]' || github.event.head_commit.author.username == 'emscripten-bot' }}
22
+ runs-on: ubuntu-latest
23
+ outputs:
24
+ is_release: ${{ steps.create-tag.outputs.result }}
25
+ steps:
26
+ - name: Match message and create tag
27
+ id: create-tag
28
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
29
+ with:
30
+ github-token: ${{ secrets.EMSCRIPTEN_BOT_TOKEN }}
31
+ # A commit with the message of the form 'Release X.Y.Z' is expected
32
+ # to have been created by create_release.py and update the latest
33
+ # release in emscripten-releases-tags.json
34
+ script: |
35
+ const message = `${{ github.event.head_commit.message }}`
36
+ const regex = /Release ([0-9]+.[0-9]+.[0-9]+)/;
37
+ const match = message.match(regex);
38
+ let is_release = false;
39
+ if (match) {
40
+ const release = match[1];
41
+ console.log(`Matched release ${release}`);
42
+ await github.rest.git.createRef({
43
+ owner: context.repo.owner,
44
+ repo: context.repo.repo,
45
+ ref: `refs/tags/${release}`,
46
+ sha: context.sha
47
+ });
48
+ is_release = true;
49
+ } else {
50
+ console.log(`Commit message: '${message}' did not match pattern`);
51
+ }
52
+ return is_release;
53
+
54
+ dispatch-emscripten-tag:
55
+ name: Dispatch workflow to tag emscripten repo
56
+ runs-on: ubuntu-latest
57
+ needs: tag-release
58
+ if: ${{ needs.tag-release.outputs.is_release == 'true' }}
59
+ steps:
60
+ - name: Checkout repo
61
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
62
+ - name: Find emscripten revision
63
+ # get_emscripten_revision_info.py sets env.EMSCRIPTEN_HASH to the
64
+ # emscripten hash associated with the latest release in
65
+ # emscripten-releases-tags.json
66
+ run: python3 scripts/get_emscripten_revision_info.py
67
+ - name: Dispatch emscripten workflow
68
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
69
+ with:
70
+ github-token: ${{ secrets.EMSCRIPTEN_BOT_TOKEN }}
71
+ script: |
72
+ await github.rest.actions.createWorkflowDispatch({
73
+ owner: context.repo.owner,
74
+ repo: 'emscripten',
75
+ workflow_id: 'tag-release.yml',
76
+ ref: 'main',
77
+ inputs: { 'release-sha': '${{ env.EMSCRIPTEN_HASH }}' }
78
+ });
.gitignore ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.pyc
2
+ __pycache__
3
+
4
+ # Support for --embedded configs
5
+ /.emscripten
6
+ /.emscripten.old
7
+ /.emscripten_cache
8
+ /.emscripten_cache__last_clear
9
+ /.emscripten_sanity
10
+ /.emscripten_sanity_wasm
11
+
12
+ # Tags files that get generated at runtime
13
+ /emscripten-releases-tot.txt
14
+
15
+ # File that get download/extracted by emsdk itself
16
+ /ccache
17
+ /gnu
18
+ /upstream
19
+ /fastcomp
20
+ /fastcomp-clang/
21
+ /llvm
22
+ /ninja
23
+ /releases
24
+ /clang
25
+ /emscripten
26
+ /git
27
+ /node
28
+ /python
29
+ /temp
30
+ /downloads
31
+ /crunch
32
+ /java
33
+ /mingw
34
+ /spidermonkey
35
+ /binaryen
36
+ /firefox
LICENSE ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2018 Emscripten authors (see AUTHORS in Emscripten)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
20
+
21
+ ----------------------------------------------------------------------------
22
+
23
+ This is the MIT/Expat Licence. For more information see:
24
+
25
+ 1. http://www.opensource.org/licenses/mit-license.php
26
+
27
+ 2. http://en.wikipedia.org/wiki/MIT_License
README.md ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Emscripten SDK
2
+ ==============
3
+
4
+ [![CircleCI](https://circleci.com/gh/emscripten-core/emsdk/tree/main.svg?style=svg)](https://circleci.com/gh/emscripten-core/emsdk/tree/main)
5
+
6
+ The Emscripten toolchain is distributed as a standalone Emscripten SDK. The SDK
7
+ provides all the required tools, such as Clang, Python and Node.js along with an
8
+ update mechanism that enables migrating to newer Emscripten versions as they are
9
+ released.
10
+
11
+ You can also set up Emscripten from source, without the pre-built SDK, see
12
+ "Installing from Source" below.
13
+
14
+ ## Downloads / How do I get the latest Emscripten build?
15
+
16
+ To get started with Emscripten development, see the [Emscripten website
17
+ documentation](https://emscripten.org/docs/getting_started/downloads.html).
18
+
19
+ That explains how to use the emsdk to get the latest binary builds (without
20
+ compiling from source). Basically, that amounts to
21
+
22
+ ```
23
+ git pull
24
+ ./emsdk install latest
25
+ ./emsdk activate latest
26
+ ```
27
+
28
+ ## SDK Concepts
29
+
30
+ The Emscripten SDK is effectively a small package manager for tools that are
31
+ used in conjunction with Emscripten. The following glossary highlights the
32
+ important concepts to help understanding the internals of the SDK:
33
+
34
+ * **Tool**: The basic unit of software bundled in the SDK. A Tool has a name and
35
+ a version. For example, 'clang-3.2-32bit' is a Tool that contains the 32-bit
36
+ version of the Clang v3.2 compiler.
37
+ * **SDK**: A set of tools. For example, 'sdk-1.5.6-32bit' is an SDK consisting
38
+ of the tools `clang-3.2-32bit`, `node-0.10.17-32bit`, `python-2.7.5.1-32bit`
39
+ and `emscripten-1.5.6`.
40
+ * **Active Tool/SDK**: Emscripten SDK stores compiler configuration in a file
41
+ called `.emscripten` within the emsdk directory. This file points to paths
42
+ for Emscripten, Python, Clang and so on. If the configuration file points to a
43
+ Tool in a specific directory, then that tool is denoted as being
44
+ **active**. This mechanism allows switching between different installed
45
+ tools and SDKs.
46
+ * **emsdk**: This is the name of the manager script that Emscripten SDK is
47
+ accessed through. Most operations are of the form `emsdk <command>`.
48
+
49
+ ## System Requirements
50
+
51
+ Using the emsdk pre-compiled packages requires only the minimal set of
52
+ dependencies lists below. When building from source a wider set of tools
53
+ include git, cmake, and a host compiler are required. See:
54
+ https://emscripten.org/docs/building_from_source/toolchain_what_is_needed.html.
55
+
56
+ ### Mac OS X
57
+
58
+ - macOS 11.0 or newer.
59
+ - `java`: For running closure compiler (optional). After installing emscripten
60
+ via emsdk, typing 'emcc --help' should pop up a OS X dialog "Java is not
61
+ installed. To open java, you need a Java SE 6 runtime. Would you like to
62
+ install one now?" that will automatically download a Java runtime to the
63
+ system.
64
+
65
+ ### Linux
66
+
67
+ - `python`: Version 3.8 or above.
68
+ - `java`: For running closure compiler (optional)
69
+
70
+ The emsdk pre-compiled binaries are built against debian/stretch (for x86_64)
71
+ and debian/bullseye (for arm64) sysroots and therefore depend on system
72
+ libraries compatible with the version of `glibc` (and other libraries) present
73
+ in those releases. If your linux distribution is very old you may not be able to
74
+ use the pre-compiled binaries packages. Note that `libc++` is statically linked
75
+ so there should be no issues with older versions of `libstdc++` or `libc++`.
76
+
77
+ ### Windows
78
+
79
+ - `java`: For running closure compiler (optional)
80
+
81
+ ## Uninstalling the Emscripten SDK
82
+
83
+ To remove the Emscripten SDK, simply delete the emsdk directory.
84
+
85
+ ## SDK Maintenance
86
+
87
+ The following tasks are common with the Emscripten SDK:
88
+
89
+ ### How do I work the emsdk utility?
90
+
91
+ Run `emsdk help` or just `emsdk` to get information about all available commands.
92
+
93
+ ### How do I check the installation status and version of the SDK and tools?
94
+
95
+ To get a list of all currently installed tools and SDK versions, and all
96
+ available tools, run `emsdk list`.
97
+ * A line will be printed for each tool/SDK that is available for installation.
98
+ * The text `INSTALLED` will be shown for each tool that has already been
99
+ installed.
100
+ * If a tool/SDK is currently active, a star * will be shown next to it.
101
+ * If a tool/SDK is currently active, but the terminal your are calling emsdk
102
+ from does not have `PATH` and environment set up to utilize that tool, a star
103
+ in parentheses (\*) will be shown next to it. Run `emsdk_env.bat` (Windows) or
104
+ `source ./emsdk_env.sh` (Linux and OS X) to set up the environment for the
105
+ calling terminal.
106
+
107
+ ### How do I install a tool/SDK version?
108
+
109
+ Run the command `emsdk install <tool/sdk name>` to download and install a new
110
+ tool or an SDK version.
111
+
112
+ ### How do I remove a tool or an SDK?
113
+
114
+ Run the command `emsdk uninstall <tool/sdk name>` to delete the given tool or
115
+ SDK from the local hard drive completely.
116
+
117
+ ### How do I check for updates to the Emscripten SDK?
118
+
119
+ `emsdk update` will fetch package information for all the new tools and
120
+ SDK versions. After that, run `emsdk install <tool/sdk name>` to install a new
121
+ version.
122
+
123
+ ### How do I install an old Emscripten compiler version?
124
+
125
+ Emsdk contains a history of old compiler versions that you can use to maintain
126
+ your migration path. Type `emsdk list --old` to get a list of archived tool and
127
+ SDK versions, and `emsdk install <name_of_tool>` to install it.
128
+
129
+ ### I want to build from source!
130
+
131
+ Some Emsdk Tool and SDK targets refer to packages that are precompiled, and
132
+ no compilation is needed when installing them. Other Emsdk Tools and SDK
133
+ targets come "from source", meaning that they will fetch the source repositories
134
+ using git, and compile the package on demand.
135
+
136
+ When you run `emsdk list`, it will group the Tools and SDKs under these two
137
+ categories.
138
+
139
+ To obtain and build latest wasm SDK from source, run
140
+
141
+ ```
142
+ emsdk install sdk-main-64bit
143
+ emsdk activate sdk-main-64bit
144
+ ```
145
+
146
+ You can use this target for example to bootstrap developing patches to LLVM,
147
+ Binaryen or Emscripten. (After initial installation, use `git remote add`
148
+ in the cloned tree to add your own fork to push changes as patches)
149
+
150
+ If you only intend to contribute to Emscripten repository, and not to LLVM
151
+ or Binaryen, you can also use precompiled versions of them, and only git
152
+ clone the Emscripten repository. For more details, see
153
+
154
+ https://emscripten.org/docs/contributing/developers_guide.html?highlight=developer#setting-up
155
+
156
+ ### When working on git branches compiled from source, how do I update to a newer compiler version?
157
+
158
+ Unlike tags and precompiled versions, a few of the SDK packages are based on
159
+ "moving" git branches and compiled from source (e.g. sdk-main,
160
+ sdk-main, emscripten-main, binaryen-main). Because of that, the
161
+ compiled versions will eventually go out of date as new commits are introduced
162
+ to the development branches. To update an old compiled installation of one of
163
+ this branches, simply reissue the "emsdk install" command on that tool/SDK. This
164
+ will `git pull` the latest changes to the branch and issue an incremental
165
+ recompilation of the target in question. This way you can keep calling `emsdk
166
+ install` to keep an Emscripten installation up to date with a given git branch.
167
+
168
+ Note though that if the previously compiled branch is very old, sometimes CMake
169
+ gets confused and is unable to properly rebuild a project. This has happened in
170
+ the past e.g. when LLVM migrated to requiring a newer CMake version. In cases of
171
+ any odd compilation errors, it is advised to try deleting the intermediate build
172
+ directory to clear the build (e.g. "emsdk/clang/fastcomp/build_xxx/") before
173
+ reissuing `emsdk install`.
174
+
175
+ ### How do I change the currently active SDK version?
176
+
177
+ You can toggle between different tools and SDK versions by running `emsdk
178
+ activate <tool/sdk name>`. Activating a tool will set up `~/.emscripten` to
179
+ point to that particular tool. On Windows, you can pass the option `--permanent` to
180
+ the `activate` command to register the environment permanently for the current user. Use `--system` to do this for all users.
181
+
182
+ ### How do I track the latest Emscripten development with the SDK?
183
+
184
+ A common and supported use case of the Emscripten SDK is to enable the workflow
185
+ where you directly interact with the github repositories. This allows you to
186
+ obtain new features and latest fixes immediately as they are pushed to the
187
+ github repository, without having to wait for release to be tagged. You do not
188
+ need a github account or a fork of Emscripten to do this. To switch to using the
189
+ latest git development branch `main`, run the following:
190
+
191
+ emsdk install git-1.9.4 # Install git. Skip if the system already has it.
192
+ emsdk install sdk-main-64bit # Clone+pull the latest emscripten-core/emscripten/main.
193
+ emsdk activate sdk-main-64bit # Set the main SDK as the currently active one.
194
+
195
+ ### How do I use my own Emscripten github fork with the SDK?
196
+
197
+ It is also possible to use your own fork of the Emscripten repository via the
198
+ SDK. This is achieved with standard git machinery, so if you are already
199
+ acquainted with working on multiple remotes in a git clone, these steps should
200
+ be familiar to you. This is useful in the case when you want to make your own
201
+ modifications to the Emscripten toolchain, but still keep using the SDK
202
+ environment and tools. To set up your own fork as the currently active
203
+ Emscripten toolchain, first install the `sdk-main` SDK like shown in the
204
+ previous section, and then run the following commands in the emsdk directory:
205
+
206
+ cd emscripten/main
207
+ # Add a git remote link to your own repository.
208
+ git remote add myremote https://github.com/mygituseraccount/emscripten.git
209
+ # Obtain the changes in your link.
210
+ git fetch myremote
211
+ # Switch the emscripten-main tool to use your fork.
212
+ git checkout -b mymain --track myremote/main
213
+
214
+ In this way you can utilize the Emscripten SDK tools while using your own git
215
+ fork. You can switch back and forth between remotes via the `git checkout`
216
+ command as usual.
217
+
218
+ ### How do I use Emscripten SDK with a custom version of python, java, node.js or some other tool?
219
+
220
+ The provided Emscripten SDK targets are metapackages that refer to a specific
221
+ set of tools that have been tested to work together. For example,
222
+ `sdk-1.35.0-64bit` is an alias to the individual packages `clang-e1.35.0-64bit`,
223
+ `node-4.1.1-64bit`, `python-2.7.5.3-64bit` and `emscripten-1.35.0`. This means
224
+ that if you install this version of the SDK, both python and node.js will be
225
+ installed inside emsdk as well. If you want to use your own/system python or
226
+ node.js instead, you can opt to install emsdk by specifying the individual set
227
+ of packages that you want to use. For example, `emsdk install
228
+ clang-e1.35.0-64bit emscripten-1.35.0` will only install the Emscripten
229
+ LLVM/Clang compiler and the Emscripten frontend without supplying python and
230
+ node.js.
231
+
232
+ ### My installation fails with "fatal error: ld terminated with signal 9 [Killed]"?
233
+
234
+ This may happen if the system runs out of memory. If you are attempting to build
235
+ one of the packages from source and are running in a virtual OS or may have
236
+ relatively little RAM and disk space available, then the build might fail. Try
237
+ feeding your computer more memory. Another thing to try is to force emsdk
238
+ install to build in a singlethreaded mode, which will require less RAM
239
+ simultaneously. To do this, pass the `-j1` flag to the `emsdk install` command.
240
+
241
+ ### How do I run Emscripten on 32-bit systems or non-x86-64 systems?
242
+
243
+ Emscripten SDK releases are no longer packaged or maintained for 32-bit systems.
244
+ If you want to run Emscripten on a 32-bit system, you can try manually building
245
+ the compiler. Follow the steps in the above section "Building an Emscripten tag
246
+ or branch from source" to get started.
SECURITY.md ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Security Policy
2
+
3
+ If you have discovered a security vulnerability in this project, please report it
4
+ privately. **Do not disclose it as a public issue.** This gives us time to work with you
5
+ to fix the issue before public exposure, reducing the chance that the exploit will be
6
+ used before a patch is released.
7
+
8
+ Please submit the report as a [security bug on the Chromium tracker](https://bugs.chromium.org/p/chromium/issues/entry?template=Security%20Bug).
9
+
10
+ Please provide the following information in your report:
11
+
12
+ - A description of the vulnerability and its impact
13
+ - How to reproduce the issue
14
+ - Make it clear that it's an Emscripten SDK bug.
15
+
16
+ We ask that you give us 90 days to work on a fix before public exposure.
bazel/.bazelrc ADDED
@@ -0,0 +1 @@
 
 
1
+ build --incompatible_enable_cc_toolchain_resolution
bazel/.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ /bazel-*
bazel/BUILD ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ package(default_visibility = ["//visibility:public"])
2
+
3
+ filegroup(name = "empty")
4
+
5
+ platform(
6
+ name = "platform_wasm",
7
+ constraint_values = [
8
+ "@platforms//cpu:wasm32",
9
+ "@platforms//os:emscripten",
10
+ ],
11
+ )
12
+
13
+ platform(
14
+ name = "platform_wasi",
15
+ constraint_values = [
16
+ "@platforms//cpu:wasm32",
17
+ "@platforms//os:wasi",
18
+ ],
19
+ )
bazel/MODULE.bazel ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ module(
2
+ name = "emsdk",
3
+ version = "5.0.7",
4
+ )
5
+
6
+ bazel_dep(name = "platforms", version = "1.0.0")
7
+ bazel_dep(name = "bazel_skylib", version = "1.8.2")
8
+ bazel_dep(name = "rules_nodejs", version = "6.7.3")
9
+ bazel_dep(name = "rules_cc", version = "0.2.16")
10
+ bazel_dep(name = "rules_python", version = "1.8.4")
11
+
12
+ python = use_extension("@rules_python//python/extensions:python.bzl", "python")
13
+ python.toolchain(
14
+ python_version = "3.14",
15
+ )
16
+
17
+ node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
18
+ node.toolchain(node_version = "20.18.0")
19
+ use_repo(node, "nodejs")
20
+
21
+ emscripten_deps = use_extension(
22
+ "//:emscripten_deps.bzl",
23
+ "emscripten_deps",
24
+ )
25
+ use_repo(emscripten_deps, "emscripten_bin_linux")
26
+ use_repo(emscripten_deps, "emscripten_bin_linux_arm64")
27
+ use_repo(emscripten_deps, "emscripten_bin_mac")
28
+ use_repo(emscripten_deps, "emscripten_bin_mac_arm64")
29
+ use_repo(emscripten_deps, "emscripten_bin_win")
30
+
31
+ emscripten_cache = use_extension("//:emscripten_cache.bzl", "emscripten_cache")
32
+ use_repo(emscripten_cache, "emscripten_cache")
33
+
34
+ register_toolchains(
35
+ "//emscripten_toolchain:cc-toolchain-wasm-emscripten_linux",
36
+ "//emscripten_toolchain:cc-toolchain-wasm-emscripten_linux_arm64",
37
+ "//emscripten_toolchain:cc-toolchain-wasm-emscripten_mac",
38
+ "//emscripten_toolchain:cc-toolchain-wasm-emscripten_mac_arm64",
39
+ "//emscripten_toolchain:cc-toolchain-wasm-emscripten_win",
40
+ )
bazel/MODULE.bazel.lock ADDED
@@ -0,0 +1,698 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "lockFileVersion": 26,
3
+ "registryFileHashes": {
4
+ "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497",
5
+ "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2",
6
+ "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/MODULE.bazel": "70390338f7a5106231d20620712f7cccb659cd0e9d073d1991c038eb9fc57589",
7
+ "https://bcr.bazel.build/modules/abseil-cpp/20230125.1/MODULE.bazel": "89047429cb0207707b2dface14ba7f8df85273d484c2572755be4bab7ce9c3a0",
8
+ "https://bcr.bazel.build/modules/abseil-cpp/20230802.0.bcr.1/MODULE.bazel": "1c8cec495288dccd14fdae6e3f95f772c1c91857047a098fad772034264cc8cb",
9
+ "https://bcr.bazel.build/modules/abseil-cpp/20230802.0/MODULE.bazel": "d253ae36a8bd9ee3c5955384096ccb6baf16a1b1e93e858370da0a3b94f77c16",
10
+ "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/MODULE.bazel": "fa92e2eb41a04df73cdabeec37107316f7e5272650f81d6cc096418fe647b915",
11
+ "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/MODULE.bazel": "37bcdb4440fbb61df6a1c296ae01b327f19e9bb521f9b8e26ec854b6f97309ed",
12
+ "https://bcr.bazel.build/modules/abseil-cpp/20240116.2/MODULE.bazel": "73939767a4686cd9a520d16af5ab440071ed75cec1a876bf2fcfaf1f71987a16",
13
+ "https://bcr.bazel.build/modules/abseil-cpp/20250127.1/MODULE.bazel": "c4a89e7ceb9bf1e25cf84a9f830ff6b817b72874088bf5141b314726e46a57c1",
14
+ "https://bcr.bazel.build/modules/abseil-cpp/20250512.1/MODULE.bazel": "d209fdb6f36ffaf61c509fcc81b19e81b411a999a934a032e10cd009a0226215",
15
+ "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/MODULE.bazel": "51f2312901470cdab0dbdf3b88c40cd21c62a7ed58a3de45b365ddc5b11bcab2",
16
+ "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/source.json": "cea3901d7e299da7320700abbaafe57a65d039f10d0d7ea601c4a66938ea4b0c",
17
+ "https://bcr.bazel.build/modules/apple_support/1.11.1/MODULE.bazel": "1843d7cd8a58369a444fc6000e7304425fba600ff641592161d9f15b179fb896",
18
+ "https://bcr.bazel.build/modules/apple_support/1.15.1/MODULE.bazel": "a0556fefca0b1bb2de8567b8827518f94db6a6e7e7d632b4c48dc5f865bc7c85",
19
+ "https://bcr.bazel.build/modules/apple_support/1.21.0/MODULE.bazel": "ac1824ed5edf17dee2fdd4927ada30c9f8c3b520be1b5fd02a5da15bc10bff3e",
20
+ "https://bcr.bazel.build/modules/apple_support/1.21.1/MODULE.bazel": "5809fa3efab15d1f3c3c635af6974044bac8a4919c62238cce06acee8a8c11f1",
21
+ "https://bcr.bazel.build/modules/apple_support/1.24.2/MODULE.bazel": "0e62471818affb9f0b26f128831d5c40b074d32e6dda5a0d3852847215a41ca4",
22
+ "https://bcr.bazel.build/modules/apple_support/1.24.2/source.json": "2c22c9827093250406c5568da6c54e6fdf0ef06238def3d99c71b12feb057a8d",
23
+ "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd",
24
+ "https://bcr.bazel.build/modules/bazel_features/1.10.0/MODULE.bazel": "f75e8807570484a99be90abcd52b5e1f390362c258bcb73106f4544957a48101",
25
+ "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8",
26
+ "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d",
27
+ "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d",
28
+ "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a",
29
+ "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58",
30
+ "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b",
31
+ "https://bcr.bazel.build/modules/bazel_features/1.23.0/MODULE.bazel": "fd1ac84bc4e97a5a0816b7fd7d4d4f6d837b0047cf4cbd81652d616af3a6591a",
32
+ "https://bcr.bazel.build/modules/bazel_features/1.27.0/MODULE.bazel": "621eeee06c4458a9121d1f104efb80f39d34deff4984e778359c60eaf1a8cb65",
33
+ "https://bcr.bazel.build/modules/bazel_features/1.28.0/MODULE.bazel": "4b4200e6cbf8fa335b2c3f43e1d6ef3e240319c33d43d60cc0fbd4b87ece299d",
34
+ "https://bcr.bazel.build/modules/bazel_features/1.3.0/MODULE.bazel": "cdcafe83ec318cda34e02948e81d790aab8df7a929cec6f6969f13a489ccecd9",
35
+ "https://bcr.bazel.build/modules/bazel_features/1.30.0/MODULE.bazel": "a14b62d05969a293b80257e72e597c2da7f717e1e69fa8b339703ed6731bec87",
36
+ "https://bcr.bazel.build/modules/bazel_features/1.33.0/MODULE.bazel": "8b8dc9d2a4c88609409c3191165bccec0e4cb044cd7a72ccbe826583303459f6",
37
+ "https://bcr.bazel.build/modules/bazel_features/1.39.0/MODULE.bazel": "28739425c1fc283c91931619749c832b555e60bcd1010b40d8441ce0a5cf726d",
38
+ "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7",
39
+ "https://bcr.bazel.build/modules/bazel_features/1.42.1/MODULE.bazel": "275a59b5406ff18c01739860aa70ad7ccb3cfb474579411decca11c93b951080",
40
+ "https://bcr.bazel.build/modules/bazel_features/1.42.1/source.json": "fcd4396b2df85f64f2b3bb436ad870793ecf39180f1d796f913cc9276d355309",
41
+ "https://bcr.bazel.build/modules/bazel_features/1.9.0/MODULE.bazel": "885151d58d90d8d9c811eb75e3288c11f850e1d6b481a8c9f766adee4712358b",
42
+ "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a",
43
+ "https://bcr.bazel.build/modules/bazel_lib/3.0.0/MODULE.bazel": "22b70b80ac89ad3f3772526cd9feee2fa412c2b01933fea7ed13238a448d370d",
44
+ "https://bcr.bazel.build/modules/bazel_lib/3.0.0/source.json": "895f21909c6fba01d7c17914bb6c8e135982275a1b18cdaa4e62272217ef1751",
45
+ "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8",
46
+ "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e",
47
+ "https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686",
48
+ "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a",
49
+ "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5",
50
+ "https://bcr.bazel.build/modules/bazel_skylib/1.4.1/MODULE.bazel": "a0dcb779424be33100dcae821e9e27e4f2901d9dfd5333efe5ac6a8d7ab75e1d",
51
+ "https://bcr.bazel.build/modules/bazel_skylib/1.4.2/MODULE.bazel": "3bd40978e7a1fac911d5989e6b09d8f64921865a45822d8b09e815eaa726a651",
52
+ "https://bcr.bazel.build/modules/bazel_skylib/1.5.0/MODULE.bazel": "32880f5e2945ce6a03d1fbd588e9198c0a959bb42297b2cfaf1685b7bc32e138",
53
+ "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917",
54
+ "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d",
55
+ "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b",
56
+ "https://bcr.bazel.build/modules/bazel_skylib/1.8.1/MODULE.bazel": "88ade7293becda963e0e3ea33e7d54d3425127e0a326e0d17da085a5f1f03ff6",
57
+ "https://bcr.bazel.build/modules/bazel_skylib/1.8.2/MODULE.bazel": "69ad6927098316848b34a9142bcc975e018ba27f08c4ff403f50c1b6e646ca67",
58
+ "https://bcr.bazel.build/modules/bazel_skylib/1.8.2/source.json": "34a3c8bcf233b835eb74be9d628899bb32999d3e0eadef1947a0a562a2b16ffb",
59
+ "https://bcr.bazel.build/modules/buildozer/8.5.1/MODULE.bazel": "a35d9561b3fc5b18797c330793e99e3b834a473d5fbd3d7d7634aafc9bdb6f8f",
60
+ "https://bcr.bazel.build/modules/buildozer/8.5.1/source.json": "e3386e6ff4529f2442800dee47ad28d3e6487f36a1f75ae39ae56c70f0cd2fbd",
61
+ "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb",
62
+ "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4",
63
+ "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6",
64
+ "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f",
65
+ "https://bcr.bazel.build/modules/googletest/1.15.2/MODULE.bazel": "6de1edc1d26cafb0ea1a6ab3f4d4192d91a312fd2d360b63adaa213cd00b2108",
66
+ "https://bcr.bazel.build/modules/googletest/1.17.0/MODULE.bazel": "dbec758171594a705933a29fcf69293d2468c49ec1f2ebca65c36f504d72df46",
67
+ "https://bcr.bazel.build/modules/googletest/1.17.0/source.json": "38e4454b25fc30f15439c0378e57909ab1fd0a443158aa35aec685da727cd713",
68
+ "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075",
69
+ "https://bcr.bazel.build/modules/jsoncpp/1.9.6/MODULE.bazel": "2f8d20d3b7d54143213c4dfc3d98225c42de7d666011528dc8fe91591e2e17b0",
70
+ "https://bcr.bazel.build/modules/jsoncpp/1.9.6/source.json": "a04756d367a2126c3541682864ecec52f92cdee80a35735a3cb249ce015ca000",
71
+ "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902",
72
+ "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/MODULE.bazel": "6f7b417dcc794d9add9e556673ad25cb3ba835224290f4f848f8e2db1e1fca74",
73
+ "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/source.json": "f448c6e8963fdfa7eb831457df83ad63d3d6355018f6574fb017e8169deb43a9",
74
+ "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5",
75
+ "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f",
76
+ "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee",
77
+ "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37",
78
+ "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615",
79
+ "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814",
80
+ "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d",
81
+ "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc",
82
+ "https://bcr.bazel.build/modules/platforms/1.0.0/MODULE.bazel": "f05feb42b48f1b3c225e4ccf351f367be0371411a803198ec34a389fb22aa580",
83
+ "https://bcr.bazel.build/modules/platforms/1.0.0/source.json": "f4ff1fd412e0246fd38c82328eb209130ead81d62dcd5a9e40910f867f733d96",
84
+ "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7",
85
+ "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c",
86
+ "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df",
87
+ "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92",
88
+ "https://bcr.bazel.build/modules/protobuf/29.1/MODULE.bazel": "557c3457560ff49e122ed76c0bc3397a64af9574691cb8201b4e46d4ab2ecb95",
89
+ "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0",
90
+ "https://bcr.bazel.build/modules/protobuf/32.1/MODULE.bazel": "89cd2866a9cb07fee9ff74c41ceace11554f32e0d849de4e23ac55515cfada4d",
91
+ "https://bcr.bazel.build/modules/protobuf/33.4/MODULE.bazel": "114775b816b38b6d0ca620450d6b02550c60ceedfdc8d9a229833b34a223dc42",
92
+ "https://bcr.bazel.build/modules/protobuf/33.4/source.json": "555f8686b4c7d6b5ba731fbea13bf656b4bfd9a7ff629c1d9d3f6e1d6155de79",
93
+ "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e",
94
+ "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/MODULE.bazel": "e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34",
95
+ "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/source.json": "6900fdc8a9e95866b8c0d4ad4aba4d4236317b5c1cd04c502df3f0d33afed680",
96
+ "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206",
97
+ "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/MODULE.bazel": "b4963dda9b31080be1905ef085ecd7dd6cd47c05c79b9cdf83ade83ab2ab271a",
98
+ "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/source.json": "2ff292be6ef3340325ce8a045ecc326e92cbfab47c7cbab4bd85d28971b97ac4",
99
+ "https://bcr.bazel.build/modules/re2/2024-07-02/MODULE.bazel": "0eadc4395959969297cbcf31a249ff457f2f1d456228c67719480205aa306daa",
100
+ "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8",
101
+ "https://bcr.bazel.build/modules/rules_android/0.1.1/source.json": "e6986b41626ee10bdc864937ffb6d6bf275bb5b9c65120e6137d56e6331f089e",
102
+ "https://bcr.bazel.build/modules/rules_apple/3.16.0/MODULE.bazel": "0d1caf0b8375942ce98ea944be754a18874041e4e0459401d925577624d3a54a",
103
+ "https://bcr.bazel.build/modules/rules_apple/4.1.0/MODULE.bazel": "76e10fd4a48038d3fc7c5dc6e63b7063bbf5304a2e3bd42edda6ec660eebea68",
104
+ "https://bcr.bazel.build/modules/rules_apple/4.1.0/source.json": "8ee81e1708756f81b343a5eb2b2f0b953f1d25c4ab3d4a68dc02754872e80715",
105
+ "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647",
106
+ "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002",
107
+ "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191",
108
+ "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc",
109
+ "https://bcr.bazel.build/modules/rules_cc/0.0.16/MODULE.bazel": "7661303b8fc1b4d7f532e54e9d6565771fea666fbdf839e0a86affcd02defe87",
110
+ "https://bcr.bazel.build/modules/rules_cc/0.0.17/MODULE.bazel": "2ae1d8f4238ec67d7185d8861cb0a2cdf4bc608697c331b95bf990e69b62e64a",
111
+ "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c",
112
+ "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f",
113
+ "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e",
114
+ "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5",
115
+ "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513",
116
+ "https://bcr.bazel.build/modules/rules_cc/0.1.2/MODULE.bazel": "557ddc3a96858ec0d465a87c0a931054d7dcfd6583af2c7ed3baf494407fd8d0",
117
+ "https://bcr.bazel.build/modules/rules_cc/0.1.5/MODULE.bazel": "88dfc9361e8b5ae1008ac38f7cdfd45ad738e4fa676a3ad67d19204f045a1fd8",
118
+ "https://bcr.bazel.build/modules/rules_cc/0.2.0/MODULE.bazel": "b5c17f90458caae90d2ccd114c81970062946f49f355610ed89bebf954f5783c",
119
+ "https://bcr.bazel.build/modules/rules_cc/0.2.13/MODULE.bazel": "eecdd666eda6be16a8d9dc15e44b5c75133405e820f620a234acc4b1fdc5aa37",
120
+ "https://bcr.bazel.build/modules/rules_cc/0.2.16/MODULE.bazel": "9242fa89f950c6ef7702801ab53922e99c69b02310c39fb6e62b2bd30df2a1d4",
121
+ "https://bcr.bazel.build/modules/rules_cc/0.2.17/MODULE.bazel": "1849602c86cb60da8613d2de887f9566a6d354a6df6d7009f9d04a14402f9a84",
122
+ "https://bcr.bazel.build/modules/rules_cc/0.2.17/source.json": "3832f45d145354049137c0090df04629d9c2b5493dc5c2bf46f1834040133a07",
123
+ "https://bcr.bazel.build/modules/rules_cc/0.2.8/MODULE.bazel": "f1df20f0bf22c28192a794f29b501ee2018fa37a3862a1a2132ae2940a23a642",
124
+ "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6",
125
+ "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8",
126
+ "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74",
127
+ "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86",
128
+ "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31",
129
+ "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a",
130
+ "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6",
131
+ "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab",
132
+ "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe",
133
+ "https://bcr.bazel.build/modules/rules_java/8.3.2/MODULE.bazel": "7336d5511ad5af0b8615fdc7477535a2e4e723a357b6713af439fe8cf0195017",
134
+ "https://bcr.bazel.build/modules/rules_java/8.5.1/MODULE.bazel": "d8a9e38cc5228881f7055a6079f6f7821a073df3744d441978e7a43e20226939",
135
+ "https://bcr.bazel.build/modules/rules_java/8.6.1/MODULE.bazel": "f4808e2ab5b0197f094cabce9f4b006a27766beb6a9975931da07099560ca9c2",
136
+ "https://bcr.bazel.build/modules/rules_java/9.0.3/MODULE.bazel": "1f98ed015f7e744a745e0df6e898a7c5e83562d6b759dfd475c76456dda5ccea",
137
+ "https://bcr.bazel.build/modules/rules_java/9.0.3/source.json": "b038c0c07e12e658135bbc32cc1a2ded6e33785105c9d41958014c592de4593e",
138
+ "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7",
139
+ "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909",
140
+ "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036",
141
+ "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0",
142
+ "https://bcr.bazel.build/modules/rules_jvm_external/6.7/MODULE.bazel": "e717beabc4d091ecb2c803c2d341b88590e9116b8bf7947915eeb33aab4f96dd",
143
+ "https://bcr.bazel.build/modules/rules_jvm_external/6.7/source.json": "5426f412d0a7fc6b611643376c7e4a82dec991491b9ce5cb1cfdd25fe2e92be4",
144
+ "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3",
145
+ "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5",
146
+ "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0",
147
+ "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d",
148
+ "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c",
149
+ "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb",
150
+ "https://bcr.bazel.build/modules/rules_nodejs/6.7.3/MODULE.bazel": "c22a48b2a0dbf05a9dc5f83837bbc24c226c1f6e618de3c3a610044c9f336056",
151
+ "https://bcr.bazel.build/modules/rules_nodejs/6.7.3/source.json": "a3f966f4415a8a6545e560ee5449eac95cc633f96429d08e87c87775c72f5e09",
152
+ "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc",
153
+ "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff",
154
+ "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a",
155
+ "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06",
156
+ "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7",
157
+ "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/MODULE.bazel": "1e5b502e2e1a9e825eef74476a5a1ee524a92297085015a052510b09a1a09483",
158
+ "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73",
159
+ "https://bcr.bazel.build/modules/rules_proto/7.1.0/MODULE.bazel": "002d62d9108f75bb807cd56245d45648f38275cb3a99dcd45dfb864c5d74cb96",
160
+ "https://bcr.bazel.build/modules/rules_proto/7.1.0/source.json": "39f89066c12c24097854e8f57ab8558929f9c8d474d34b2c00ac04630ad8940e",
161
+ "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f",
162
+ "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300",
163
+ "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382",
164
+ "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed",
165
+ "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58",
166
+ "https://bcr.bazel.build/modules/rules_python/0.33.2/MODULE.bazel": "3e036c4ad8d804a4dad897d333d8dce200d943df4827cb849840055be8d2e937",
167
+ "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c",
168
+ "https://bcr.bazel.build/modules/rules_python/1.3.0/MODULE.bazel": "8361d57eafb67c09b75bf4bbe6be360e1b8f4f18118ab48037f2bd50aa2ccb13",
169
+ "https://bcr.bazel.build/modules/rules_python/1.4.1/MODULE.bazel": "8991ad45bdc25018301d6b7e1d3626afc3c8af8aaf4bc04f23d0b99c938b73a6",
170
+ "https://bcr.bazel.build/modules/rules_python/1.6.0/MODULE.bazel": "7e04ad8f8d5bea40451cf80b1bd8262552aa73f841415d20db96b7241bd027d8",
171
+ "https://bcr.bazel.build/modules/rules_python/1.7.0/MODULE.bazel": "d01f995ecd137abf30238ad9ce97f8fc3ac57289c8b24bd0bf53324d937a14f8",
172
+ "https://bcr.bazel.build/modules/rules_python/1.8.4/MODULE.bazel": "33e3971e66161a3e955f7a0d411a8d1f291c4ce4c561851512466f3c77ff8ece",
173
+ "https://bcr.bazel.build/modules/rules_python/1.8.4/source.json": "9fbc0e57bae52cddcc3831d668bce87a47e0c655104a85098d4459dd9a3b0a10",
174
+ "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c",
175
+ "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b",
176
+ "https://bcr.bazel.build/modules/rules_shell/0.4.1/MODULE.bazel": "00e501db01bbf4e3e1dd1595959092c2fadf2087b2852d3f553b5370f5633592",
177
+ "https://bcr.bazel.build/modules/rules_shell/0.6.1/MODULE.bazel": "72e76b0eea4e81611ef5452aa82b3da34caca0c8b7b5c0c9584338aa93bae26b",
178
+ "https://bcr.bazel.build/modules/rules_shell/0.6.1/source.json": "20ec05cd5e592055e214b2da8ccb283c7f2a421ea0dc2acbf1aa792e11c03d0c",
179
+ "https://bcr.bazel.build/modules/rules_swift/1.16.0/MODULE.bazel": "4a09f199545a60d09895e8281362b1ff3bb08bbde69c6fc87aff5b92fcc916ca",
180
+ "https://bcr.bazel.build/modules/rules_swift/2.1.1/MODULE.bazel": "494900a80f944fc7aa61500c2073d9729dff0b764f0e89b824eb746959bc1046",
181
+ "https://bcr.bazel.build/modules/rules_swift/2.4.0/MODULE.bazel": "1639617eb1ede28d774d967a738b4a68b0accb40650beadb57c21846beab5efd",
182
+ "https://bcr.bazel.build/modules/rules_swift/3.1.2/MODULE.bazel": "72c8f5cf9d26427cee6c76c8e3853eb46ce6b0412a081b2b6db6e8ad56267400",
183
+ "https://bcr.bazel.build/modules/rules_swift/3.1.2/source.json": "e85761f3098a6faf40b8187695e3de6d97944e98abd0d8ce579cb2daf6319a66",
184
+ "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8",
185
+ "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c",
186
+ "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c",
187
+ "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5",
188
+ "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216",
189
+ "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/MODULE.bazel": "5e463fbfba7b1701d957555ed45097d7f984211330106ccd1352c6e0af0dcf91",
190
+ "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.2/MODULE.bazel": "75aab2373a4bbe2a1260b9bf2a1ebbdbf872d3bd36f80bff058dccd82e89422f",
191
+ "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.2/source.json": "5fba48bbe0ba48761f9e9f75f92876cafb5d07c0ce059cc7a8027416de94a05b",
192
+ "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43",
193
+ "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0",
194
+ "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/MODULE.bazel": "eec517b5bbe5492629466e11dae908d043364302283de25581e3eb944326c4ca",
195
+ "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/source.json": "22bc55c47af97246cfc093d0acf683a7869377de362b5d1c552c2c2e16b7a806",
196
+ "https://bcr.bazel.build/modules/zlib/1.3.1/MODULE.bazel": "751c9940dcfe869f5f7274e1295422a34623555916eb98c174c1e945594bf198"
197
+ },
198
+ "selectedYankedVersions": {},
199
+ "moduleExtensions": {
200
+ "//:emscripten_cache.bzl%emscripten_cache": {
201
+ "general": {
202
+ "bzlTransitiveDigest": "uqDvXmpTNqW4+ie/Fk+xC3TrFrKvL+9hNtoP51Kt2oo=",
203
+ "usagesDigest": "2qVsvZklnwlZ7gkNiyfxbnTnwQ93DBYiQhQ7ehZ6ELY=",
204
+ "recordedInputs": [],
205
+ "generatedRepoSpecs": {
206
+ "emscripten_cache": {
207
+ "repoRuleId": "@@//:emscripten_cache.bzl%_emscripten_cache_repository",
208
+ "attributes": {
209
+ "configuration": [],
210
+ "targets": []
211
+ }
212
+ }
213
+ }
214
+ }
215
+ },
216
+ "//:emscripten_deps.bzl%emscripten_deps": {
217
+ "general": {
218
+ "bzlTransitiveDigest": "5gG+KTOZ6nqp/qZaD6/mfscAsBHNpT+t597YA0FT+u4=",
219
+ "usagesDigest": "ayjHq8MW8DUqj05aCGk6Qn8GtQ/9ny5iBj0yYg8JTnA=",
220
+ "recordedInputs": [
221
+ "REPO_MAPPING:,bazel_tools bazel_tools",
222
+ "REPO_MAPPING:,rules_cc rules_cc+",
223
+ "REPO_MAPPING:bazel_features+,bazel_features_globals bazel_features++version_extension+bazel_features_globals",
224
+ "REPO_MAPPING:bazel_features+,bazel_features_version bazel_features++version_extension+bazel_features_version",
225
+ "REPO_MAPPING:protobuf+,proto_bazel_features bazel_features+",
226
+ "REPO_MAPPING:rules_cc+,bazel_skylib bazel_skylib+",
227
+ "REPO_MAPPING:rules_cc+,bazel_tools bazel_tools",
228
+ "REPO_MAPPING:rules_cc+,cc_compatibility_proxy rules_cc++compatibility_proxy+cc_compatibility_proxy",
229
+ "REPO_MAPPING:rules_cc+,com_google_protobuf protobuf+",
230
+ "REPO_MAPPING:rules_cc+,platforms platforms",
231
+ "REPO_MAPPING:rules_cc+,rules_cc rules_cc+",
232
+ "REPO_MAPPING:rules_cc++compatibility_proxy+cc_compatibility_proxy,rules_cc rules_cc+"
233
+ ],
234
+ "generatedRepoSpecs": {
235
+ "emscripten_bin_linux": {
236
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
237
+ "attributes": {
238
+ "build_file_content": "\npackage(default_visibility = ['//visibility:public'])\n\nfilegroup(\n name = \"all\",\n srcs = glob([\"**\"]),\n)\n\nfilegroup(\n name = \"includes\",\n srcs = glob([\n \"emscripten/cache/sysroot/include/c++/v1/**\",\n \"emscripten/cache/sysroot/include/compat/**\",\n \"emscripten/cache/sysroot/include/**\",\n \"lib/clang/**/include/**\",\n ]),\n)\n\nfilegroup(\n name = \"emcc_common\",\n srcs = [\n \"emscripten/emcc.py\",\n \"emscripten/embuilder.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/cache/sysroot_install.stamp\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/third_party/**\",\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"compiler_files\",\n srcs = [\n \"bin/clang\",\n \"bin/clang++\",\n \":emcc_common\",\n \":includes\",\n ],\n)\n\nfilegroup(\n name = \"linker_files\",\n srcs = [\n \"bin/clang\",\n \"bin/llvm-ar\",\n \"bin/llvm-dwarfdump\",\n \"bin/llvm-nm\",\n \"bin/llvm-objcopy\",\n \"bin/wasm-ctor-eval\",\n \"bin/wasm-emscripten-finalize\",\n \"bin/wasm-ld\",\n \"bin/wasm-metadce\",\n \"bin/wasm-opt\",\n \"bin/wasm-split\",\n \"bin/wasm2js\",\n \":emcc_common\",\n ] + glob(\n include = [\n \"emscripten/cache/sysroot/lib/**\",\n \"emscripten/node_modules/**\",\n \"emscripten/src/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"ar_files\",\n srcs = [\n \"bin/llvm-ar\",\n \"emscripten/emar.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n",
239
+ "sha256": "dac0c07aaa3558b564b1252764b1b1aca3136bee34f54bb50130bb7bee124d7a",
240
+ "strip_prefix": "install",
241
+ "type": "tar.xz",
242
+ "url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/54d45123d7ad4aa96ce57e74a1f3f9d1c54e6402/wasm-binaries.tar.xz"
243
+ }
244
+ },
245
+ "emscripten_bin_linux_arm64": {
246
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
247
+ "attributes": {
248
+ "build_file_content": "\npackage(default_visibility = ['//visibility:public'])\n\nfilegroup(\n name = \"all\",\n srcs = glob([\"**\"]),\n)\n\nfilegroup(\n name = \"includes\",\n srcs = glob([\n \"emscripten/cache/sysroot/include/c++/v1/**\",\n \"emscripten/cache/sysroot/include/compat/**\",\n \"emscripten/cache/sysroot/include/**\",\n \"lib/clang/**/include/**\",\n ]),\n)\n\nfilegroup(\n name = \"emcc_common\",\n srcs = [\n \"emscripten/emcc.py\",\n \"emscripten/embuilder.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/cache/sysroot_install.stamp\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/third_party/**\",\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"compiler_files\",\n srcs = [\n \"bin/clang\",\n \"bin/clang++\",\n \":emcc_common\",\n \":includes\",\n ],\n)\n\nfilegroup(\n name = \"linker_files\",\n srcs = [\n \"bin/clang\",\n \"bin/llvm-ar\",\n \"bin/llvm-dwarfdump\",\n \"bin/llvm-nm\",\n \"bin/llvm-objcopy\",\n \"bin/wasm-ctor-eval\",\n \"bin/wasm-emscripten-finalize\",\n \"bin/wasm-ld\",\n \"bin/wasm-metadce\",\n \"bin/wasm-opt\",\n \"bin/wasm-split\",\n \"bin/wasm2js\",\n \":emcc_common\",\n ] + glob(\n include = [\n \"emscripten/cache/sysroot/lib/**\",\n \"emscripten/node_modules/**\",\n \"emscripten/src/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"ar_files\",\n srcs = [\n \"bin/llvm-ar\",\n \"emscripten/emar.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n",
249
+ "sha256": "0c632bf6a185906036edea8b39bc4658193674a27221c0f07d8c9b10ce5b3b9c",
250
+ "strip_prefix": "install",
251
+ "type": "tar.xz",
252
+ "url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/54d45123d7ad4aa96ce57e74a1f3f9d1c54e6402/wasm-binaries-arm64.tar.xz"
253
+ }
254
+ },
255
+ "emscripten_bin_mac": {
256
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
257
+ "attributes": {
258
+ "build_file_content": "\npackage(default_visibility = ['//visibility:public'])\n\nfilegroup(\n name = \"all\",\n srcs = glob([\"**\"]),\n)\n\nfilegroup(\n name = \"includes\",\n srcs = glob([\n \"emscripten/cache/sysroot/include/c++/v1/**\",\n \"emscripten/cache/sysroot/include/compat/**\",\n \"emscripten/cache/sysroot/include/**\",\n \"lib/clang/**/include/**\",\n ]),\n)\n\nfilegroup(\n name = \"emcc_common\",\n srcs = [\n \"emscripten/emcc.py\",\n \"emscripten/embuilder.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/cache/sysroot_install.stamp\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/third_party/**\",\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"compiler_files\",\n srcs = [\n \"bin/clang\",\n \"bin/clang++\",\n \":emcc_common\",\n \":includes\",\n ],\n)\n\nfilegroup(\n name = \"linker_files\",\n srcs = [\n \"bin/clang\",\n \"bin/llvm-ar\",\n \"bin/llvm-dwarfdump\",\n \"bin/llvm-nm\",\n \"bin/llvm-objcopy\",\n \"bin/wasm-ctor-eval\",\n \"bin/wasm-emscripten-finalize\",\n \"bin/wasm-ld\",\n \"bin/wasm-metadce\",\n \"bin/wasm-opt\",\n \"bin/wasm-split\",\n \"bin/wasm2js\",\n \":emcc_common\",\n ] + glob(\n include = [\n \"emscripten/cache/sysroot/lib/**\",\n \"emscripten/node_modules/**\",\n \"emscripten/src/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"ar_files\",\n srcs = [\n \"bin/llvm-ar\",\n \"emscripten/emar.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n",
259
+ "sha256": "61c2d4ae5fc3cf601d8cd7291a9fc6a5cbf0e5e20ba7129ad172a7b0c9a8416b",
260
+ "strip_prefix": "install",
261
+ "type": "tar.xz",
262
+ "url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/mac/54d45123d7ad4aa96ce57e74a1f3f9d1c54e6402/wasm-binaries.tar.xz"
263
+ }
264
+ },
265
+ "emscripten_bin_mac_arm64": {
266
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
267
+ "attributes": {
268
+ "build_file_content": "\npackage(default_visibility = ['//visibility:public'])\n\nfilegroup(\n name = \"all\",\n srcs = glob([\"**\"]),\n)\n\nfilegroup(\n name = \"includes\",\n srcs = glob([\n \"emscripten/cache/sysroot/include/c++/v1/**\",\n \"emscripten/cache/sysroot/include/compat/**\",\n \"emscripten/cache/sysroot/include/**\",\n \"lib/clang/**/include/**\",\n ]),\n)\n\nfilegroup(\n name = \"emcc_common\",\n srcs = [\n \"emscripten/emcc.py\",\n \"emscripten/embuilder.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/cache/sysroot_install.stamp\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/third_party/**\",\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"compiler_files\",\n srcs = [\n \"bin/clang\",\n \"bin/clang++\",\n \":emcc_common\",\n \":includes\",\n ],\n)\n\nfilegroup(\n name = \"linker_files\",\n srcs = [\n \"bin/clang\",\n \"bin/llvm-ar\",\n \"bin/llvm-dwarfdump\",\n \"bin/llvm-nm\",\n \"bin/llvm-objcopy\",\n \"bin/wasm-ctor-eval\",\n \"bin/wasm-emscripten-finalize\",\n \"bin/wasm-ld\",\n \"bin/wasm-metadce\",\n \"bin/wasm-opt\",\n \"bin/wasm-split\",\n \"bin/wasm2js\",\n \":emcc_common\",\n ] + glob(\n include = [\n \"emscripten/cache/sysroot/lib/**\",\n \"emscripten/node_modules/**\",\n \"emscripten/src/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"ar_files\",\n srcs = [\n \"bin/llvm-ar\",\n \"emscripten/emar.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n",
269
+ "sha256": "6246ab40dc94e1df47c6df41f8ebd2473dfa1c74b7079ff67c2fb1793bb87ea8",
270
+ "strip_prefix": "install",
271
+ "type": "tar.xz",
272
+ "url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/mac/54d45123d7ad4aa96ce57e74a1f3f9d1c54e6402/wasm-binaries-arm64.tar.xz"
273
+ }
274
+ },
275
+ "emscripten_bin_win": {
276
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
277
+ "attributes": {
278
+ "build_file_content": "\npackage(default_visibility = ['//visibility:public'])\n\nfilegroup(\n name = \"all\",\n srcs = glob([\"**\"]),\n)\n\nfilegroup(\n name = \"includes\",\n srcs = glob([\n \"emscripten/cache/sysroot/include/c++/v1/**\",\n \"emscripten/cache/sysroot/include/compat/**\",\n \"emscripten/cache/sysroot/include/**\",\n \"lib/clang/**/include/**\",\n ]),\n)\n\nfilegroup(\n name = \"emcc_common\",\n srcs = [\n \"emscripten/emcc.py\",\n \"emscripten/embuilder.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/cache/sysroot_install.stamp\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/third_party/**\",\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"compiler_files\",\n srcs = [\n \"bin/clang.exe\",\n \"bin/clang++.exe\",\n \":emcc_common\",\n \":includes\",\n ],\n)\n\nfilegroup(\n name = \"linker_files\",\n srcs = [\n \"bin/clang.exe\",\n \"bin/llvm-ar.exe\",\n \"bin/llvm-dwarfdump.exe\",\n \"bin/llvm-nm.exe\",\n \"bin/llvm-objcopy.exe\",\n \"bin/wasm-ctor-eval.exe\",\n \"bin/wasm-emscripten-finalize.exe\",\n \"bin/wasm-ld.exe\",\n \"bin/wasm-metadce.exe\",\n \"bin/wasm-opt.exe\",\n \"bin/wasm-split.exe\",\n \"bin/wasm2js.exe\",\n \":emcc_common\",\n ] + glob(\n include = [\n \"emscripten/cache/sysroot/lib/**\",\n \"emscripten/node_modules/**\",\n \"emscripten/src/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"ar_files\",\n srcs = [\n \"bin/llvm-ar.exe\",\n \"emscripten/emar.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n",
279
+ "sha256": "b5863a51fc5c2227a2a743fb18da70e4b6f1b9ddc0fe4243f99cc8bca783bbde",
280
+ "strip_prefix": "install",
281
+ "type": "zip",
282
+ "url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/win/54d45123d7ad4aa96ce57e74a1f3f9d1c54e6402/wasm-binaries.zip"
283
+ }
284
+ }
285
+ }
286
+ }
287
+ },
288
+ "@@pybind11_bazel+//:internal_configure.bzl%internal_configure_extension": {
289
+ "general": {
290
+ "bzlTransitiveDigest": "06cynZ1bCvvy8zHPrrDlXq+Z68xmjctHpfFxi+zEpJY=",
291
+ "usagesDigest": "D1r3lfzMuUBFxgG8V6o0bQTLMk3GkaGOaPzw53wrwyw=",
292
+ "recordedInputs": [
293
+ "REPO_MAPPING:pybind11_bazel+,bazel_tools bazel_tools",
294
+ "FILE:@@pybind11_bazel+//MODULE.bazel e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34"
295
+ ],
296
+ "generatedRepoSpecs": {
297
+ "pybind11": {
298
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
299
+ "attributes": {
300
+ "build_file": "@@pybind11_bazel+//:pybind11-BUILD.bazel",
301
+ "strip_prefix": "pybind11-2.12.0",
302
+ "urls": [
303
+ "https://github.com/pybind/pybind11/archive/v2.12.0.zip"
304
+ ]
305
+ }
306
+ }
307
+ }
308
+ }
309
+ },
310
+ "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": {
311
+ "general": {
312
+ "bzlTransitiveDigest": "ABI1D/sbS1ovwaW/kHDoj8nnXjQ0oKU9fzmzEG4iT8o=",
313
+ "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=",
314
+ "recordedInputs": [
315
+ "REPO_MAPPING:rules_kotlin+,bazel_tools bazel_tools"
316
+ ],
317
+ "generatedRepoSpecs": {
318
+ "com_github_jetbrains_kotlin_git": {
319
+ "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_compiler_git_repository",
320
+ "attributes": {
321
+ "urls": [
322
+ "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip"
323
+ ],
324
+ "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88"
325
+ }
326
+ },
327
+ "com_github_jetbrains_kotlin": {
328
+ "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_capabilities_repository",
329
+ "attributes": {
330
+ "git_repository_name": "com_github_jetbrains_kotlin_git",
331
+ "compiler_version": "1.9.23"
332
+ }
333
+ },
334
+ "com_github_google_ksp": {
335
+ "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:ksp.bzl%ksp_compiler_plugin_repository",
336
+ "attributes": {
337
+ "urls": [
338
+ "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip"
339
+ ],
340
+ "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d",
341
+ "strip_version": "1.9.23-1.0.20"
342
+ }
343
+ },
344
+ "com_github_pinterest_ktlint": {
345
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file",
346
+ "attributes": {
347
+ "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985",
348
+ "urls": [
349
+ "https://github.com/pinterest/ktlint/releases/download/1.3.0/ktlint"
350
+ ],
351
+ "executable": true
352
+ }
353
+ },
354
+ "rules_android": {
355
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
356
+ "attributes": {
357
+ "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806",
358
+ "strip_prefix": "rules_android-0.1.1",
359
+ "urls": [
360
+ "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip"
361
+ ]
362
+ }
363
+ }
364
+ }
365
+ }
366
+ },
367
+ "@@rules_nodejs+//nodejs:extensions.bzl%node": {
368
+ "general": {
369
+ "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=",
370
+ "usagesDigest": "UbyXWIWurUiDMKZYdqsdwuN77fDUNQtz3tjbGgBT7ho=",
371
+ "recordedInputs": [],
372
+ "generatedRepoSpecs": {
373
+ "nodejs_linux_amd64": {
374
+ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
375
+ "attributes": {
376
+ "node_download_auth": {},
377
+ "node_repositories": {},
378
+ "node_urls": [
379
+ "https://nodejs.org/dist/v{version}/{filename}"
380
+ ],
381
+ "node_version": "20.18.0",
382
+ "include_headers": false,
383
+ "platform": "linux_amd64"
384
+ }
385
+ },
386
+ "nodejs_linux_arm64": {
387
+ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
388
+ "attributes": {
389
+ "node_download_auth": {},
390
+ "node_repositories": {},
391
+ "node_urls": [
392
+ "https://nodejs.org/dist/v{version}/{filename}"
393
+ ],
394
+ "node_version": "20.18.0",
395
+ "include_headers": false,
396
+ "platform": "linux_arm64"
397
+ }
398
+ },
399
+ "nodejs_linux_s390x": {
400
+ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
401
+ "attributes": {
402
+ "node_download_auth": {},
403
+ "node_repositories": {},
404
+ "node_urls": [
405
+ "https://nodejs.org/dist/v{version}/{filename}"
406
+ ],
407
+ "node_version": "20.18.0",
408
+ "include_headers": false,
409
+ "platform": "linux_s390x"
410
+ }
411
+ },
412
+ "nodejs_linux_ppc64le": {
413
+ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
414
+ "attributes": {
415
+ "node_download_auth": {},
416
+ "node_repositories": {},
417
+ "node_urls": [
418
+ "https://nodejs.org/dist/v{version}/{filename}"
419
+ ],
420
+ "node_version": "20.18.0",
421
+ "include_headers": false,
422
+ "platform": "linux_ppc64le"
423
+ }
424
+ },
425
+ "nodejs_darwin_amd64": {
426
+ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
427
+ "attributes": {
428
+ "node_download_auth": {},
429
+ "node_repositories": {},
430
+ "node_urls": [
431
+ "https://nodejs.org/dist/v{version}/{filename}"
432
+ ],
433
+ "node_version": "20.18.0",
434
+ "include_headers": false,
435
+ "platform": "darwin_amd64"
436
+ }
437
+ },
438
+ "nodejs_darwin_arm64": {
439
+ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
440
+ "attributes": {
441
+ "node_download_auth": {},
442
+ "node_repositories": {},
443
+ "node_urls": [
444
+ "https://nodejs.org/dist/v{version}/{filename}"
445
+ ],
446
+ "node_version": "20.18.0",
447
+ "include_headers": false,
448
+ "platform": "darwin_arm64"
449
+ }
450
+ },
451
+ "nodejs_windows_amd64": {
452
+ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
453
+ "attributes": {
454
+ "node_download_auth": {},
455
+ "node_repositories": {},
456
+ "node_urls": [
457
+ "https://nodejs.org/dist/v{version}/{filename}"
458
+ ],
459
+ "node_version": "20.18.0",
460
+ "include_headers": false,
461
+ "platform": "windows_amd64"
462
+ }
463
+ },
464
+ "nodejs_windows_arm64": {
465
+ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
466
+ "attributes": {
467
+ "node_download_auth": {},
468
+ "node_repositories": {},
469
+ "node_urls": [
470
+ "https://nodejs.org/dist/v{version}/{filename}"
471
+ ],
472
+ "node_version": "20.18.0",
473
+ "include_headers": false,
474
+ "platform": "windows_arm64"
475
+ }
476
+ },
477
+ "nodejs": {
478
+ "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias",
479
+ "attributes": {
480
+ "user_node_repository_name": "nodejs"
481
+ }
482
+ },
483
+ "nodejs_host": {
484
+ "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias",
485
+ "attributes": {
486
+ "user_node_repository_name": "nodejs"
487
+ }
488
+ },
489
+ "nodejs_toolchains": {
490
+ "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_toolchains_repo.bzl%nodejs_toolchains_repo",
491
+ "attributes": {
492
+ "user_node_repository_name": "nodejs"
493
+ }
494
+ }
495
+ }
496
+ }
497
+ },
498
+ "@@rules_python+//python/extensions:config.bzl%config": {
499
+ "general": {
500
+ "bzlTransitiveDigest": "wUM/eFwo5Zy7rn36nZ9ZxN9tXhmcWMVGXIExerGg6gM=",
501
+ "usagesDigest": "p2al+dDKI5UlCyNvheMVynbWSGbdiji/jMz53fMNfJA=",
502
+ "recordedInputs": [
503
+ "REPO_MAPPING:rules_python+,bazel_tools bazel_tools",
504
+ "REPO_MAPPING:rules_python+,pypi__build rules_python++config+pypi__build",
505
+ "REPO_MAPPING:rules_python+,pypi__click rules_python++config+pypi__click",
506
+ "REPO_MAPPING:rules_python+,pypi__colorama rules_python++config+pypi__colorama",
507
+ "REPO_MAPPING:rules_python+,pypi__importlib_metadata rules_python++config+pypi__importlib_metadata",
508
+ "REPO_MAPPING:rules_python+,pypi__installer rules_python++config+pypi__installer",
509
+ "REPO_MAPPING:rules_python+,pypi__more_itertools rules_python++config+pypi__more_itertools",
510
+ "REPO_MAPPING:rules_python+,pypi__packaging rules_python++config+pypi__packaging",
511
+ "REPO_MAPPING:rules_python+,pypi__pep517 rules_python++config+pypi__pep517",
512
+ "REPO_MAPPING:rules_python+,pypi__pip rules_python++config+pypi__pip",
513
+ "REPO_MAPPING:rules_python+,pypi__pip_tools rules_python++config+pypi__pip_tools",
514
+ "REPO_MAPPING:rules_python+,pypi__pyproject_hooks rules_python++config+pypi__pyproject_hooks",
515
+ "REPO_MAPPING:rules_python+,pypi__setuptools rules_python++config+pypi__setuptools",
516
+ "REPO_MAPPING:rules_python+,pypi__tomli rules_python++config+pypi__tomli",
517
+ "REPO_MAPPING:rules_python+,pypi__wheel rules_python++config+pypi__wheel",
518
+ "REPO_MAPPING:rules_python+,pypi__zipp rules_python++config+pypi__zipp"
519
+ ],
520
+ "generatedRepoSpecs": {
521
+ "rules_python_internal": {
522
+ "repoRuleId": "@@rules_python+//python/private:internal_config_repo.bzl%internal_config_repo",
523
+ "attributes": {
524
+ "transition_setting_generators": {},
525
+ "transition_settings": []
526
+ }
527
+ },
528
+ "pypi__build": {
529
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
530
+ "attributes": {
531
+ "url": "https://files.pythonhosted.org/packages/e2/03/f3c8ba0a6b6e30d7d18c40faab90807c9bb5e9a1e3b2fe2008af624a9c97/build-1.2.1-py3-none-any.whl",
532
+ "sha256": "75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4",
533
+ "type": "zip",
534
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
535
+ }
536
+ },
537
+ "pypi__click": {
538
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
539
+ "attributes": {
540
+ "url": "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl",
541
+ "sha256": "ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28",
542
+ "type": "zip",
543
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
544
+ }
545
+ },
546
+ "pypi__colorama": {
547
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
548
+ "attributes": {
549
+ "url": "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl",
550
+ "sha256": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6",
551
+ "type": "zip",
552
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
553
+ }
554
+ },
555
+ "pypi__importlib_metadata": {
556
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
557
+ "attributes": {
558
+ "url": "https://files.pythonhosted.org/packages/2d/0a/679461c511447ffaf176567d5c496d1de27cbe34a87df6677d7171b2fbd4/importlib_metadata-7.1.0-py3-none-any.whl",
559
+ "sha256": "30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570",
560
+ "type": "zip",
561
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
562
+ }
563
+ },
564
+ "pypi__installer": {
565
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
566
+ "attributes": {
567
+ "url": "https://files.pythonhosted.org/packages/e5/ca/1172b6638d52f2d6caa2dd262ec4c811ba59eee96d54a7701930726bce18/installer-0.7.0-py3-none-any.whl",
568
+ "sha256": "05d1933f0a5ba7d8d6296bb6d5018e7c94fa473ceb10cf198a92ccea19c27b53",
569
+ "type": "zip",
570
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
571
+ }
572
+ },
573
+ "pypi__more_itertools": {
574
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
575
+ "attributes": {
576
+ "url": "https://files.pythonhosted.org/packages/50/e2/8e10e465ee3987bb7c9ab69efb91d867d93959095f4807db102d07995d94/more_itertools-10.2.0-py3-none-any.whl",
577
+ "sha256": "686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684",
578
+ "type": "zip",
579
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
580
+ }
581
+ },
582
+ "pypi__packaging": {
583
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
584
+ "attributes": {
585
+ "url": "https://files.pythonhosted.org/packages/49/df/1fceb2f8900f8639e278b056416d49134fb8d84c5942ffaa01ad34782422/packaging-24.0-py3-none-any.whl",
586
+ "sha256": "2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5",
587
+ "type": "zip",
588
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
589
+ }
590
+ },
591
+ "pypi__pep517": {
592
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
593
+ "attributes": {
594
+ "url": "https://files.pythonhosted.org/packages/25/6e/ca4a5434eb0e502210f591b97537d322546e4833dcb4d470a48c375c5540/pep517-0.13.1-py3-none-any.whl",
595
+ "sha256": "31b206f67165b3536dd577c5c3f1518e8fbaf38cbc57efff8369a392feff1721",
596
+ "type": "zip",
597
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
598
+ }
599
+ },
600
+ "pypi__pip": {
601
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
602
+ "attributes": {
603
+ "url": "https://files.pythonhosted.org/packages/8a/6a/19e9fe04fca059ccf770861c7d5721ab4c2aebc539889e97c7977528a53b/pip-24.0-py3-none-any.whl",
604
+ "sha256": "ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc",
605
+ "type": "zip",
606
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
607
+ }
608
+ },
609
+ "pypi__pip_tools": {
610
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
611
+ "attributes": {
612
+ "url": "https://files.pythonhosted.org/packages/0d/dc/38f4ce065e92c66f058ea7a368a9c5de4e702272b479c0992059f7693941/pip_tools-7.4.1-py3-none-any.whl",
613
+ "sha256": "4c690e5fbae2f21e87843e89c26191f0d9454f362d8acdbd695716493ec8b3a9",
614
+ "type": "zip",
615
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
616
+ }
617
+ },
618
+ "pypi__pyproject_hooks": {
619
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
620
+ "attributes": {
621
+ "url": "https://files.pythonhosted.org/packages/ae/f3/431b9d5fe7d14af7a32340792ef43b8a714e7726f1d7b69cc4e8e7a3f1d7/pyproject_hooks-1.1.0-py3-none-any.whl",
622
+ "sha256": "7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2",
623
+ "type": "zip",
624
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
625
+ }
626
+ },
627
+ "pypi__setuptools": {
628
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
629
+ "attributes": {
630
+ "url": "https://files.pythonhosted.org/packages/90/99/158ad0609729111163fc1f674a5a42f2605371a4cf036d0441070e2f7455/setuptools-78.1.1-py3-none-any.whl",
631
+ "sha256": "c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561",
632
+ "type": "zip",
633
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
634
+ }
635
+ },
636
+ "pypi__tomli": {
637
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
638
+ "attributes": {
639
+ "url": "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl",
640
+ "sha256": "939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
641
+ "type": "zip",
642
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
643
+ }
644
+ },
645
+ "pypi__wheel": {
646
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
647
+ "attributes": {
648
+ "url": "https://files.pythonhosted.org/packages/7d/cd/d7460c9a869b16c3dd4e1e403cce337df165368c71d6af229a74699622ce/wheel-0.43.0-py3-none-any.whl",
649
+ "sha256": "55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81",
650
+ "type": "zip",
651
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
652
+ }
653
+ },
654
+ "pypi__zipp": {
655
+ "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
656
+ "attributes": {
657
+ "url": "https://files.pythonhosted.org/packages/da/55/a03fd7240714916507e1fcf7ae355bd9d9ed2e6db492595f1a67f61681be/zipp-3.18.2-py3-none-any.whl",
658
+ "sha256": "dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e",
659
+ "type": "zip",
660
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
661
+ }
662
+ }
663
+ }
664
+ }
665
+ },
666
+ "@@rules_python+//python/uv:uv.bzl%uv": {
667
+ "general": {
668
+ "bzlTransitiveDigest": "ijW9KS7qsIY+yBVvJ+Nr1mzwQox09j13DnE3iIwaeTM=",
669
+ "usagesDigest": "/HRt5Hw/vpDr9CDrKEPjeDIjxo4307VLxMu8BNAEDWA=",
670
+ "recordedInputs": [
671
+ "REPO_MAPPING:rules_python+,bazel_tools bazel_tools",
672
+ "REPO_MAPPING:rules_python+,platforms platforms"
673
+ ],
674
+ "generatedRepoSpecs": {
675
+ "uv": {
676
+ "repoRuleId": "@@rules_python+//python/uv/private:uv_toolchains_repo.bzl%uv_toolchains_repo",
677
+ "attributes": {
678
+ "toolchain_type": "'@@rules_python+//python/uv:uv_toolchain_type'",
679
+ "toolchain_names": [
680
+ "none"
681
+ ],
682
+ "toolchain_implementations": {
683
+ "none": "'@@rules_python+//python:none'"
684
+ },
685
+ "toolchain_compatible_with": {
686
+ "none": [
687
+ "@platforms//:incompatible"
688
+ ]
689
+ },
690
+ "toolchain_target_settings": {}
691
+ }
692
+ }
693
+ }
694
+ }
695
+ }
696
+ },
697
+ "facts": {}
698
+ }
bazel/README.md ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Bazel Emscripten toolchain
2
+
3
+ ## Setup Instructions
4
+
5
+ Support for depending on emsdk with a WORKSPACE file was removed and last available in [emsdk version 4.0.6](https://github.com/emscripten-core/emsdk/tree/24fc909c0da13ef641d5ae75e89b5a97f25e37aa). Now we only support inclusion as a bzlmod module.
6
+
7
+ In your `MODULE.bazel` file, put:
8
+ ```starlark
9
+ emsdk_version = "4.0.6"
10
+ bazel_dep(name = "emsdk", version = emsdk_version)
11
+ git_override(
12
+ module_name = "emsdk",
13
+ remote = "https://github.com/emscripten-core/emsdk.git",
14
+ strip_prefix = "bazel",
15
+ tag = emsdk_version,
16
+ )
17
+ ```
18
+
19
+ You can use a different version of this SDK by changing it in your `MODULE.bazel` file. The Emscripten version is by default the same as the SDK version, but you can use a different one as well by adding to your `MODULE.bazel`:
20
+
21
+ ```
22
+ emscripten_deps = use_extension(
23
+ "@emsdk//:emscripten_deps.bzl",
24
+ "emscripten_deps",
25
+ )
26
+ emscripten_deps.config(version = "4.0.1")
27
+ ```
28
+
29
+ ## Building
30
+
31
+ Put the following line into your `.bazelrc`:
32
+
33
+ ```
34
+ build --incompatible_enable_cc_toolchain_resolution
35
+ ```
36
+
37
+ Then write a new rule wrapping your `cc_binary`.
38
+
39
+ ```starlark
40
+ load("@rules_cc//cc:defs.bzl", "cc_binary")
41
+ load("@emsdk//emscripten_toolchain:wasm_rules.bzl", "wasm_cc_binary")
42
+
43
+ cc_binary(
44
+ name = "hello-world",
45
+ srcs = ["hello-world.cc"],
46
+ )
47
+
48
+ wasm_cc_binary(
49
+ name = "hello-world-wasm",
50
+ cc_target = ":hello-world",
51
+ )
52
+ ```
53
+
54
+ Now you can run `bazel build :hello-world-wasm`. The result of this build will
55
+ be the individual files produced by emscripten. Note that some of these files
56
+ may be empty. This is because bazel has no concept of optional outputs for
57
+ rules.
58
+
59
+ `wasm_cc_binary` uses transition to use emscripten toolchain on `cc_target`
60
+ and all of its dependencies, and does not require amending `.bazelrc`. This
61
+ is the preferred way, since it also unpacks the resulting tarball.
62
+
63
+ The Emscripten cache shipped by default does not include LTO, 64-bit or PIC
64
+ builds of the system libraries and ports. If you wish to use these features you
65
+ will need to declare the cache in your `MODULE.bazel` as follows. Note
66
+ that the configuration consists of the same flags that can be passed to
67
+ embuilder. If `targets` is not set, all system libraries and ports will be
68
+ built, i.e., the `ALL` option to embuilder.
69
+
70
+ ```starlark
71
+ emscripten_cache = use_extension(
72
+ "@emsdk//:emscripten_cache.bzl",
73
+ "emscripten_cache",
74
+ )
75
+ emscripten_cache.configuration(flags = ["--lto"])
76
+ emscripten_cache.targets(targets = [
77
+ "libprintf_long_double-debug",
78
+ "libstubs-debug",
79
+ "libnoexit",
80
+ "libc-debug",
81
+ "libdlmalloc",
82
+ "libcompiler_rt",
83
+ "libc++-noexcept",
84
+ "libc++abi-debug-noexcept",
85
+ "libsockets"
86
+ ])
87
+ ```
88
+
89
+ See `test_external/` for an example using [embind](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html).
bazel/bazelrc ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ build:wasm --incompatible_enable_cc_toolchain_resolution
2
+ build:wasm --platforms=@emsdk//:platform_wasm
bazel/emscripten_build_file.bzl ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """A templated build file for emscripten repositories"""
2
+
3
+ EMSCRIPTEN_BUILD_FILE_CONTENT_TEMPLATE = """
4
+ package(default_visibility = ['//visibility:public'])
5
+
6
+ filegroup(
7
+ name = "all",
8
+ srcs = glob(["**"]),
9
+ )
10
+
11
+ filegroup(
12
+ name = "includes",
13
+ srcs = glob([
14
+ "emscripten/cache/sysroot/include/c++/v1/**",
15
+ "emscripten/cache/sysroot/include/compat/**",
16
+ "emscripten/cache/sysroot/include/**",
17
+ "lib/clang/**/include/**",
18
+ ]),
19
+ )
20
+
21
+ filegroup(
22
+ name = "emcc_common",
23
+ srcs = [
24
+ "emscripten/emcc.py",
25
+ "emscripten/embuilder.py",
26
+ "emscripten/emscripten-version.txt",
27
+ "emscripten/cache/sysroot_install.stamp",
28
+ "emscripten/src/settings.js",
29
+ "emscripten/src/settings_internal.js",
30
+ ] + glob(
31
+ include = [
32
+ "emscripten/third_party/**",
33
+ "emscripten/tools/**",
34
+ ],
35
+ exclude = [
36
+ "**/__pycache__/**",
37
+ ],
38
+ ),
39
+ )
40
+
41
+ filegroup(
42
+ name = "compiler_files",
43
+ srcs = [
44
+ "bin/clang{bin_extension}",
45
+ "bin/clang++{bin_extension}",
46
+ ":emcc_common",
47
+ ":includes",
48
+ ],
49
+ )
50
+
51
+ filegroup(
52
+ name = "linker_files",
53
+ srcs = [
54
+ "bin/clang{bin_extension}",
55
+ "bin/llvm-ar{bin_extension}",
56
+ "bin/llvm-dwarfdump{bin_extension}",
57
+ "bin/llvm-nm{bin_extension}",
58
+ "bin/llvm-objcopy{bin_extension}",
59
+ "bin/wasm-ctor-eval{bin_extension}",
60
+ "bin/wasm-emscripten-finalize{bin_extension}",
61
+ "bin/wasm-ld{bin_extension}",
62
+ "bin/wasm-metadce{bin_extension}",
63
+ "bin/wasm-opt{bin_extension}",
64
+ "bin/wasm-split{bin_extension}",
65
+ "bin/wasm2js{bin_extension}",
66
+ ":emcc_common",
67
+ ] + glob(
68
+ include = [
69
+ "emscripten/cache/sysroot/lib/**",
70
+ "emscripten/node_modules/**",
71
+ "emscripten/src/**",
72
+ ],
73
+ ),
74
+ )
75
+
76
+ filegroup(
77
+ name = "ar_files",
78
+ srcs = [
79
+ "bin/llvm-ar{bin_extension}",
80
+ "emscripten/emar.py",
81
+ "emscripten/emscripten-version.txt",
82
+ "emscripten/src/settings.js",
83
+ "emscripten/src/settings_internal.js",
84
+ ] + glob(
85
+ include = [
86
+ "emscripten/tools/**",
87
+ ],
88
+ exclude = [
89
+ "**/__pycache__/**",
90
+ ],
91
+ ),
92
+ )
93
+ """
bazel/emscripten_cache.bzl ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ BUILD_FILE_CONTENT_TEMPLATE = """
2
+ package(default_visibility = ['//visibility:public'])
3
+ exports_files(['emscripten_config'])
4
+ """
5
+
6
+ EMBUILDER_CONFIG_TEMPLATE = """
7
+ CACHE = '{cache}'
8
+ BINARYEN_ROOT = '{binaryen_root}'
9
+ LLVM_ROOT = '{llvm_root}'
10
+ """
11
+
12
+ def get_root_and_script_ext(repository_ctx):
13
+ if repository_ctx.os.name.startswith("linux"):
14
+ if "amd64" in repository_ctx.os.arch or "x86_64" in repository_ctx.os.arch:
15
+ return (repository_ctx.path(Label("@emscripten_bin_linux//:BUILD.bazel")).dirname, "")
16
+ elif "aarch64" in repository_ctx.os.arch:
17
+ return (repository_ctx.path(Label("@emscripten_bin_linux_arm64//:BUILD.bazel")).dirname, "")
18
+ else:
19
+ fail("Unsupported architecture for Linux")
20
+ elif repository_ctx.os.name.startswith("mac"):
21
+ if "amd64" in repository_ctx.os.arch or "x86_64" in repository_ctx.os.arch:
22
+ return (repository_ctx.path(Label("@emscripten_bin_mac//:BUILD.bazel")).dirname, "")
23
+ elif "aarch64" in repository_ctx.os.arch:
24
+ return (repository_ctx.path(Label("@emscripten_bin_mac_arm64//:BUILD.bazel")).dirname, "")
25
+ else:
26
+ fail("Unsupported architecture for MacOS")
27
+ elif repository_ctx.os.name.startswith("windows"):
28
+ return (repository_ctx.path(Label("@emscripten_bin_win//:BUILD.bazel")).dirname, ".bat")
29
+ else:
30
+ fail("Unsupported operating system")
31
+
32
+ def _emscripten_cache_repository_impl(repository_ctx):
33
+ # Read the default emscripten configuration file
34
+ default_config = repository_ctx.read(
35
+ repository_ctx.path(
36
+ Label("@emsdk//emscripten_toolchain:default_config"),
37
+ ),
38
+ )
39
+
40
+ if repository_ctx.attr.targets or repository_ctx.attr.configuration:
41
+ root, script_ext = get_root_and_script_ext(repository_ctx)
42
+ llvm_root = root.get_child("bin")
43
+ cache = repository_ctx.path("cache")
44
+
45
+ # Create configuration file
46
+ embuilder_config_content = EMBUILDER_CONFIG_TEMPLATE.format(
47
+ cache = cache,
48
+ binaryen_root = root,
49
+ llvm_root = llvm_root,
50
+ )
51
+ repository_ctx.file("embuilder_config", embuilder_config_content)
52
+ embuilder_config_path = repository_ctx.path("embuilder_config")
53
+ embuilder_path = "{}{}".format(root.get_child("emscripten").get_child("embuilder"), script_ext)
54
+
55
+ # Prepare the command line
56
+ if repository_ctx.attr.targets:
57
+ targets = repository_ctx.attr.targets
58
+ else:
59
+ # If no targets are requested, build everything
60
+ targets = ["ALL"]
61
+ flags = ["--em-config", embuilder_config_path] + repository_ctx.attr.configuration
62
+ embuilder_args = [embuilder_path] + flags + ["build"] + targets
63
+
64
+ # Run embuilder
65
+ repository_ctx.report_progress("Building secondary cache")
66
+ result = repository_ctx.execute(
67
+ embuilder_args,
68
+ quiet = True,
69
+ environment = {
70
+ "EM_IGNORE_SANITY": "1",
71
+ "EM_NODE_JS": "empty",
72
+ },
73
+ )
74
+ if result.return_code != 0:
75
+ fail("Embuilder exited with a non-zero return code")
76
+
77
+ # Override Emscripten's cache with the secondary cache
78
+ default_config += "CACHE = '{}'\n".format(cache)
79
+
80
+ # Create the configuration file for the toolchain and export
81
+ repository_ctx.file("emscripten_config", default_config)
82
+ repository_ctx.file("BUILD.bazel", BUILD_FILE_CONTENT_TEMPLATE)
83
+
84
+ _emscripten_cache_repository = repository_rule(
85
+ implementation = _emscripten_cache_repository_impl,
86
+ attrs = {
87
+ "configuration": attr.string_list(),
88
+ "targets": attr.string_list(),
89
+ },
90
+ )
91
+
92
+ def _emscripten_cache_impl(ctx):
93
+ all_configuration = []
94
+ all_targets = []
95
+ for mod in ctx.modules:
96
+ for configuration in mod.tags.configuration:
97
+ all_configuration += configuration.flags
98
+ for targets in mod.tags.targets:
99
+ all_targets += targets.targets
100
+
101
+ _emscripten_cache_repository(
102
+ name = "emscripten_cache",
103
+ configuration = all_configuration,
104
+ targets = all_targets,
105
+ )
106
+
107
+ emscripten_cache = module_extension(
108
+ tag_classes = {
109
+ "configuration": tag_class(attrs = {"flags": attr.string_list()}),
110
+ "targets": tag_class(attrs = {"targets": attr.string_list()}),
111
+ },
112
+ implementation = _emscripten_cache_impl,
113
+ )
bazel/emscripten_deps.bzl ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ load(":remote_emscripten_repository.bzl", "remote_emscripten_repository")
2
+ load(":revisions.bzl", "EMSCRIPTEN_TAGS")
3
+
4
+ def _parse_version(v):
5
+ return [int(u) for u in v.split(".")]
6
+
7
+ def _empty_repository_impl(ctx):
8
+ ctx.file("MODULE.bazel", """module(name = "{}")""".format(ctx.name))
9
+ ctx.file("BUILD.bazel", "")
10
+
11
+ _empty_repository = repository_rule(
12
+ implementation = _empty_repository_impl,
13
+ )
14
+
15
+ def emscripten_repo_name(name):
16
+ return "emscripten_bin_{}".format(name)
17
+
18
+ def _emscripten_deps_impl(ctx):
19
+ version = None
20
+
21
+ for mod in ctx.modules:
22
+ for config in mod.tags.config:
23
+ if config.version and version != None:
24
+ fail("More than one emscripten version specified!")
25
+ version = config.version
26
+ if version == None:
27
+ version = "latest"
28
+
29
+ if version == "latest":
30
+ version = reversed(sorted(EMSCRIPTEN_TAGS.keys(), key = _parse_version))[0]
31
+
32
+ revision = EMSCRIPTEN_TAGS[version]
33
+
34
+ emscripten_url = "https://storage.googleapis.com/webassembly/emscripten-releases-builds/{}/{}/wasm-binaries{}.{}"
35
+
36
+ remote_emscripten_repository(
37
+ name = emscripten_repo_name("linux"),
38
+ bin_extension = "",
39
+ sha256 = revision.sha_linux,
40
+ strip_prefix = "install",
41
+ type = "tar.xz",
42
+ url = emscripten_url.format("linux", revision.hash, "", "tar.xz"),
43
+ )
44
+
45
+ # Not all versions have a linux/arm64 release: https://github.com/emscripten-core/emsdk/issues/547
46
+ if hasattr(revision, "sha_linux_arm64"):
47
+ remote_emscripten_repository(
48
+ name = emscripten_repo_name("linux_arm64"),
49
+ bin_extension = "",
50
+ sha256 = revision.sha_linux_arm64,
51
+ strip_prefix = "install",
52
+ type = "tar.xz",
53
+ url = emscripten_url.format("linux", revision.hash, "-arm64", "tar.xz"),
54
+ )
55
+ else:
56
+ _empty_repository(
57
+ name = emscripten_repo_name("linux_arm64"),
58
+ )
59
+
60
+ remote_emscripten_repository(
61
+ name = emscripten_repo_name("mac"),
62
+ bin_extension = "",
63
+ sha256 = revision.sha_mac,
64
+ strip_prefix = "install",
65
+ type = "tar.xz",
66
+ url = emscripten_url.format("mac", revision.hash, "", "tar.xz"),
67
+ )
68
+
69
+ remote_emscripten_repository(
70
+ name = emscripten_repo_name("mac_arm64"),
71
+ bin_extension = "",
72
+ sha256 = revision.sha_mac_arm64,
73
+ strip_prefix = "install",
74
+ type = "tar.xz",
75
+ url = emscripten_url.format("mac", revision.hash, "-arm64", "tar.xz"),
76
+ )
77
+
78
+ remote_emscripten_repository(
79
+ name = emscripten_repo_name("win"),
80
+ bin_extension = ".exe",
81
+ sha256 = revision.sha_win,
82
+ strip_prefix = "install",
83
+ type = "zip",
84
+ url = emscripten_url.format("win", revision.hash, "", "zip"),
85
+ )
86
+
87
+ emscripten_deps = module_extension(
88
+ tag_classes = {
89
+ "config": tag_class(
90
+ attrs = {
91
+ "version": attr.string(
92
+ doc = "Version to use. 'latest' to use latest.",
93
+ values = ["latest"] + EMSCRIPTEN_TAGS.keys(),
94
+ ),
95
+ },
96
+ ),
97
+ },
98
+ implementation = _emscripten_deps_impl,
99
+ )
bazel/emscripten_toolchain/BUILD.bazel ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ load("@rules_cc//cc:defs.bzl", "cc_library")
2
+ load("@rules_python//python:py_binary.bzl", "py_binary")
3
+ load("//:emscripten_deps.bzl", "emscripten_repo_name")
4
+ load("//:remote_emscripten_repository.bzl", "create_toolchains", "emscripten_toolchain_name")
5
+ load(":platform_info.bzl", "platform_info")
6
+
7
+ package(default_visibility = ["//visibility:public"])
8
+
9
+ # dlmalloc.bc is implicitly added by the emscripten toolchain
10
+ cc_library(name = "malloc")
11
+
12
+ platform_info(
13
+ name = "platform_info",
14
+ script_extension = select({
15
+ "@platforms//os:windows": ".bat",
16
+ "//conditions:default": ".sh",
17
+ }),
18
+ visibility = [":__subpackages__"],
19
+ )
20
+
21
+ create_toolchains(
22
+ name = emscripten_toolchain_name("linux"),
23
+ exec_compatible_with = [
24
+ "@platforms//os:linux",
25
+ "@platforms//cpu:x86_64",
26
+ ],
27
+ repo_name = emscripten_repo_name("linux"),
28
+ )
29
+
30
+ create_toolchains(
31
+ name = emscripten_toolchain_name("linux_arm64"),
32
+ exec_compatible_with = [
33
+ "@platforms//os:linux",
34
+ "@platforms//cpu:arm64",
35
+ ],
36
+ repo_name = emscripten_repo_name("linux_arm64"),
37
+ )
38
+
39
+ create_toolchains(
40
+ name = emscripten_toolchain_name("mac"),
41
+ exec_compatible_with = [
42
+ "@platforms//os:macos",
43
+ "@platforms//cpu:x86_64",
44
+ ],
45
+ repo_name = emscripten_repo_name("mac"),
46
+ )
47
+
48
+ create_toolchains(
49
+ name = emscripten_toolchain_name("mac_arm64"),
50
+ exec_compatible_with = [
51
+ "@platforms//os:macos",
52
+ "@platforms//cpu:arm64",
53
+ ],
54
+ repo_name = emscripten_repo_name("mac_arm64"),
55
+ )
56
+
57
+ create_toolchains(
58
+ name = emscripten_toolchain_name("win"),
59
+ exec_compatible_with = [
60
+ "@platforms//os:windows",
61
+ "@platforms//cpu:x86_64",
62
+ ],
63
+ repo_name = emscripten_repo_name("win"),
64
+ )
65
+
66
+ py_binary(
67
+ name = "wasm_binary",
68
+ srcs = ["wasm_binary.py"],
69
+ )
bazel/emscripten_toolchain/default_config ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import platform
3
+
4
+ ROOT_DIR = os.environ["ROOT_DIR"]
5
+ EMSCRIPTEN_ROOT = os.environ["EMSCRIPTEN"]
6
+ BINARYEN_ROOT = os.path.join(ROOT_DIR, os.environ["EM_BIN_PATH"])
7
+ LLVM_ROOT = os.path.join(BINARYEN_ROOT, "bin")
8
+ NODE_JS = os.path.join(ROOT_DIR, os.environ["NODE_JS_PATH"])
9
+ FROZEN_CACHE = True
10
+
11
+ # This works around an issue with Bazel RBE where the symlinks in node_modules/.bin
12
+ # are uploaded as the linked files, which means the cli.js cannot load its
13
+ # dependencies from the expected locations.
14
+ # See https://github.com/emscripten-core/emscripten/pull/16640 for more
15
+ CLOSURE_COMPILER = [NODE_JS, os.path.join(EMSCRIPTEN_ROOT, "node_modules",
16
+ "google-closure-compiler", "cli.js")]
bazel/emscripten_toolchain/emar.bat ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ @ECHO OFF
2
+
3
+ call %~dp0\env.bat
4
+
5
+ "%EMSDK_PYTHON%" %EMSCRIPTEN%\emar.py %*
bazel/emscripten_toolchain/emar.sh ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ source $(dirname $0)/env.sh
4
+
5
+ exec $EMSDK_PYTHON $EMSCRIPTEN/emar.py "$@"
bazel/emscripten_toolchain/emcc.bat ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ @ECHO OFF
2
+
3
+ call %~dp0\env.bat
4
+
5
+ "%EMSDK_PYTHON%" %EMSCRIPTEN%\emcc.py %*
bazel/emscripten_toolchain/emcc.sh ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ source $(dirname $0)/env.sh
4
+
5
+ exec $EMSDK_PYTHON $EMSCRIPTEN/emcc.py "$@"
bazel/emscripten_toolchain/emcc_link.bat ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ @ECHO OFF
2
+
3
+ call %~dp0\env.bat
4
+
5
+ "%EMSDK_PYTHON%" %~dp0\link_wrapper.py %*
bazel/emscripten_toolchain/emcc_link.sh ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ source $(dirname $0)/env.sh
4
+
5
+ exec $EMSDK_PYTHON $(dirname $0)/link_wrapper.py "$@"
bazel/emscripten_toolchain/env.bat ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ @ECHO OFF
2
+
3
+ set ROOT_DIR=%EXT_BUILD_ROOT%
4
+ if "%ROOT_DIR%"=="" set ROOT_DIR=%CD%
5
+ set EMSCRIPTEN=%ROOT_DIR%\%EM_BIN_PATH%\emscripten
6
+ set EM_CONFIG=%ROOT_DIR%\%EM_CONFIG_PATH%
7
+ set EMSDK_PYTHON=%ROOT_DIR%\%BAZEL_PYTHON_RELPATH%
bazel/emscripten_toolchain/env.sh ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ export ROOT_DIR=${EXT_BUILD_ROOT:-$(pwd -P)}
4
+ export EMSCRIPTEN=$ROOT_DIR/$EM_BIN_PATH/emscripten
5
+ export EM_CONFIG=$ROOT_DIR/$EM_CONFIG_PATH
6
+ export EMSDK_PYTHON=$ROOT_DIR/$BAZEL_PYTHON_RELPATH
bazel/emscripten_toolchain/link_wrapper.py ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """wrapper around emcc link step.
3
+
4
+ This wrapper currently serves the following purposes.
5
+
6
+ 1. When building with --config=wasm the final output is multiple files, usually
7
+ at least one .js and one .wasm file. Since the cc_binary link step only
8
+ allows a single output, we must tar up the outputs into a single file.
9
+
10
+ 2. Add quotes around arguments that need them in the response file to work
11
+ around a bazel quirk.
12
+
13
+ 3. Ensure the external_debug_info section of the wasm points at the correct
14
+ bazel path.
15
+ """
16
+
17
+
18
+ import argparse
19
+ import os
20
+ import subprocess
21
+ import sys
22
+
23
+ # Only argument should be @path/to/parameter/file
24
+ assert sys.argv[1][0] == '@', sys.argv
25
+ param_filename = sys.argv[1][1:]
26
+ param_file_args = [line.strip() for line in open(param_filename).readlines()]
27
+
28
+ # Re-write response file if needed.
29
+ if any(' ' in a for a in param_file_args):
30
+ new_param_filename = param_filename + '.modified'
31
+ with open(new_param_filename, 'w') as f:
32
+ for param in param_file_args:
33
+ if ' ' in param:
34
+ f.write('"%s"' % param)
35
+ else:
36
+ f.write(param)
37
+ f.write('\n')
38
+ sys.argv[1] = '@' + new_param_filename
39
+
40
+ emcc_py = os.path.join(os.environ['EMSCRIPTEN'], 'emcc.py')
41
+ rtn = subprocess.call([sys.executable, emcc_py] + sys.argv[1:])
42
+ if rtn != 0:
43
+ sys.exit(1)
44
+
45
+ # Parse the arguments that we gave to the linker to determine what the output
46
+ # file is named and what the output format is.
47
+ parser = argparse.ArgumentParser(add_help=False)
48
+ parser.add_argument('-o')
49
+ parser.add_argument('--oformat')
50
+ options = parser.parse_known_args(param_file_args)[0]
51
+ output_file = options.o
52
+ oformat = options.oformat
53
+ outdir = os.path.normpath(os.path.dirname(output_file))
54
+ base_name = os.path.basename(output_file)
55
+
56
+ # The output file name is the name of the build rule that was built.
57
+ # Add an appropriate file extension based on --oformat.
58
+ if oformat is not None:
59
+ base_name_split = os.path.splitext(base_name)
60
+
61
+ # If the output name has no extension, give it the appropriate extension.
62
+ if not base_name_split[1]:
63
+ os.replace(output_file, output_file + '.' + oformat)
64
+
65
+ # If the output name does have an extension and it matches the output format,
66
+ # change the base_name so it doesn't have an extension.
67
+ elif base_name_split[1] == '.' + oformat:
68
+ base_name = base_name_split[0]
69
+
70
+ # If the output name does have an extension and it does not match the output
71
+ # format, change the base_name so it doesn't have an extension and rename
72
+ # the output_file so it has the proper extension.
73
+ # Note that if you do something like name your build rule "foo.js" and pass
74
+ # "--oformat=html", emscripten will write to the same file for both the js and
75
+ # html output, overwriting the js output entirely with the html.
76
+ # Please don't do that.
77
+ else:
78
+ base_name = base_name_split[0]
79
+ os.replace(output_file, os.path.join(outdir, base_name + '.' + oformat))
80
+
81
+ files = []
82
+ extensions = [
83
+ '.js',
84
+ '.wasm',
85
+ '.wasm.map',
86
+ '.data',
87
+ '.js.symbols',
88
+ '.wasm.debug.wasm',
89
+ '.html',
90
+ '.ts',
91
+ '.d.ts',
92
+ ]
93
+
94
+ for ext in extensions:
95
+ filename = base_name + ext
96
+ if os.path.exists(os.path.join(outdir, filename)):
97
+ files.append(filename)
98
+
99
+ wasm_base = os.path.join(outdir, base_name + '.wasm')
100
+ if os.path.exists(wasm_base + '.debug.wasm') and os.path.exists(wasm_base):
101
+ # If we have a .wasm.debug.wasm file and a .wasm file, we need to rewrite the
102
+ # section in the .wasm file that refers to it. The path that's in there
103
+ # is the blaze output path; we want it to be just the filename.
104
+
105
+ llvm_objcopy = os.path.join(
106
+ os.environ['EM_BIN_PATH'], 'bin/llvm-objcopy')
107
+ # First, check to make sure the .wasm file has the header that needs to be
108
+ # rewritten.
109
+ rtn = subprocess.call([
110
+ llvm_objcopy,
111
+ '--dump-section=external_debug_info=/dev/null',
112
+ wasm_base], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
113
+ if rtn == 0:
114
+ # If llvm-objcopy did not return an error, the external_debug_info section
115
+ # must exist, so we're good to continue.
116
+
117
+ # Next we need to convert length of the filename to LEB128.
118
+ # Start by converting the length of the filename to a bit string.
119
+ bit_string = '{0:b}'.format(len(base_name + '.wasm.debug.wasm'))
120
+
121
+ # Pad the bit string with 0s so that its length is a multiple of 7.
122
+ while len(bit_string) % 7 != 0:
123
+ bit_string = '0' + bit_string
124
+
125
+ # Break up our bit string into chunks of 7.
126
+ # We do this backwards because the final format is little-endian.
127
+ final_bytes = bytearray()
128
+ for i in reversed(range(0, len(bit_string), 7)):
129
+ binary_part = bit_string[i:i + 7]
130
+ if i != 0:
131
+ # Every chunk except the last one needs to be prepended with '1'.
132
+ # The length of each chunk is 7, so that one has an implicit '0'.
133
+ binary_part = '1' + binary_part
134
+ final_bytes.append(int(binary_part, 2))
135
+ # Finally, add the actual filename.
136
+ final_bytes.extend((base_name + '.wasm.debug.wasm').encode())
137
+
138
+ # Write our length + filename bytes to a temp file.
139
+ with open(base_name + '_debugsection.tmp', 'wb+') as f:
140
+ f.write(final_bytes)
141
+ f.close()
142
+
143
+ # First delete the old section.
144
+ subprocess.check_call([
145
+ llvm_objcopy,
146
+ wasm_base,
147
+ '--remove-section=external_debug_info'])
148
+ # Rewrite section with the new size and filename from the temp file.
149
+ subprocess.check_call([
150
+ llvm_objcopy,
151
+ wasm_base,
152
+ '--add-section=external_debug_info=' + base_name + '_debugsection.tmp'])
153
+
154
+ # Make sure we have at least one output file.
155
+ if not files:
156
+ print('emcc.py did not appear to output any known files!')
157
+ sys.exit(1)
158
+
159
+ # cc_binary must output exactly one file; put all the output files in a tarball.
160
+ cmd = ['tar', 'cf', base_name + '.tar'] + files
161
+ subprocess.check_call(cmd, cwd=outdir)
162
+ os.replace(os.path.join(outdir, base_name + '.tar'), output_file)
163
+
164
+ sys.exit(0)
bazel/emscripten_toolchain/platform_info.bzl ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Defines a provider and rule for platform information.
2
+ """
3
+
4
+ PlatformInfo = provider(
5
+ doc = "Provides some info about a platform",
6
+ fields = {
7
+ "script_extension": "The script extension for the platform, e.g. '.sh' or '.bat'",
8
+ },
9
+ )
10
+
11
+ platform_info = rule(
12
+ implementation = lambda ctx: PlatformInfo(
13
+ script_extension = ctx.attr.script_extension,
14
+ ),
15
+ attrs = {
16
+ "script_extension": attr.string(
17
+ mandatory = True,
18
+ values = [".sh", ".bat"],
19
+ doc = "The script extension for the platform, e.g. '.sh' or '.bat'",
20
+ ),
21
+ },
22
+ )
bazel/emscripten_toolchain/toolchain.bzl ADDED
@@ -0,0 +1,1194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """This module encapsulates logic to create emscripten_cc_toolchain_config rule."""
2
+
3
+ load("@rules_cc//cc:action_names.bzl", "ACTION_NAMES")
4
+ load(
5
+ "@rules_cc//cc:cc_toolchain_config_lib.bzl",
6
+ "action_config",
7
+ "env_entry",
8
+ "env_set",
9
+ "feature",
10
+ "feature_set",
11
+ "flag_group",
12
+ "tool",
13
+ "tool_path",
14
+ "variable_with_value",
15
+ "with_feature_set",
16
+ _flag_set = "flag_set",
17
+ )
18
+ load("@rules_cc//cc:defs.bzl", "CcToolchainConfigInfo", "cc_common")
19
+ load(":platform_info.bzl", "PlatformInfo", "platform_info")
20
+
21
+ def flag_set(flags = None, features = None, not_features = None, **kwargs):
22
+ """Extension to flag_set which allows for a "simple" form.
23
+
24
+ The simple form allows specifying flags as a simple list instead of a flag_group
25
+ if enable_if or expand_if semantics are not required.
26
+
27
+ Similarly, the simple form allows passing features/not_features if they are a simple
28
+ list of semantically "and" features.
29
+ (i.e. "asan" and "dbg", rather than "asan" or "dbg")
30
+
31
+ Args:
32
+ flags: list, set of flags
33
+ features: list, set of features required to be enabled.
34
+ not_features: list, set of features required to not be enabled.
35
+ **kwargs: The rest of the args for flag_set.
36
+
37
+ Returns:
38
+ flag_set
39
+ """
40
+ if flags:
41
+ if kwargs.get("flag_groups"):
42
+ fail("Cannot set flags and flag_groups")
43
+ else:
44
+ kwargs["flag_groups"] = [flag_group(flags = flags)]
45
+
46
+ if features or not_features:
47
+ if kwargs.get("with_features"):
48
+ fail("Cannot set features/not_feature and with_features")
49
+ kwargs["with_features"] = [with_feature_set(
50
+ features = features or [],
51
+ not_features = not_features or [],
52
+ )]
53
+ return _flag_set(**kwargs)
54
+
55
+ CROSSTOOL_DEFAULT_WARNINGS = [
56
+ "-Wall",
57
+ ]
58
+
59
+ def _impl(ctx):
60
+ platform_info = ctx.attr._exec_platform_info[PlatformInfo]
61
+
62
+ target_cpu = ctx.attr.cpu
63
+ toolchain_identifier = "emscripten-" + target_cpu
64
+ target_system_name = target_cpu + "-unknown-emscripten"
65
+
66
+ host_system_name = "i686-unknown-linux-gnu"
67
+
68
+ target_libc = "musl/js"
69
+
70
+ abi_version = "emscripten_syscalls"
71
+
72
+ compiler = "emscripten"
73
+ abi_libc_version = "default"
74
+
75
+ cc_target_os = "emscripten"
76
+
77
+ emscripten_dir = ctx.attr.emscripten_binaries.label.workspace_root
78
+
79
+ nodeinfo = ctx.toolchains["@rules_nodejs//nodejs:toolchain_type"].nodeinfo
80
+ nodejs_path = nodeinfo.node.path
81
+
82
+ python_exec_runtime = (
83
+ ctx.toolchains["@rules_python//python:exec_tools_toolchain_type"].
84
+ exec_tools.exec_interpreter[platform_common.ToolchainInfo].py3_runtime
85
+ )
86
+
87
+ builtin_sysroot = emscripten_dir + "/emscripten/cache/sysroot"
88
+
89
+ emcc_script = "emcc" + platform_info.script_extension
90
+ emcc_link_script = "emcc_link" + platform_info.script_extension
91
+ emar_script = "emar" + platform_info.script_extension
92
+
93
+ ################################################################
94
+ # Tools
95
+ ################################################################
96
+ clang_tool = tool(path = emcc_script)
97
+ clif_match_tool = tool(path = "dummy_clif_matcher")
98
+ link_tool = tool(path = emcc_link_script)
99
+ archive_tool = tool(path = emar_script)
100
+ strip_tool = tool(path = "NOT_USED_STRIP_TOOL")
101
+
102
+ #### Legacy tool paths (much of this is redundant with action_configs, but
103
+ #### these are still used for some things)
104
+ tool_paths = [
105
+ tool_path(name = "ar", path = emar_script),
106
+ tool_path(name = "cpp", path = "/bin/false"),
107
+ tool_path(name = "gcc", path = emcc_script),
108
+ tool_path(name = "gcov", path = "/bin/false"),
109
+ tool_path(name = "ld", path = emcc_link_script),
110
+ tool_path(name = "nm", path = "NOT_USED"),
111
+ tool_path(name = "objdump", path = "/bin/false"),
112
+ tool_path(name = "strip", path = "NOT_USED"),
113
+ ]
114
+
115
+ ################################################################
116
+ # Action Configs
117
+ ################################################################
118
+
119
+ cpp_compile_action = action_config(
120
+ action_name = ACTION_NAMES.cpp_compile,
121
+ tools = [clang_tool],
122
+ )
123
+
124
+ cpp_module_compile_action = action_config(
125
+ action_name = ACTION_NAMES.cpp_module_compile,
126
+ tools = [clang_tool],
127
+ )
128
+
129
+ cpp_module_codegen_action = action_config(
130
+ action_name = ACTION_NAMES.cpp_module_codegen,
131
+ tools = [clang_tool],
132
+ )
133
+
134
+ clif_match_action = action_config(
135
+ action_name = ACTION_NAMES.clif_match,
136
+ tools = [clif_match_tool],
137
+ )
138
+
139
+ cpp_link_dynamic_library_action = action_config(
140
+ action_name = ACTION_NAMES.cpp_link_dynamic_library,
141
+ tools = [link_tool],
142
+ )
143
+
144
+ strip_action = action_config(
145
+ action_name = ACTION_NAMES.strip,
146
+ tools = [strip_tool],
147
+ )
148
+
149
+ preprocess_assemble_action = action_config(
150
+ action_name = ACTION_NAMES.preprocess_assemble,
151
+ tools = [clang_tool],
152
+ )
153
+
154
+ cpp_header_parsing_action = action_config(
155
+ action_name = ACTION_NAMES.cpp_header_parsing,
156
+ tools = [clang_tool],
157
+ )
158
+
159
+ cpp_link_static_library_action = action_config(
160
+ action_name = ACTION_NAMES.cpp_link_static_library,
161
+ enabled = True,
162
+ flag_sets = [
163
+ flag_set(
164
+ flag_groups = [
165
+ flag_group(
166
+ flags = ["rcsD", "%{output_execpath}"],
167
+ expand_if_available = "output_execpath",
168
+ ),
169
+ ],
170
+ ),
171
+ flag_set(
172
+ flag_groups = [
173
+ flag_group(
174
+ iterate_over = "libraries_to_link",
175
+ flag_groups = [
176
+ flag_group(
177
+ flags = ["%{libraries_to_link.name}"],
178
+ expand_if_equal = variable_with_value(
179
+ name = "libraries_to_link.type",
180
+ value = "object_file",
181
+ ),
182
+ ),
183
+ flag_group(
184
+ flags = ["%{libraries_to_link.object_files}"],
185
+ iterate_over = "libraries_to_link.object_files",
186
+ expand_if_equal = variable_with_value(
187
+ name = "libraries_to_link.type",
188
+ value = "object_file_group",
189
+ ),
190
+ ),
191
+ ],
192
+ expand_if_available = "libraries_to_link",
193
+ ),
194
+ ],
195
+ ),
196
+ flag_set(
197
+ flag_groups = [
198
+ flag_group(
199
+ flags = ["@%{linker_param_file}"],
200
+ expand_if_available = "linker_param_file",
201
+ ),
202
+ ],
203
+ ),
204
+ ],
205
+ tools = [archive_tool],
206
+ )
207
+
208
+ c_compile_action = action_config(
209
+ action_name = ACTION_NAMES.c_compile,
210
+ tools = [clang_tool],
211
+ )
212
+
213
+ linkstamp_compile_action = action_config(
214
+ action_name = ACTION_NAMES.linkstamp_compile,
215
+ tools = [clang_tool],
216
+ )
217
+
218
+ assemble_action = action_config(
219
+ action_name = ACTION_NAMES.assemble,
220
+ tools = [clang_tool],
221
+ )
222
+
223
+ cpp_link_executable_action = action_config(
224
+ action_name = ACTION_NAMES.cpp_link_executable,
225
+ tools = [link_tool],
226
+ )
227
+
228
+ cpp_link_nodeps_dynamic_library_action = action_config(
229
+ action_name = ACTION_NAMES.cpp_link_nodeps_dynamic_library,
230
+ tools = [link_tool],
231
+ )
232
+
233
+ action_configs = [
234
+ strip_action,
235
+ c_compile_action,
236
+ cpp_compile_action,
237
+ linkstamp_compile_action,
238
+ assemble_action,
239
+ preprocess_assemble_action,
240
+ cpp_header_parsing_action,
241
+ cpp_module_compile_action,
242
+ cpp_module_codegen_action,
243
+ cpp_link_executable_action,
244
+ cpp_link_dynamic_library_action,
245
+ cpp_link_nodeps_dynamic_library_action,
246
+ cpp_link_static_library_action,
247
+ clif_match_action,
248
+ ]
249
+
250
+ all_compile_actions = [
251
+ ACTION_NAMES.c_compile,
252
+ ACTION_NAMES.cpp_compile,
253
+ ACTION_NAMES.linkstamp_compile,
254
+ ACTION_NAMES.assemble,
255
+ ACTION_NAMES.preprocess_assemble,
256
+ ACTION_NAMES.cpp_header_parsing,
257
+ ACTION_NAMES.cpp_module_compile,
258
+ ACTION_NAMES.cpp_module_codegen,
259
+ ACTION_NAMES.clif_match,
260
+ ACTION_NAMES.lto_backend,
261
+ ]
262
+
263
+ all_cpp_compile_actions = [
264
+ ACTION_NAMES.cpp_compile,
265
+ ACTION_NAMES.linkstamp_compile,
266
+ ACTION_NAMES.cpp_header_parsing,
267
+ ACTION_NAMES.cpp_module_compile,
268
+ ACTION_NAMES.cpp_module_codegen,
269
+ ACTION_NAMES.clif_match,
270
+ ]
271
+
272
+ preprocessor_compile_actions = [
273
+ ACTION_NAMES.c_compile,
274
+ ACTION_NAMES.cpp_compile,
275
+ ACTION_NAMES.linkstamp_compile,
276
+ ACTION_NAMES.preprocess_assemble,
277
+ ACTION_NAMES.cpp_header_parsing,
278
+ ACTION_NAMES.cpp_module_compile,
279
+ ACTION_NAMES.clif_match,
280
+ ]
281
+
282
+ all_link_actions = [
283
+ ACTION_NAMES.cpp_link_executable,
284
+ ACTION_NAMES.cpp_link_dynamic_library,
285
+ ACTION_NAMES.cpp_link_nodeps_dynamic_library,
286
+ ]
287
+
288
+ ################################################################
289
+ # Features
290
+ ################################################################
291
+
292
+ features = [
293
+ # This set of magic "feature"s are important configuration information for blaze.
294
+ feature(name = "no_legacy_features", enabled = True),
295
+ feature(
296
+ name = "has_configured_linker_path",
297
+ enabled = True,
298
+ ),
299
+
300
+ # Blaze requests this feature by default, but we don't care.
301
+ feature(name = "dependency_file"),
302
+
303
+ # Blaze requests this feature by default, but we don't care.
304
+ feature(name = "random_seed"),
305
+
306
+ # Formerly "needsPic" attribute
307
+ feature(name = "supports_pic", enabled = False),
308
+
309
+ # Blaze requests this feature by default.
310
+ # Blaze also tests if this feature is supported, before setting the "pic" build-variable.
311
+ feature(name = "pic"),
312
+
313
+ # Blaze requests this feature by default.
314
+ # Blaze also tests if this feature is supported before setting preprocessor_defines
315
+ # (...but why?)
316
+ feature(name = "preprocessor_defines"),
317
+
318
+ # Blaze requests this feature by default.
319
+ # Blaze also tests if this feature is supported before setting includes. (...but why?)
320
+ feature(name = "include_paths"),
321
+
322
+ # Blaze tests if this feature is enabled in order to create implicit
323
+ # "nodeps" .so outputs from cc_library rules.
324
+ feature(name = "supports_dynamic_linker", enabled = False),
325
+
326
+ # Blaze requests this feature when linking a cc_binary which is
327
+ # "dynamic" aka linked against nodeps-dynamic-library cc_library
328
+ # outputs.
329
+ feature(name = "dynamic_linking_mode"),
330
+
331
+ #### Configuration features
332
+ feature(
333
+ name = "crosstool_cpu",
334
+ enabled = True,
335
+ implies = ["crosstool_cpu_" + target_cpu],
336
+ ),
337
+ feature(
338
+ name = "crosstool_cpu_asmjs",
339
+ provides = ["variant:crosstool_cpu"],
340
+ ),
341
+ feature(
342
+ name = "crosstool_cpu_wasm",
343
+ provides = ["variant:crosstool_cpu"],
344
+ ),
345
+
346
+ # These 3 features will be automatically enabled by blaze in the
347
+ # corresponding build mode.
348
+ feature(
349
+ name = "opt",
350
+ provides = ["variant:crosstool_build_mode"],
351
+ ),
352
+ feature(
353
+ name = "dbg",
354
+ provides = ["variant:crosstool_build_mode"],
355
+ ),
356
+ feature(
357
+ name = "fastbuild",
358
+ provides = ["variant:crosstool_build_mode"],
359
+ ),
360
+
361
+ # Feature to prevent 'command line too long' issues
362
+ feature(
363
+ name = "archive_param_file",
364
+ enabled = True,
365
+ ),
366
+ feature(
367
+ name = "compiler_param_file",
368
+ enabled = True,
369
+ ),
370
+
371
+ #### User-settable features
372
+
373
+ # Set if enabling exceptions.
374
+ feature(name = "exceptions"),
375
+
376
+ # Set if enabling wasm_exceptions.
377
+ feature(name = "wasm_exceptions"),
378
+
379
+ # This feature overrides the default optimization to prefer execution speed
380
+ # over binary size (like clang -O3).
381
+ feature(
382
+ name = "optimized_for_speed",
383
+ provides = ["variant:crosstool_optimization_mode"],
384
+ ),
385
+
386
+ # This feature overrides the default optimization to prefer binary size over
387
+ # execution speed (like clang -Oz).
388
+ feature(
389
+ name = "optimized_for_size",
390
+ provides = ["variant:crosstool_optimization_mode"],
391
+ ),
392
+
393
+ # Convenience aliases / alt-spellings.
394
+ feature(
395
+ name = "optimize_for_speed",
396
+ implies = ["optimized_for_speed"],
397
+ ),
398
+ feature(
399
+ name = "optimize_for_size",
400
+ implies = ["optimized_for_size"],
401
+ ),
402
+
403
+ # This feature allows easier use of profiling tools by preserving mangled
404
+ # C++ names. This does everything profiling_funcs does and more.
405
+ feature(name = "profiling"),
406
+
407
+ # This feature emits only enough debug info for function names to appear
408
+ # in profiles.
409
+ feature(name = "profiling_funcs"),
410
+
411
+ # This feature allows source maps to be generated.
412
+ feature(
413
+ name = "source_maps",
414
+ implies = ["full_debug_info"],
415
+ ),
416
+ feature(
417
+ name = "dwarf_debug_info",
418
+ implies = ["profiling"],
419
+ ),
420
+
421
+ # Turns on full debug info (-g3).
422
+ feature(name = "full_debug_info"),
423
+
424
+ # Enables the use of "Emscripten" Pthread implementation.
425
+ # https://kripken.github.io/emscripten-site/docs/porting/pthreads.html
426
+ # https://github.com/kripken/emscripten/wiki/Pthreads-with-WebAssembly
427
+ feature(name = "use_pthreads"),
428
+
429
+ # If enabled, the runtime will exit when main() completes.
430
+ feature(name = "exit_runtime"),
431
+
432
+ # Primarily for toolchain maintainers:
433
+ feature(name = "emcc_debug"),
434
+ feature(name = "emcc_debug_link"),
435
+ feature(
436
+ name = "llvm_backend",
437
+ requires = [feature_set(features = ["crosstool_cpu_wasm"])],
438
+ enabled = True,
439
+ ),
440
+
441
+ # Remove once flag is flipped.
442
+ # See https://github.com/bazelbuild/bazel/issues/7687
443
+ feature(
444
+ name = "do_not_split_linking_cmdline",
445
+ ),
446
+
447
+ # Adds simd support, only available with the llvm backend.
448
+ feature(
449
+ name = "wasm_simd",
450
+ requires = [feature_set(features = ["llvm_backend"])],
451
+ ),
452
+ # Adds relaxed-simd support, only available with the llvm backend.
453
+ feature(
454
+ name = "wasm_relaxed_simd",
455
+ requires = [feature_set(features = ["llvm_backend"])],
456
+ ),
457
+ feature(
458
+ name = "precise_long_double_printf",
459
+ enabled = True,
460
+ ),
461
+ feature(
462
+ name = "wasm_warnings_as_errors",
463
+ enabled = False,
464
+ ),
465
+
466
+ # ASan and UBSan. See also:
467
+ # https://emscripten.org/docs/debugging/Sanitizers.html
468
+ feature(name = "wasm_asan"),
469
+ feature(name = "wasm_ubsan"),
470
+ feature(
471
+ name = "output_format_js",
472
+ enabled = True,
473
+ ),
474
+ feature(
475
+ name = "wasm_standalone",
476
+ ),
477
+ ]
478
+
479
+ crosstool_default_flag_sets = [
480
+ # Compile, Link, and CC_FLAGS make variable
481
+ flag_set(
482
+ actions = [
483
+ ACTION_NAMES.c_compile,
484
+ ACTION_NAMES.cpp_compile,
485
+ ACTION_NAMES.linkstamp_compile,
486
+ ACTION_NAMES.assemble,
487
+ ACTION_NAMES.preprocess_assemble,
488
+ ACTION_NAMES.cpp_header_parsing,
489
+ ACTION_NAMES.cpp_module_compile,
490
+ ACTION_NAMES.cpp_module_codegen,
491
+ ACTION_NAMES.clif_match,
492
+ ACTION_NAMES.cpp_link_executable,
493
+ ACTION_NAMES.cpp_link_dynamic_library,
494
+ ACTION_NAMES.cpp_link_nodeps_dynamic_library,
495
+ ],
496
+ flag_groups = [
497
+ flag_group(
498
+ flags = ["--sysroot=%{sysroot}"],
499
+ expand_if_available = "sysroot",
500
+ ),
501
+ ],
502
+ ),
503
+ # Compile + Link
504
+ flag_set(
505
+ actions = [
506
+ ACTION_NAMES.c_compile,
507
+ ACTION_NAMES.cpp_compile,
508
+ ACTION_NAMES.linkstamp_compile,
509
+ ACTION_NAMES.assemble,
510
+ ACTION_NAMES.preprocess_assemble,
511
+ ACTION_NAMES.cpp_header_parsing,
512
+ ACTION_NAMES.cpp_module_compile,
513
+ ACTION_NAMES.cpp_module_codegen,
514
+ ACTION_NAMES.clif_match,
515
+ ACTION_NAMES.cpp_link_executable,
516
+ ACTION_NAMES.cpp_link_dynamic_library,
517
+ ACTION_NAMES.cpp_link_nodeps_dynamic_library,
518
+ ],
519
+ # This forces color diagnostics even on Forge (where we don't have an
520
+ # attached terminal).
521
+ flags = [
522
+ "-fdiagnostics-color",
523
+ ],
524
+ ),
525
+ # C++ compiles (and implicitly link)
526
+ flag_set(
527
+ actions = all_cpp_compile_actions,
528
+ flags = [
529
+ "-fno-exceptions",
530
+ ],
531
+ not_features = ["exceptions", "wasm_exceptions"],
532
+ ),
533
+ flag_set(
534
+ actions = all_cpp_compile_actions,
535
+ flags = [
536
+ "-fexceptions",
537
+ ],
538
+ features = ["exceptions"],
539
+ ),
540
+ flag_set(
541
+ actions = all_cpp_compile_actions +
542
+ all_link_actions,
543
+ flags = [
544
+ "-fwasm-exceptions",
545
+ ],
546
+ features = ["wasm_exceptions"],
547
+ ),
548
+ # All compiles (and implicitly link)
549
+ flag_set(
550
+ actions = all_compile_actions +
551
+ all_link_actions,
552
+ flags = [
553
+ "-fno-strict-aliasing",
554
+ "-funsigned-char",
555
+ "-no-canonical-prefixes",
556
+ ],
557
+ ),
558
+ # Language Features
559
+ flag_set(
560
+ actions = all_cpp_compile_actions,
561
+ flags = ["-std=gnu++17", "-nostdinc", "-nostdinc++"],
562
+ ),
563
+
564
+ # Emscripten-specific settings:
565
+ flag_set(
566
+ actions = all_compile_actions + all_link_actions,
567
+ flags = ["-s", "WASM=0"],
568
+ features = ["crosstool_cpu_asmjs"],
569
+ ),
570
+ flag_set(
571
+ actions = all_compile_actions +
572
+ all_link_actions,
573
+ flags = ["-s", "USE_PTHREADS=1"],
574
+ features = ["use_pthreads"],
575
+ ),
576
+ flag_set(
577
+ actions = all_link_actions,
578
+ flags = ["-s", "EXIT_RUNTIME=1"],
579
+ features = ["exit_runtime"],
580
+ ),
581
+ flag_set(
582
+ actions = all_compile_actions + all_link_actions,
583
+ flags = ["-pthread"],
584
+ features = ["llvm_backend", "use_pthreads"],
585
+ ),
586
+ flag_set(
587
+ actions = all_compile_actions + all_link_actions,
588
+ flags = ["-msimd128"],
589
+ features = ["wasm_simd"],
590
+ ),
591
+ flag_set(
592
+ actions = all_compile_actions + all_link_actions,
593
+ flags = ["-msimd128", "-mrelaxed-simd"],
594
+ features = ["wasm_relaxed_simd"],
595
+ ),
596
+ flag_set(
597
+ actions = all_link_actions,
598
+ flags = ["-s", "PRINTF_LONG_DOUBLE=1"],
599
+ features = ["precise_long_double_printf"],
600
+ ),
601
+ flag_set(
602
+ actions = all_link_actions,
603
+ flags = ["--oformat=js"],
604
+ features = ["output_format_js"],
605
+ ),
606
+
607
+ # Opt
608
+ flag_set(
609
+ actions = preprocessor_compile_actions,
610
+ flags = ["-DNDEBUG"],
611
+ features = ["opt"],
612
+ ),
613
+ flag_set(
614
+ actions = all_compile_actions,
615
+ flags = ["-fomit-frame-pointer"],
616
+ features = ["opt"],
617
+ ),
618
+ flag_set(
619
+ actions = all_compile_actions +
620
+ all_link_actions,
621
+ flags = ["-O2"],
622
+ features = ["opt"],
623
+ ),
624
+
625
+ # Users can override opt-level with semantic names...
626
+ flag_set(
627
+ actions = all_compile_actions +
628
+ all_link_actions,
629
+ flags = ["-Oz"],
630
+ features = ["optimized_for_size", "opt"],
631
+ ),
632
+ flag_set(
633
+ actions = all_compile_actions +
634
+ all_link_actions,
635
+ flags = ["-O3"],
636
+ features = ["optimized_for_speed", "opt"],
637
+ ),
638
+
639
+ # Fastbuild
640
+ flag_set(
641
+ actions = all_compile_actions,
642
+ flags = ["-fomit-frame-pointer"],
643
+ features = ["fastbuild"],
644
+ ),
645
+ flag_set(
646
+ actions = all_compile_actions +
647
+ all_link_actions,
648
+ flags = ["-O0"],
649
+ features = ["fastbuild"],
650
+ ),
651
+
652
+ # Dbg
653
+ flag_set(
654
+ actions = all_compile_actions,
655
+ flags = ["-fno-omit-frame-pointer"],
656
+ features = ["dbg"],
657
+ ),
658
+ flag_set(
659
+ actions = all_compile_actions +
660
+ all_link_actions,
661
+ flags = ["-g", "-O0"],
662
+ features = ["dbg"],
663
+ ),
664
+ flag_set(
665
+ actions = all_compile_actions +
666
+ all_link_actions,
667
+ flags = [
668
+ "-g",
669
+ "-fsanitize=address",
670
+ "-O1",
671
+ "-DADDRESS_SANITIZER=1",
672
+ "-fno-omit-frame-pointer",
673
+ ],
674
+ features = ["wasm_asan"],
675
+ ),
676
+ flag_set(
677
+ actions = all_compile_actions +
678
+ all_link_actions,
679
+ flags = [
680
+ "-g3",
681
+ "-fsanitize=undefined",
682
+ "-O1",
683
+ "-DUNDEFINED_BEHAVIOR_SANITIZER=1",
684
+ "-fno-omit-frame-pointer",
685
+ "-fno-sanitize=vptr",
686
+ ],
687
+ features = ["wasm_ubsan"],
688
+ ),
689
+
690
+ # Profiling provides full debug info and a special --profiling flag
691
+ # to control name mangling
692
+ flag_set(
693
+ actions = all_link_actions,
694
+ flags = ["--profiling"],
695
+ features = ["profiling"],
696
+ ),
697
+ flag_set(
698
+ actions = all_link_actions,
699
+ flags = ["--profiling_funcs"],
700
+ features = ["profiling_funcs"],
701
+ ),
702
+ flag_set(
703
+ actions = all_compile_actions +
704
+ all_link_actions,
705
+ flags = ["-g3"],
706
+ features = ["full_debug_info"],
707
+ ),
708
+ flag_set(
709
+ actions = all_link_actions,
710
+ flags = ["-gseparate-dwarf"],
711
+ features = ["dwarf_debug_info"],
712
+ ),
713
+ flag_set(
714
+ actions = all_compile_actions +
715
+ all_link_actions,
716
+ flags = ["-fdebug-compilation-dir=."],
717
+ features = ["dwarf_debug_info"],
718
+ ),
719
+ # Generic warning flag list
720
+ flag_set(
721
+ actions = all_compile_actions,
722
+ flags = CROSSTOOL_DEFAULT_WARNINGS,
723
+ ),
724
+
725
+ # Defines and Includes and Paths and such
726
+ flag_set(
727
+ actions = all_compile_actions,
728
+ flag_groups = [
729
+ flag_group(flags = ["-fPIC"], expand_if_available = "pic"),
730
+ ],
731
+ ),
732
+ flag_set(
733
+ actions = preprocessor_compile_actions,
734
+ flag_groups = [
735
+ flag_group(
736
+ flags = ["-D%{preprocessor_defines}"],
737
+ iterate_over = "preprocessor_defines",
738
+ ),
739
+ ],
740
+ ),
741
+ flag_set(
742
+ actions = preprocessor_compile_actions,
743
+ flag_groups = [
744
+ flag_group(
745
+ flags = ["-include", "%{includes}"],
746
+ iterate_over = "includes",
747
+ expand_if_available = "includes",
748
+ ),
749
+ ],
750
+ ),
751
+ flag_set(
752
+ actions = preprocessor_compile_actions,
753
+ flag_groups = [
754
+ flag_group(
755
+ flags = ["-iquote", "%{quote_include_paths}"],
756
+ iterate_over = "quote_include_paths",
757
+ ),
758
+ flag_group(
759
+ flags = ["-I%{include_paths}"],
760
+ iterate_over = "include_paths",
761
+ ),
762
+ flag_group(
763
+ flags = ["-isystem", "%{system_include_paths}"],
764
+ iterate_over = "system_include_paths",
765
+ ),
766
+ ],
767
+ ),
768
+
769
+ ## Linking options (not libs -- those go last)
770
+
771
+ # Generic link options
772
+ flag_set(
773
+ actions = [
774
+ ACTION_NAMES.cpp_link_dynamic_library,
775
+ ACTION_NAMES.cpp_link_nodeps_dynamic_library,
776
+ ],
777
+ flags = ["-shared"],
778
+ ),
779
+
780
+ # Linker search paths and objects:
781
+ flag_set(
782
+ actions = all_link_actions,
783
+ flag_groups = [
784
+ flag_group(
785
+ iterate_over = "runtime_library_search_directories",
786
+ flag_groups = [
787
+ flag_group(
788
+ flags = [
789
+ "-Wl,-rpath,$EXEC_ORIGIN/%{runtime_library_search_directories}",
790
+ ],
791
+ expand_if_true = "is_cc_test",
792
+ ),
793
+ flag_group(
794
+ flags = [
795
+ "-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}",
796
+ ],
797
+ expand_if_false = "is_cc_test",
798
+ ),
799
+ ],
800
+ expand_if_available = "runtime_library_search_directories",
801
+ ),
802
+ ],
803
+ ),
804
+ flag_set(
805
+ actions = all_link_actions,
806
+ flag_groups = [
807
+ flag_group(
808
+ flags = ["-L%{library_search_directories}"],
809
+ iterate_over = "library_search_directories",
810
+ expand_if_available = "library_search_directories",
811
+ ),
812
+ ],
813
+ ),
814
+ flag_set(
815
+ actions = all_link_actions,
816
+ flag_groups = [
817
+ flag_group(
818
+ # This is actually a list of object files from the linkstamp steps
819
+ flags = ["%{linkstamp_paths}"],
820
+ iterate_over = "linkstamp_paths",
821
+ expand_if_available = "linkstamp_paths",
822
+ ),
823
+ ],
824
+ ),
825
+ flag_set(
826
+ actions = all_link_actions,
827
+ flag_groups = [
828
+ flag_group(
829
+ flags = ["@%{thinlto_param_file}"],
830
+ expand_if_available = "libraries_to_link",
831
+ expand_if_true = "thinlto_param_file",
832
+ ),
833
+ flag_group(
834
+ iterate_over = "libraries_to_link",
835
+ flag_groups = [
836
+ flag_group(
837
+ flags = ["-Wl,--start-lib"],
838
+ expand_if_equal = variable_with_value(
839
+ name = "libraries_to_link.type",
840
+ value = "object_file_group",
841
+ ),
842
+ ),
843
+ flag_group(
844
+ flags = ["-Wl,-whole-archive"],
845
+ expand_if_true = "libraries_to_link.is_whole_archive",
846
+ ),
847
+ flag_group(
848
+ flags = ["%{libraries_to_link.object_files}"],
849
+ iterate_over = "libraries_to_link.object_files",
850
+ expand_if_equal = variable_with_value(
851
+ name = "libraries_to_link.type",
852
+ value = "object_file_group",
853
+ ),
854
+ ),
855
+ flag_group(
856
+ flags = ["%{libraries_to_link.name}"],
857
+ expand_if_equal = variable_with_value(
858
+ name = "libraries_to_link.type",
859
+ value = "object_file",
860
+ ),
861
+ ),
862
+ flag_group(
863
+ flags = ["%{libraries_to_link.name}"],
864
+ expand_if_equal = variable_with_value(
865
+ name = "libraries_to_link.type",
866
+ value = "interface_library",
867
+ ),
868
+ ),
869
+ flag_group(
870
+ flags = ["%{libraries_to_link.name}"],
871
+ expand_if_equal = variable_with_value(
872
+ name = "libraries_to_link.type",
873
+ value = "static_library",
874
+ ),
875
+ ),
876
+ flag_group(
877
+ flags = ["-l%{libraries_to_link.name}"],
878
+ expand_if_equal = variable_with_value(
879
+ name = "libraries_to_link.type",
880
+ value = "dynamic_library",
881
+ ),
882
+ ),
883
+ flag_group(
884
+ flags = ["-l:%{libraries_to_link.name}"],
885
+ expand_if_equal = variable_with_value(
886
+ name = "libraries_to_link.type",
887
+ value = "versioned_dynamic_library",
888
+ ),
889
+ ),
890
+ flag_group(
891
+ flags = ["-Wl,-no-whole-archive"],
892
+ expand_if_true = "libraries_to_link.is_whole_archive",
893
+ ),
894
+ flag_group(
895
+ flags = ["-Wl,--end-lib"],
896
+ expand_if_equal = variable_with_value(
897
+ name = "libraries_to_link.type",
898
+ value = "object_file_group",
899
+ ),
900
+ ),
901
+ ],
902
+ expand_if_available = "libraries_to_link",
903
+ ),
904
+ ],
905
+ ),
906
+
907
+ # Configure the header parsing and preprocessing.
908
+ flag_set(
909
+ actions = [ACTION_NAMES.cpp_header_parsing],
910
+ flags = ["-xc++-header", "-fsyntax-only"],
911
+ features = ["parse_headers"],
912
+ ),
913
+
914
+ # Note: user compile flags should be nearly last -- you probably
915
+ # don't want to put any more features after this!
916
+ flag_set(
917
+ actions = [
918
+ ACTION_NAMES.c_compile,
919
+ ACTION_NAMES.cpp_compile,
920
+ ACTION_NAMES.linkstamp_compile,
921
+ ACTION_NAMES.assemble,
922
+ ACTION_NAMES.preprocess_assemble,
923
+ ACTION_NAMES.cpp_header_parsing,
924
+ ACTION_NAMES.cpp_module_compile,
925
+ ACTION_NAMES.cpp_module_codegen,
926
+ ACTION_NAMES.clif_match,
927
+ ],
928
+ flag_groups = [
929
+ flag_group(
930
+ flags = ["%{user_compile_flags}"],
931
+ iterate_over = "user_compile_flags",
932
+ expand_if_available = "user_compile_flags",
933
+ ),
934
+ ],
935
+ ),
936
+ flag_set(
937
+ actions = all_link_actions,
938
+ flag_groups = [
939
+ flag_group(
940
+ flags = ["%{user_link_flags}"],
941
+ iterate_over = "user_link_flags",
942
+ expand_if_available = "user_link_flags",
943
+ ),
944
+ ],
945
+ ),
946
+ ## Options which need to go late -- after all the user options -- go here.
947
+ flag_set(
948
+ # One might hope that these options would only be needed for C++
949
+ # compiles. But, sadly, users compile ".c" files with custom
950
+ # copts=["-x", "c++"], and expect that to be able to find C++ stdlib
951
+ # headers. It might be worth pondering how blaze could support this sort
952
+ # of use-case better.
953
+ actions = preprocessor_compile_actions +
954
+ [ACTION_NAMES.cc_flags_make_variable],
955
+ flags = [
956
+ "-iwithsysroot" + "/include/c++/v1",
957
+ "-iwithsysroot" + "/include/compat",
958
+ "-iwithsysroot" + "/include",
959
+ "-isystem",
960
+ emscripten_dir + "/lib/clang/23/include",
961
+ ],
962
+ ),
963
+ # Inputs and outputs
964
+ flag_set(
965
+ actions = [
966
+ ACTION_NAMES.c_compile,
967
+ ACTION_NAMES.cpp_compile,
968
+ ACTION_NAMES.linkstamp_compile,
969
+ ACTION_NAMES.assemble,
970
+ ACTION_NAMES.preprocess_assemble,
971
+ ACTION_NAMES.cpp_header_parsing,
972
+ ACTION_NAMES.cpp_module_compile,
973
+ ACTION_NAMES.cpp_module_codegen,
974
+ ACTION_NAMES.clif_match,
975
+ ],
976
+ flag_groups = [
977
+ flag_group(
978
+ flags = ["-MD", "-MF", "%{dependency_file}"],
979
+ expand_if_available = "dependency_file",
980
+ ),
981
+ ],
982
+ ),
983
+ flag_set(
984
+ actions = [
985
+ ACTION_NAMES.c_compile,
986
+ ACTION_NAMES.cpp_compile,
987
+ ACTION_NAMES.linkstamp_compile,
988
+ ACTION_NAMES.assemble,
989
+ ACTION_NAMES.preprocess_assemble,
990
+ ACTION_NAMES.cpp_header_parsing,
991
+ ACTION_NAMES.cpp_module_compile,
992
+ ACTION_NAMES.cpp_module_codegen,
993
+ ACTION_NAMES.clif_match,
994
+ ],
995
+ flag_groups = [
996
+ flag_group(
997
+ flags = ["-c", "%{source_file}"],
998
+ expand_if_available = "source_file",
999
+ ),
1000
+ ],
1001
+ ),
1002
+ flag_set(
1003
+ actions = [
1004
+ ACTION_NAMES.c_compile,
1005
+ ACTION_NAMES.cpp_compile,
1006
+ ACTION_NAMES.linkstamp_compile,
1007
+ ACTION_NAMES.assemble,
1008
+ ACTION_NAMES.preprocess_assemble,
1009
+ ACTION_NAMES.cpp_header_parsing,
1010
+ ACTION_NAMES.cpp_module_compile,
1011
+ ACTION_NAMES.cpp_module_codegen,
1012
+ ACTION_NAMES.clif_match,
1013
+ ],
1014
+ flag_groups = [
1015
+ flag_group(
1016
+ flags = ["-S"],
1017
+ expand_if_available = "output_assembly_file",
1018
+ ),
1019
+ flag_group(
1020
+ flags = ["-E"],
1021
+ expand_if_available = "output_preprocess_file",
1022
+ ),
1023
+ flag_group(
1024
+ flags = ["-o", "%{output_file}"],
1025
+ expand_if_available = "output_file",
1026
+ ),
1027
+ ],
1028
+ ),
1029
+ flag_set(
1030
+ actions = all_link_actions,
1031
+ flag_groups = [
1032
+ flag_group(
1033
+ flags = ["-o", "%{output_execpath}"],
1034
+ expand_if_available = "output_execpath",
1035
+ ),
1036
+ ],
1037
+ ),
1038
+ # And finally, the params file!
1039
+ flag_set(
1040
+ actions = all_link_actions,
1041
+ flag_groups = [
1042
+ flag_group(
1043
+ flags = ["@%{linker_param_file}"],
1044
+ expand_if_available = "linker_param_file",
1045
+ ),
1046
+ ],
1047
+ ),
1048
+ flag_set(
1049
+ actions = all_compile_actions,
1050
+ flags = [
1051
+ "-Wno-builtin-macro-redefined",
1052
+ # Genrules may not escape quotes enough for these, so
1053
+ # don't put them into $(CC_FLAGS):
1054
+ '-D__DATE__="redacted"',
1055
+ '-D__TIMESTAMP__="redacted"',
1056
+ '-D__TIME__="redacted"',
1057
+ ],
1058
+ ),
1059
+ flag_set(
1060
+ actions = all_compile_actions,
1061
+ flags = ["-Werror"],
1062
+ features = ["wasm_warnings_as_errors"],
1063
+ ),
1064
+ flag_set(
1065
+ actions = all_link_actions,
1066
+ flags = ["-sSTANDALONE_WASM"],
1067
+ features = ["wasm_standalone"],
1068
+ ),
1069
+ ]
1070
+
1071
+ crosstool_default_env_sets = [
1072
+ # Globals
1073
+ env_set(
1074
+ actions = all_compile_actions +
1075
+ all_link_actions +
1076
+ [ACTION_NAMES.cpp_link_static_library],
1077
+ env_entries = [
1078
+ env_entry(
1079
+ key = "EM_BIN_PATH",
1080
+ value = emscripten_dir,
1081
+ ),
1082
+ env_entry(
1083
+ key = "EM_CONFIG_PATH",
1084
+ value = ctx.file.em_config.path,
1085
+ ),
1086
+ env_entry(
1087
+ key = "NODE_JS_PATH",
1088
+ value = nodejs_path,
1089
+ ),
1090
+ env_entry(
1091
+ key = "BAZEL_PYTHON_RELPATH",
1092
+ value = python_exec_runtime.interpreter.path,
1093
+ ),
1094
+ ],
1095
+ ),
1096
+ # Use llvm backend. Off by default, enabled via --features=llvm_backend
1097
+ env_set(
1098
+ actions = all_compile_actions +
1099
+ all_link_actions +
1100
+ [ACTION_NAMES.cpp_link_static_library],
1101
+ env_entries = [env_entry(key = "EMCC_WASM_BACKEND", value = "1")],
1102
+ with_features = [with_feature_set(features = ["llvm_backend"])],
1103
+ ),
1104
+ # Debug compile and link. Off by default, enabled via --features=emcc_debug
1105
+ env_set(
1106
+ actions = all_compile_actions,
1107
+ env_entries = [env_entry(key = "EMCC_DEBUG", value = "1")],
1108
+ with_features = [with_feature_set(features = ["emcc_debug"])],
1109
+ ),
1110
+
1111
+ # Debug only link step. Off by default, enabled via --features=emcc_debug_link
1112
+ env_set(
1113
+ actions = all_link_actions,
1114
+ env_entries = [env_entry(key = "EMCC_DEBUG", value = "1")],
1115
+ with_features = [
1116
+ with_feature_set(features = ["emcc_debug"]),
1117
+ with_feature_set(features = ["emcc_debug_link"]),
1118
+ ],
1119
+ ),
1120
+ ]
1121
+
1122
+ crosstool_default_flags_feature = feature(
1123
+ name = "crosstool_default_flags",
1124
+ enabled = True,
1125
+ flag_sets = crosstool_default_flag_sets,
1126
+ env_sets = crosstool_default_env_sets,
1127
+ )
1128
+
1129
+ features.append(crosstool_default_flags_feature)
1130
+
1131
+ cxx_builtin_include_directories = [
1132
+ emscripten_dir + "/emscripten/cache/sysroot/include/c++/v1",
1133
+ emscripten_dir + "/emscripten/cache/sysroot/include/compat",
1134
+ emscripten_dir + "/emscripten/cache/sysroot/include",
1135
+ emscripten_dir + "/lib/clang/21/include",
1136
+ ]
1137
+
1138
+ artifact_name_patterns = []
1139
+
1140
+ make_variables = []
1141
+
1142
+ return cc_common.create_cc_toolchain_config_info(
1143
+ ctx = ctx,
1144
+ features = features,
1145
+ action_configs = action_configs,
1146
+ artifact_name_patterns = artifact_name_patterns,
1147
+ cxx_builtin_include_directories = cxx_builtin_include_directories,
1148
+ toolchain_identifier = toolchain_identifier,
1149
+ host_system_name = host_system_name,
1150
+ target_system_name = target_system_name,
1151
+ target_cpu = target_cpu,
1152
+ target_libc = target_libc,
1153
+ compiler = compiler,
1154
+ abi_version = abi_version,
1155
+ abi_libc_version = abi_libc_version,
1156
+ tool_paths = tool_paths,
1157
+ make_variables = make_variables,
1158
+ builtin_sysroot = builtin_sysroot,
1159
+ cc_target_os = cc_target_os,
1160
+ )
1161
+
1162
+ emscripten_cc_toolchain_config_rule = rule(
1163
+ implementation = _impl,
1164
+ attrs = {
1165
+ "cpu": attr.string(mandatory = True, values = ["asmjs", "wasm"]),
1166
+ "em_config": attr.label(mandatory = True, allow_single_file = True),
1167
+ "emscripten_binaries": attr.label(mandatory = True, cfg = "exec"),
1168
+ "_exec_platform_info": attr.label(
1169
+ providers = [PlatformInfo],
1170
+ default = Label(":platform_info"),
1171
+ cfg = "exec",
1172
+ ),
1173
+ },
1174
+ provides = [CcToolchainConfigInfo],
1175
+ toolchains = [
1176
+ "@rules_python//python:exec_tools_toolchain_type",
1177
+ "@rules_nodejs//nodejs:toolchain_type",
1178
+ ]
1179
+ )
1180
+
1181
+ def _python_interpreter_files_impl(ctx):
1182
+ python_exec_runtime = (
1183
+ ctx.toolchains["@rules_python//python:exec_tools_toolchain_type"].
1184
+ exec_tools.exec_interpreter[platform_common.ToolchainInfo].py3_runtime
1185
+ )
1186
+
1187
+ return DefaultInfo(files = python_exec_runtime.files)
1188
+
1189
+ emscripten_python_interpreter_files = rule(
1190
+ implementation = _python_interpreter_files_impl,
1191
+ toolchains = [
1192
+ "@rules_python//python:exec_tools_toolchain_type",
1193
+ ]
1194
+ )
bazel/emscripten_toolchain/wasm_binary.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Unpackages a bazel emscripten archive for use in a bazel BUILD rule.
2
+
3
+ This script will take a tar archive containing the output of the emscripten
4
+ toolchain. This file contains any output files produced by a wasm_cc_binary or a
5
+ cc_binary built with --config=wasm. The files are extracted into the given
6
+ output paths.
7
+
8
+ The contents of the archive are expected to match the given outputs extnames.
9
+
10
+ This script and its accompanying Bazel rule should allow you to extract a
11
+ WebAssembly binary into a larger web application.
12
+ """
13
+
14
+ import argparse
15
+ import os
16
+ import tarfile
17
+
18
+
19
+ def ensure(f):
20
+ if not os.path.exists(f):
21
+ with open(f, 'w'):
22
+ pass
23
+
24
+
25
+ def main():
26
+ parser = argparse.ArgumentParser()
27
+ parser.add_argument('--archive', help='The archive to extract from.')
28
+ parser.add_argument('--outputs', help='Comma separated list of files that should be extracted from the archive. Only the extname has to match a file in the archive.')
29
+ parser.add_argument('--allow_empty_outputs', help='If an output listed in --outputs does not exist, create it anyways.', action='store_true')
30
+ args = parser.parse_args()
31
+
32
+ args.archive = os.path.normpath(args.archive)
33
+ args.outputs = args.outputs.split(",")
34
+
35
+ tar = tarfile.open(args.archive)
36
+
37
+ for member in tar.getmembers():
38
+ extname = '.' + member.name.split('.', 1)[1]
39
+ for idx, output in enumerate(args.outputs):
40
+ if output.endswith(extname):
41
+ member_file = tar.extractfile(member)
42
+ with open(output, "wb") as output_file:
43
+ output_file.write(member_file.read())
44
+ args.outputs.pop(idx)
45
+ break
46
+
47
+ for output in args.outputs:
48
+ extname = '.' + output.split('.', 1)[1]
49
+ if args.allow_empty_outputs:
50
+ ensure(output)
51
+ else:
52
+ print("[ERROR] Archive does not contain file with extname: %s" % extname)
53
+
54
+
55
+ if __name__ == '__main__':
56
+ main()
bazel/emscripten_toolchain/wasm_cc_binary.bzl ADDED
@@ -0,0 +1,221 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """wasm_cc_binary rule for compiling C++ targets to WebAssembly.
2
+ """
3
+
4
+ def _wasm_transition_impl(settings, attr):
5
+ _ignore = (settings, attr)
6
+
7
+ features = list(settings["//command_line_option:features"])
8
+ linkopts = list(settings["//command_line_option:linkopt"])
9
+
10
+ if attr.threads == "emscripten":
11
+ # threads enabled
12
+ features.append("use_pthreads")
13
+ elif attr.threads == "off":
14
+ # threads disabled
15
+ features.append("-use_pthreads")
16
+
17
+ if attr.exit_runtime == True:
18
+ features.append("exit_runtime")
19
+
20
+ if attr.backend == "llvm":
21
+ features.append("llvm_backend")
22
+ elif attr.backend == "emscripten":
23
+ features.append("-llvm_backend")
24
+
25
+ if attr.simd:
26
+ features.append("wasm_simd")
27
+
28
+ platform = "@emsdk//:platform_wasm"
29
+ if attr.standalone:
30
+ platform = "@emsdk//:platform_wasi"
31
+ features.append("wasm_standalone")
32
+
33
+ return {
34
+ "//command_line_option:compiler": "emscripten",
35
+ "//command_line_option:cpu": "wasm",
36
+ "//command_line_option:features": features,
37
+ "//command_line_option:dynamic_mode": "off",
38
+ "//command_line_option:linkopt": linkopts,
39
+ "//command_line_option:platforms": [platform],
40
+ # This is hardcoded to an empty cc_library because the malloc library
41
+ # is implicitly added by the emscripten toolchain
42
+ "//command_line_option:custom_malloc": "@emsdk//emscripten_toolchain:malloc",
43
+ }
44
+
45
+ _wasm_transition = transition(
46
+ implementation = _wasm_transition_impl,
47
+ inputs = [
48
+ "//command_line_option:features",
49
+ "//command_line_option:linkopt",
50
+ ],
51
+ outputs = [
52
+ "//command_line_option:compiler",
53
+ "//command_line_option:cpu",
54
+ "//command_line_option:features",
55
+ "//command_line_option:dynamic_mode",
56
+ "//command_line_option:linkopt",
57
+ "//command_line_option:platforms",
58
+ "//command_line_option:custom_malloc",
59
+ ],
60
+ )
61
+
62
+ _ALLOW_OUTPUT_EXTNAMES = [
63
+ ".js",
64
+ ".wasm",
65
+ ".wasm.map",
66
+ ".data",
67
+ ".js.symbols",
68
+ ".wasm.debug.wasm",
69
+ ".html",
70
+ ".ts",
71
+ ".d.ts",
72
+ ]
73
+
74
+ _WASM_BINARY_COMMON_ATTRS = {
75
+ "backend": attr.string(
76
+ default = "_default",
77
+ values = ["_default", "emscripten", "llvm"],
78
+ ),
79
+ "cc_target": attr.label(
80
+ cfg = _wasm_transition,
81
+ mandatory = True,
82
+ ),
83
+ "exit_runtime": attr.bool(
84
+ default = False,
85
+ ),
86
+ "threads": attr.string(
87
+ default = "_default",
88
+ values = ["_default", "emscripten", "off"],
89
+ ),
90
+ "simd": attr.bool(
91
+ default = False,
92
+ ),
93
+ "standalone": attr.bool(
94
+ default = False,
95
+ ),
96
+ "_allowlist_function_transition": attr.label(
97
+ default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
98
+ ),
99
+ "_wasm_binary_extractor": attr.label(
100
+ executable = True,
101
+ allow_files = True,
102
+ cfg = "exec",
103
+ default = Label("@emsdk//emscripten_toolchain:wasm_binary"),
104
+ ),
105
+ }
106
+
107
+ def _wasm_cc_binary_impl(ctx):
108
+ args = ctx.actions.args()
109
+ cc_target = ctx.attr.cc_target[0]
110
+
111
+ for output in ctx.outputs.outputs:
112
+ valid_extname = False
113
+ for allowed_extname in _ALLOW_OUTPUT_EXTNAMES:
114
+ if output.path.endswith(allowed_extname):
115
+ valid_extname = True
116
+ break
117
+ if not valid_extname:
118
+ fail("Invalid output '{}'. Allowed extnames: {}".format(output.basename, ", ".join(_ALLOW_OUTPUT_EXTNAMES)))
119
+
120
+ args.add_all("--archive", ctx.files.cc_target)
121
+ args.add_joined("--outputs", ctx.outputs.outputs, join_with = ",")
122
+
123
+ ctx.actions.run(
124
+ inputs = ctx.files.cc_target,
125
+ outputs = ctx.outputs.outputs,
126
+ arguments = [args],
127
+ executable = ctx.executable._wasm_binary_extractor,
128
+ )
129
+
130
+ return [
131
+ DefaultInfo(
132
+ files = depset(ctx.outputs.outputs),
133
+ # This is needed since rules like web_test usually have a data
134
+ # dependency on this target.
135
+ data_runfiles = ctx.runfiles(transitive_files = depset(ctx.outputs.outputs)),
136
+ ),
137
+ OutputGroupInfo(_wasm_tar = cc_target.files),
138
+ ]
139
+
140
+ def _wasm_cc_binary_legacy_impl(ctx):
141
+ cc_target = ctx.attr.cc_target[0]
142
+ outputs = [
143
+ ctx.outputs.loader,
144
+ ctx.outputs.wasm,
145
+ ctx.outputs.map,
146
+ ctx.outputs.data,
147
+ ctx.outputs.symbols,
148
+ ctx.outputs.dwarf,
149
+ ctx.outputs.html,
150
+ ]
151
+
152
+ args = ctx.actions.args()
153
+ args.add("--allow_empty_outputs")
154
+ args.add_all("--archive", ctx.files.cc_target)
155
+ args.add_joined("--outputs", outputs, join_with = ",")
156
+
157
+ ctx.actions.run(
158
+ inputs = ctx.files.cc_target,
159
+ outputs = outputs,
160
+ arguments = [args],
161
+ executable = ctx.executable._wasm_binary_extractor,
162
+ )
163
+
164
+ return [
165
+ DefaultInfo(
166
+ executable = ctx.outputs.wasm,
167
+ files = depset(outputs),
168
+ # This is needed since rules like web_test usually have a data
169
+ # dependency on this target.
170
+ data_runfiles = ctx.runfiles(transitive_files = depset(outputs)),
171
+ ),
172
+ OutputGroupInfo(_wasm_tar = cc_target.files),
173
+ ]
174
+
175
+ _wasm_cc_binary = rule(
176
+ implementation = _wasm_cc_binary_impl,
177
+ attrs = dict(
178
+ _WASM_BINARY_COMMON_ATTRS,
179
+ outputs = attr.output_list(
180
+ allow_empty = False,
181
+ mandatory = True,
182
+ ),
183
+ ),
184
+ )
185
+
186
+ def _wasm_binary_legacy_outputs(name, cc_target):
187
+ basename = cc_target.name
188
+ basename = basename.split(".")[0]
189
+ outputs = {
190
+ "loader": "{}/{}.js".format(name, basename),
191
+ "wasm": "{}/{}.wasm".format(name, basename),
192
+ "map": "{}/{}.wasm.map".format(name, basename),
193
+ "data": "{}/{}.data".format(name, basename),
194
+ "symbols": "{}/{}.js.symbols".format(name, basename),
195
+ "dwarf": "{}/{}.wasm.debug.wasm".format(name, basename),
196
+ "html": "{}/{}.html".format(name, basename),
197
+ }
198
+
199
+ return outputs
200
+
201
+ _wasm_cc_binary_legacy = rule(
202
+ implementation = _wasm_cc_binary_legacy_impl,
203
+ attrs = _WASM_BINARY_COMMON_ATTRS,
204
+ outputs = _wasm_binary_legacy_outputs,
205
+ )
206
+
207
+ # Wraps a C++ Blaze target, extracting the appropriate files.
208
+ #
209
+ # This rule will transition to the emscripten toolchain in order
210
+ # to build the the cc_target as a WebAssembly binary.
211
+ #
212
+ # Args:
213
+ # name: The name of the rule.
214
+ # cc_target: The cc_binary or cc_library to extract files from.
215
+ def wasm_cc_binary(outputs = None, **kwargs):
216
+ # for backwards compatibility if no outputs are set the deprecated
217
+ # implementation is used.
218
+ if not outputs:
219
+ _wasm_cc_binary_legacy(**kwargs)
220
+ else:
221
+ _wasm_cc_binary(outputs = outputs, **kwargs)
bazel/emscripten_toolchain/wasm_rules.bzl ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ """Rules related to C++ and WebAssembly.
2
+ """
3
+
4
+ load(":wasm_cc_binary.bzl", _wasm_cc_binary = "wasm_cc_binary")
5
+
6
+ wasm_cc_binary = _wasm_cc_binary
bazel/hello-world/BUILD ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ load("@rules_cc//cc:defs.bzl", "cc_binary")
2
+ load("//emscripten_toolchain:wasm_rules.bzl", "wasm_cc_binary")
3
+
4
+ cc_binary(
5
+ name = "hello-world",
6
+ srcs = ["hello-world.cc"],
7
+ )
8
+
9
+ cc_binary(
10
+ name = "hello-world-simd",
11
+ srcs = ["hello-world-simd.cc"],
12
+ )
13
+
14
+ wasm_cc_binary(
15
+ name = "hello-world-wasm",
16
+ cc_target = ":hello-world",
17
+ )
18
+
19
+ wasm_cc_binary(
20
+ name = "hello-world-wasm-simd",
21
+ cc_target = ":hello-world-simd",
22
+ simd = True,
23
+ )
bazel/hello-world/hello-world-simd.cc ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <wasm_simd128.h>
2
+
3
+ void multiply_arrays(int* out, int* in_a, int* in_b, int size) {
4
+ for (int i = 0; i < size; i += 4) {
5
+ v128_t a = wasm_v128_load(&in_a[i]);
6
+ v128_t b = wasm_v128_load(&in_b[i]);
7
+ v128_t prod = wasm_i32x4_mul(a, b);
8
+ wasm_v128_store(&out[i], prod);
9
+ }
10
+ }
bazel/hello-world/hello-world.cc ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ #include <iostream>
2
+
3
+ int main(int argc, char** argv) {
4
+ std::cout << "hello world!" << std::endl;
5
+ return 0;
6
+ }
bazel/remote_emscripten_repository.bzl ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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_toolchain:toolchain.bzl", "emscripten_cc_toolchain_config_rule", "emscripten_python_interpreter_files")
4
+ load(":emscripten_build_file.bzl", "EMSCRIPTEN_BUILD_FILE_CONTENT_TEMPLATE")
5
+
6
+ def remote_emscripten_repository(
7
+ name,
8
+ bin_extension,
9
+ **kwargs):
10
+ """Imports an Emscripten from an http archive
11
+
12
+ Args:
13
+ name: A unique name for this Emscripten repository.
14
+ bin_extension: Extension for the binaries in this Emscripten repository
15
+ **kwargs: Args for http_archive. Refer to http_archive documentation for more info.
16
+ """
17
+ http_archive(
18
+ name = name,
19
+ build_file_content = EMSCRIPTEN_BUILD_FILE_CONTENT_TEMPLATE.format(bin_extension = bin_extension),
20
+ **kwargs
21
+ )
22
+
23
+ def emscripten_toolchain_name(name):
24
+ return "emscripten_{}".format(name)
25
+
26
+ def _get_name_and_target(name):
27
+ return name, ":" + name
28
+
29
+ def create_toolchains(name, repo_name, exec_compatible_with):
30
+ """Creates toolchain definition for an Emscripten
31
+
32
+ Register the toolchains defined by this macro via
33
+ `register_toolchains("//<path-to-target>:cc-toolchain-wasm-<name>")`
34
+
35
+ Args:
36
+ name: A unique name for this Emscripten toolchain
37
+ repo_name: The name of the Emscripten repository for this toolchain
38
+ exec_compatible_with: Execute platform constraints for the Emscripten toolchain associated
39
+ with this repository.
40
+ **kwargs: Args for http_archive. Refer to http_archive documentation for more info.
41
+ """
42
+ common_files_name, common_files_target = _get_name_and_target("common_files_" + name)
43
+ compiler_files_name, compiler_files_target = _get_name_and_target("compiler_files_" + name)
44
+ linker_files_name, linker_files_target = _get_name_and_target("linker_files_" + name)
45
+ ar_files_name, ar_files_target = _get_name_and_target("ar_files_" + name)
46
+ all_files_name, all_files_target = _get_name_and_target("all_files_" + name)
47
+ cc_wasm_name, cc_wasm_target = _get_name_and_target("cc-compiler-wasm-" + name)
48
+ python_interpreter_name, python_interpreter_target = _get_name_and_target("python_interpreter-" + name)
49
+
50
+ wasm_name = "wasm-" + name
51
+
52
+ # These are file groups defined by the build_file_content on the Emscripten http_archive
53
+ remote_repo = "@{}//".format(repo_name)
54
+ repo_compiler_files_target = remote_repo + ":compiler_files"
55
+ repo_linker_files_target = remote_repo + ":linker_files"
56
+ repo_ar_files_target = remote_repo + ":ar_files"
57
+
58
+ emscripten_python_interpreter_files(
59
+ name = python_interpreter_name,
60
+ )
61
+
62
+ native.filegroup(
63
+ name = common_files_name,
64
+ srcs = [
65
+ "@emscripten_cache//:emscripten_config",
66
+ "@emsdk//emscripten_toolchain:env.sh",
67
+ "@emsdk//emscripten_toolchain:env.bat",
68
+ "@rules_nodejs//nodejs:current_node_toolchain",
69
+ python_interpreter_target,
70
+ ],
71
+ )
72
+
73
+ native.filegroup(
74
+ name = compiler_files_name,
75
+ srcs = [
76
+ "@emsdk//emscripten_toolchain:emcc.sh",
77
+ "@emsdk//emscripten_toolchain:emcc.bat",
78
+ repo_compiler_files_target,
79
+ common_files_target,
80
+ ],
81
+ )
82
+
83
+ native.filegroup(
84
+ name = linker_files_name,
85
+ srcs = [
86
+ "@emsdk//emscripten_toolchain:emcc_link.sh",
87
+ "@emsdk//emscripten_toolchain:emcc_link.bat",
88
+ "link_wrapper.py",
89
+ repo_linker_files_target,
90
+ common_files_target,
91
+ ],
92
+ )
93
+
94
+ native.filegroup(
95
+ name = ar_files_name,
96
+ srcs = [
97
+ "@emsdk//emscripten_toolchain:emar.sh",
98
+ "@emsdk//emscripten_toolchain:emar.bat",
99
+ repo_ar_files_target,
100
+ common_files_target,
101
+ ],
102
+ )
103
+
104
+ native.filegroup(
105
+ name = all_files_name,
106
+ srcs = [
107
+ ar_files_target,
108
+ compiler_files_target,
109
+ linker_files_target,
110
+ ],
111
+ )
112
+
113
+ emscripten_cc_toolchain_config_rule(
114
+ name = wasm_name,
115
+ cpu = "wasm",
116
+ em_config = "@emscripten_cache//:emscripten_config",
117
+ emscripten_binaries = repo_compiler_files_target,
118
+ )
119
+
120
+ cc_toolchain(
121
+ name = cc_wasm_name,
122
+ all_files = all_files_target,
123
+ ar_files = ar_files_target,
124
+ as_files = ":empty",
125
+ compiler_files = compiler_files_target,
126
+ dwp_files = ":empty",
127
+ linker_files = linker_files_target,
128
+ objcopy_files = ":empty",
129
+ strip_files = ":empty",
130
+ toolchain_config = wasm_name,
131
+ toolchain_identifier = "emscripten-wasm-" + name,
132
+ )
133
+
134
+ native.toolchain(
135
+ name = "cc-toolchain-wasm-" + name,
136
+ target_compatible_with = ["@platforms//cpu:wasm32"],
137
+ exec_compatible_with = exec_compatible_with,
138
+ toolchain = cc_wasm_target,
139
+ toolchain_type = "@rules_cc//cc:toolchain_type",
140
+ )
141
+
142
+ cc_toolchain_suite(
143
+ name = "everything-" + name,
144
+ toolchains = {
145
+ "wasm": cc_wasm_target,
146
+ "wasm|emscripten": cc_wasm_target,
147
+ },
148
+ )
bazel/revisions.bzl ADDED
@@ -0,0 +1,949 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is automatically updated by emsdk/scripts/update_bazel_workspace.py
2
+ # DO NOT MODIFY
3
+
4
+ EMSCRIPTEN_TAGS = {
5
+ "5.0.7": struct(
6
+ hash = "6cd98e86d7749ff98b82b7f2ae78eb4f01942788",
7
+ sha_linux = "f96cc4df9263e386d70ad37c731959886cb2a7e983b7a68bdc9ccf32402be1bd",
8
+ sha_linux_arm64 = "3cd706f3c97bc9e2abc9898c66ed15988243d189194623a4fb02ec207dc48693",
9
+ sha_mac = "0ccd510ae3e1014ffc565de482982507d1c2d3d6dc6f5bf243e857c73bd5d352",
10
+ sha_mac_arm64 = "37554ed4c36abb1c802aa280f2c1ef9702e19e832a66c2fe6d940b65a2049b2c",
11
+ sha_win = "32995a98db21951cb7e84b4898b235ba57553c9f35eeaa158cfff052fab83856",
12
+ ),
13
+ "5.0.6": struct(
14
+ hash = "1724b50443d92e23ef2a56abf0dc501206839cef",
15
+ sha_linux = "5688561ef52f981f2a3a939b783e6bdcfbb8487ae947a7d0aa6da4efc805dedd",
16
+ sha_linux_arm64 = "7cdaccc7ae87916462fa9567e73e4b22b746f9eacc1385aff9753bf56b12bc72",
17
+ sha_mac = "d26b1f7d8a17ad4aecc6b198c380e14033e9ecca76979ac59e1a63744641f415",
18
+ sha_mac_arm64 = "249121390c3bc89c59394143c768cb3c37586620eebe82a8f09f12af5003a31b",
19
+ sha_win = "bbea17bc23e80a15d959af2dcb8bd9d23d625701d784ffe9118267698d6e7049",
20
+ ),
21
+ "5.0.5": struct(
22
+ hash = "6eae703422b3962d1ed75e15f728ece57aad6bd6",
23
+ sha_linux = "6b95750efacf09cc868ea2c8a3889529704c75acd04c5dcde03293b7aa56b002",
24
+ sha_linux_arm64 = "922e4fe6fbbcb0e303be8fb429f5ff2264c00c79e5b7f34a988df542d56a3669",
25
+ sha_mac = "52640186e373b9f15749d17a7b83b5c961bafe15c69229400c08b81f04528d1e",
26
+ sha_mac_arm64 = "34a2b349a6f1542241fb11abd5c7bd7ce89330183d764f620bb59f7264a1cf1d",
27
+ sha_win = "95fcef69d9128a75e4f6f7731a5c7d026fcf3f43dcd3d2c54ec7b3ae83ffa640",
28
+ ),
29
+ "5.0.4": struct(
30
+ hash = "54d45123d7ad4aa96ce57e74a1f3f9d1c54e6402",
31
+ sha_linux = "dac0c07aaa3558b564b1252764b1b1aca3136bee34f54bb50130bb7bee124d7a",
32
+ sha_linux_arm64 = "0c632bf6a185906036edea8b39bc4658193674a27221c0f07d8c9b10ce5b3b9c",
33
+ sha_mac = "61c2d4ae5fc3cf601d8cd7291a9fc6a5cbf0e5e20ba7129ad172a7b0c9a8416b",
34
+ sha_mac_arm64 = "6246ab40dc94e1df47c6df41f8ebd2473dfa1c74b7079ff67c2fb1793bb87ea8",
35
+ sha_win = "b5863a51fc5c2227a2a743fb18da70e4b6f1b9ddc0fe4243f99cc8bca783bbde",
36
+ ),
37
+ "5.0.3": struct(
38
+ hash = "065bfade0ee2c02138b83cb10049d8be95e146b6",
39
+ sha_linux = "7ae996db24911edc535cccf069fb8a3ed63e8dac7abe58e758431abfe3255165",
40
+ sha_linux_arm64 = "75fbc24f4e55e6011cbe31bd086758b7c47cee58d482ab54845def2b16dfb23f",
41
+ sha_mac = "b49f6dbc715864aaa38b161262cec91b32f34af32c6e87ee4cd4f3a98bb2a892",
42
+ sha_mac_arm64 = "91c38a2f68e7e307b351a3dc05637e2f4c5f083f185f7d59e70f6434889c5b94",
43
+ sha_win = "87a8ff5afeddfab1b602d6b4bcbd13ea9c8b951da1684740586cae3860aed9e9",
44
+ ),
45
+ "5.0.2": struct(
46
+ hash = "0a320d2395858e63288b3632b81535444ca2c59d",
47
+ sha_linux = "e4982d48f5e7796526fbdeb719b2e437991cb41f7d658e6c29e333394d17a681",
48
+ sha_linux_arm64 = "7dc80fe9a32ff23b8328b9c3585040e263392d4b52f46909e5ebd6ba63f03d64",
49
+ sha_mac = "57c2a250c86d4fc19b961595076580b7eaa0c3838a59431a4df156c613a5e9ff",
50
+ sha_mac_arm64 = "fda96643a173de9f25be9bcbb50c26ebd4fe9bc109c842ca95ff5e6fbb89b7a5",
51
+ sha_win = "80e35f785c2e697cc2133c982156411715877ee54ce61a136fa3abd8b763cd0d",
52
+ ),
53
+ "5.0.1": struct(
54
+ hash = "bf32ae8b61ac8efeb7eca01b54c8307f992724f7",
55
+ sha_linux = "bda6917b630fcc604cca39af433180adfd7195e378075331ceac926553684249",
56
+ sha_linux_arm64 = "050cb3e926187ade7a08ff3e58dd1fae7f4d84c540f9e0e0b008b562ad8922db",
57
+ sha_mac = "c3779aedbed7c860aeedc098deffaa351cb5da490dd17bd48d37715fdb4fe07a",
58
+ sha_mac_arm64 = "76bcc261810a6facb482c6314711c7bb429ad52f7ed0af6285a278478aa27f21",
59
+ sha_win = "68765c3eca68b715772cf84963371448480d034cfbbcdc54dc7379786cb4e71c",
60
+ ),
61
+ "5.0.0": struct(
62
+ hash = "e44d3cc557d78155966478aa2bd8dec657609619",
63
+ sha_linux = "ba97bdf3737d19f70af390223eb6262013b89206202779b6a8d57568b3241a59",
64
+ sha_linux_arm64 = "d3e0a648d1d8a33908e8f1d0878b62ec10f3714c13045f29c720e3936a1c411c",
65
+ sha_mac = "5020626bc87d3a9634bfa63fda05aa44f74144a849453c9cf1f014d9fdc63a5d",
66
+ sha_mac_arm64 = "7172745de73be538e86680ae04856f8608370c971f5f21bb5cf1d6331c83ef6a",
67
+ sha_win = "660fcee6fff5042ca4b535f6100319303be399ca86c393266da09e709944915b",
68
+ ),
69
+ "4.0.23": struct(
70
+ hash = "aaa43392544d695232b70eda706d751f18980c2a",
71
+ sha_linux = "5f1565fe45a1223cedf3b0300f5089c2c64954d2895b2aaedc85043c719be965",
72
+ sha_linux_arm64 = "d8ed075930b397d3aed8a1c7558db1918ade786349b07d5c042dfa7f65f78563",
73
+ sha_mac = "5823ef26fd45b5a960960fb53026513d43922eac7a1e3ba12d1344d7a94699f9",
74
+ sha_mac_arm64 = "54234e108d6612eca5dc9280d1779ccec3d49ad4d8c8562a6b2046b0a5a8d5d4",
75
+ sha_win = "c2e1b9a2eed20f9d5903780b559ce2b384132713f07936512e6d962dd5a5dae6",
76
+ ),
77
+ "4.0.22": struct(
78
+ hash = "bebaf7e50e31865b0724f17eaa52e161e2dfef5a",
79
+ sha_linux = "81219e78defb2f46d12a67a2fa6d128344d850f1e4375b173a324036236b40ef",
80
+ sha_linux_arm64 = "5bff19114edb410863634b14e3f459e7d90dc5339f7e5c7bdd5a946356b1dd54",
81
+ sha_mac = "a40cfb7c4c4f8cac9c6521475abca80f20986c8c438d46ac745bb4316d838a30",
82
+ sha_mac_arm64 = "1a3fb183385682e790cf617824681dc72c2b30e8db2afc9189d0dadea9ccd466",
83
+ sha_win = "4a29b0bdc3d477ce39a9e6cd508f16dc19ea1bf861a66c1d715e0264ab550e45",
84
+ ),
85
+ "4.0.21": struct(
86
+ hash = "d70a5da89b3e673bf6a482724478fc17e81e575e",
87
+ sha_linux = "e8516b903cd4dc16bf5aa2aacd826adcff5ff1d97d3d88e5e3871decd94cd8b2",
88
+ sha_linux_arm64 = "415024a22f84424c713b117c3a24cefb98ec03737e02063074010fdc8eaeb334",
89
+ sha_mac = "f17989b3528cd14971fe75ae9b2aa7d8cc4cc5bbb6d408660e059f822e108a46",
90
+ sha_mac_arm64 = "7960d8d33243f2f7acdac157136c6e93680550361ed71bb225fcfa25b6bbb2fb",
91
+ sha_win = "79b3a6b77cf8015cc07ad25353f17f1828e731b0d8757a046071fffbdd5aaf70",
92
+ ),
93
+ "4.0.20": struct(
94
+ hash = "c387d7a7e9537d0041d2c3ae71b7538cc978104e",
95
+ sha_linux = "a06e7ddda0c168f7ad52e6e0509c98db3545dcb254d3b9052e9e6b8423eaee7d",
96
+ sha_linux_arm64 = "a42862782c1d23330d2f55936e451f54ed4a630f9d7430ffd1936dc6967a29d1",
97
+ sha_mac = "6c4e8445a8e47e55fcd99789ec023d614c8dbd916afe64e9feb7a292c5070cd2",
98
+ sha_mac_arm64 = "144433e905ec1db726df9128e99624b9b4a3716e96dfb37dde22e2294a675c07",
99
+ sha_win = "388e9fab2bc9f94e85b1541e6ae0f1d9a5b9dfa9d756d89a0a3fc7acc052fbd5",
100
+ ),
101
+ "4.0.19": struct(
102
+ hash = "8b01e2ec3f33e6b94842096d7312ce4ef5f33f6c",
103
+ sha_linux = "f83aa5ee648a4591ddbfcbd19a3040056c9c5a846adb2b9c342b37f2dd557f82",
104
+ sha_linux_arm64 = "75c040b3463e58ba1fc15c18878327ef678a5f64621378cf2899aa4cf54c1dab",
105
+ sha_mac = "b6492abede5c1569d46044e750ed20e3e081e8a1c480913892cf5b9d84a5027c",
106
+ sha_mac_arm64 = "5e522c7c03b83929a1d2a2321d8e5cc8fe3d0f0aeb05d1d26213b52008494731",
107
+ sha_win = "39078e88c6d29e6a09892df2d6440df4f47f78292377b89174ea209b1188a6f9",
108
+ ),
109
+ "4.0.18": struct(
110
+ hash = "df7d4d811503e86e7728326e3eabbc383cb8042d",
111
+ sha_linux = "38148e69fd718e81de6edc3bc03b1851da436b145caa3c90544f128279eaac75",
112
+ sha_linux_arm64 = "9b86ffc6185d4367718d679db2bcc0dadb64f8caffbfadf3db93d9d1ae5ab34c",
113
+ sha_mac = "c6ab987445e37632202253b15b871628385f281e85d54a36a4f7357fd3a3f4bb",
114
+ sha_mac_arm64 = "762cda293d5737414c12d0a1d09e765d22dea3944c032aa56d98d3a37abc02ea",
115
+ sha_win = "c80405bd2898051de00869f31568c3217ebc8d9cba33a18f8c01e8bb3c4b4f7b",
116
+ ),
117
+ "4.0.17": struct(
118
+ hash = "41d2106c68c28e101e6252a48e22c78b07722508",
119
+ sha_linux = "5e4269ab4d4dd97da93f2833bb97780ef6ddee9a7325d345587bddf8890d89aa",
120
+ sha_linux_arm64 = "2ca54b47a73f1f6687e33b3494748f52d753e2e21b9db505e358d362da4794bb",
121
+ sha_mac = "d574a26c775b4f737a6960871340b4cdb04eefe44f6fd3a5072c62e86837c1fe",
122
+ sha_mac_arm64 = "8a571a73461d7755787fc5ffb35b7284216741cfbbcf52d855d54d2cc36ecb9e",
123
+ sha_win = "a394e719b3258ca7502cb85c9f1031b356ec41f511a187f79bb50b91678aae75",
124
+ ),
125
+ "4.0.16": struct(
126
+ hash = "e68ea3dc5ca3eda4e2bba62359b033074e506925",
127
+ sha_linux = "c1ad0e9259eec965eb9724bbe5ca3fce45939da58d840f9eda71c52f83447561",
128
+ sha_linux_arm64 = "295cd1406ac584c92ce58f01ad2ae813893932c26eb7201caaeca45d3c6f8a9d",
129
+ sha_mac = "ee29be60e98ea37446b839dc46049c04a7efce7b60b7737423d36051dbb630b2",
130
+ sha_mac_arm64 = "f8d06789195f0c3b07d7f241b11f2aed9099f3e3ba69dd0fb85a93b9edcfec45",
131
+ sha_win = "e3cc92b6b55604fd9c2017a7659cd5ecc234e9522f9bfccb1454130c6189e309",
132
+ ),
133
+ "4.0.15": struct(
134
+ hash = "b412b6307e541b93dd93f01b61181e15c17302ec",
135
+ sha_linux = "c0ed25c30e1d747072de0c9053cde27ca83a8d2424e8bc6b7d39dccf42fcba35",
136
+ sha_linux_arm64 = "1e250570d0ea7a3112f65ca0f31031793aa836d968dfc88323b7826d737c1b81",
137
+ sha_mac = "b34bb7fb7a49fe9427a62521685980cc8739a290cdbbba9b00bdb581338b2111",
138
+ sha_mac_arm64 = "1669390cc812bdebc234f3ce7e5c2f90076e5b6ca52a0822be52d5638b15a380",
139
+ sha_win = "726046170075416370af4f13276990dde9560a844c14ece74912fce6fffd03da",
140
+ ),
141
+ "4.0.14": struct(
142
+ hash = "4658718c188782acc67a249d45fce2d891ee3cc1",
143
+ sha_linux = "4f83b1ef38c4d4c6df1ad6d9ae9970fb1f4bda7342c5860868d1825f4460b27c",
144
+ sha_linux_arm64 = "ddb831fd4ba096d58c638f44a887f7dcb925d3a1befc95d43c69db5ad3c2d81b",
145
+ sha_mac = "2e73d422b5fd54cfe188151fe4a19651fdad2d47614d1d7eee5adc124cfc2dc9",
146
+ sha_mac_arm64 = "4e01d07b379257e30e6daf61d171015e578a5eb004c7113eda964b181313c4b0",
147
+ sha_win = "b67f5027dd9f9e51bdcf0b8bd2da5203a45b4b3338a0e288ee43e186375a91ae",
148
+ ),
149
+ "4.0.13": struct(
150
+ hash = "32b8ae819674cb42b8ac2191afeb9571e33ad5e2",
151
+ sha_linux = "2ad887035e3e5cac78abcaeca3b3881897f03b9919d008cbc0ef41d7641247c9",
152
+ sha_linux_arm64 = "675156bd626c7b19d4f2271ea8ffa77a235d9b0a031116632e53b374cf23754c",
153
+ sha_mac = "657cbd01e84f0a33cb7a1379baecd18a7d96883222a3a99b43919d8bb2374f55",
154
+ sha_mac_arm64 = "12ac26e298ef973207eba9332e28da375ec2ba1d32e68e0d8b32de3c886a2e39",
155
+ sha_win = "a363d6e92dcaf0024d378f1faabb61a139d9152a796f66a475a48e33e90f6adb",
156
+ ),
157
+ "4.0.12": struct(
158
+ hash = "209b886304498eff50dd835850dc5715803401ed",
159
+ sha_linux = "1c303712707a91b88f743b0ad6dd1544c289e614844396698a2510a66c5608f1",
160
+ sha_linux_arm64 = "2c503d031d2ad2b13c6e4fe09f104fe50c5d1319feaa2b3d19d4e4608435fbb8",
161
+ sha_mac = "c85830f151ec8eebec6bb2344e3eed942bc7b5dc91b146326635f9f71af459f2",
162
+ sha_mac_arm64 = "853dff1a8451b54ff7cdd95f923851dd9b58ab36873b7b600d16243a5fb6d907",
163
+ sha_win = "7b7e58fbd35a78ddf9a2a4a3f6215857bf2342942c429cdf540a2251540cb845",
164
+ ),
165
+ "4.0.11": struct(
166
+ hash = "7033fec38817ec01909b044ea0193ddd5057255c",
167
+ sha_linux = "f38e70b53be587e7c757f375b3452e259c70130d4b40db3213c95b7ae321f5d7",
168
+ sha_linux_arm64 = "42020e4db200ac366a3e91ac2fccc04ee0ffc090cd2d5986c892b27f39172bb9",
169
+ sha_mac = "4169811f9682f54ae5c9d0662d0a4dd4318abab5d3d0473fa54007f515a8cdea",
170
+ sha_mac_arm64 = "09554371e3941306d047d67618532e5366ba6c9b5bda1a504a917bfbabc5d414",
171
+ sha_win = "bd2094ca9bde5df25020a46ece7f56b622d1d22214fbd12950b01b952dd40084",
172
+ ),
173
+ "4.0.10": struct(
174
+ hash = "8103ffedfb0c42d231c6af6859a5a1a832260b43",
175
+ sha_linux = "0183f887b56c3f8d4b45826cb49856a3324afb66236ad3c13944c0fd2550cbbc",
176
+ sha_linux_arm64 = "0679f459118d80163d0712b0abda00cbc97a90cddf1dcefa9efb1bf89f67baed",
177
+ sha_mac = "02f3179f703b4d196a679897b430c1eeeb1d5f9aeba9b435b04ba3f526f7e8e0",
178
+ sha_mac_arm64 = "c744ffe06ffed55cd8dae42862b7646f15550c7decd47a48d09a474af83732b0",
179
+ sha_win = "1a66825e85fda039f57d39c98ae2bdb96a18e53745159e9599f69679be18439f",
180
+ ),
181
+ "4.0.9": struct(
182
+ hash = "cb2a69bce627bd2247624c71fc12907cb8785d2f",
183
+ sha_linux = "c6fd245138e6bbdd8349963cb4045c557d657e4be0ea44155375633c689c8be9",
184
+ sha_linux_arm64 = "872d7f5870f1bfc523a446ca66ab1b47009a96be33c398dbbb12a56597e46ab5",
185
+ sha_mac = "7efb0a6ddcb915aeca9f8685db909ae7799452894876fc1223a78d5c3288ff2d",
186
+ sha_mac_arm64 = "b97f3cda61211dd83b31ef9ea92e83d416a9422192cf3ee484fffe11e5d6e5b9",
187
+ sha_win = "e6e409ae564c041691f2fecd690431a9935401f8ab6afe284b222546887e84c5",
188
+ ),
189
+ "4.0.8": struct(
190
+ hash = "56f86607aeb458086e72f23188789be2ee0e971a",
191
+ sha_linux = "7b50b2b40f80d4531ae29a0a5b902eca41552e04815f59880a122ac81e8f269d",
192
+ sha_linux_arm64 = "d6e3ab0cdec2e6983235322f600f248d313bfce4a6a69ef16cdfdc330ff748b8",
193
+ sha_mac = "e1b2e6d4797338ed884f9d8a8419f93fc42cfcdea5e8a8b29fe13c6fd3fe7f7a",
194
+ sha_mac_arm64 = "115b207304d5471b77fc7649904111f3bb5ed7998ad192cba6cfc5fd0b2d78cb",
195
+ sha_win = "9ca65cb49287f448216c2eac12dacff9808ae827d5de267aaf2bd65f6d4f233e",
196
+ ),
197
+ "4.0.7": struct(
198
+ hash = "ef4e9cedeac3332e4738087567552063f4f250d3",
199
+ sha_linux = "60079078b1ecc4e96ab01c4189aceeff9049a1bb2544123295e9841b91a9410d",
200
+ sha_linux_arm64 = "caa10ae2d2b01eb290957e96636f0a6861e7305c8d991c762379542208415793",
201
+ sha_mac = "d588cc31b7db0d876f1d45f4d0c656d5e205d049c0bb27209cad04cfebe19309",
202
+ sha_mac_arm64 = "c0153cc053d8961e094447c3e706cb8f379c263bee64202fd78251fe018fb014",
203
+ sha_win = "7974b6e11164c2c94ddb252c9728d21de321094421f5d0856702e65c06751e54",
204
+ ),
205
+ "4.0.6": struct(
206
+ hash = "14767574a5c37ff9526a253a65ddbe0811cb3667",
207
+ sha_linux = "27fc220a9ad98d323cad73531ff563e9838c9e1205f51ee2a5632bb4266a35d2",
208
+ sha_linux_arm64 = "2d03f8eb3f81dd94821658eefbb442a92b0b7601f4cfb08590590fd7bc467ef8",
209
+ sha_mac = "c06048915595726fc2e2da6a8db3134581a6287645fb818802a9734ff9785e77",
210
+ sha_mac_arm64 = "35d743453d0f91857b09f00d721037bb46753aaeae373bd7f64746338db11770",
211
+ sha_win = "3b576e825b26426bb72854ed98752df3fcb58cc3ab1dc116566e328b79a8abb3",
212
+ ),
213
+ "4.0.5": struct(
214
+ hash = "d7f8ff5e2ca3539c33fae81e98f7c56ef9fa1239",
215
+ sha_linux = "fdd4d9d6b37e845039b207baaef60cd98fb594ea13a3e6d622c2dcd8f2a48ac6",
216
+ sha_linux_arm64 = "0007aec32eee609b91f35c32481ec060ea7dac7151e36344bbcae419907f9240",
217
+ sha_mac = "f4e5a6c57ad9de59bff73463972213a299af2bb419dafbdd3959947fa801a342",
218
+ sha_mac_arm64 = "b8b93190fa17afe32a5eaa7120b807767b1c9d6e1d4ae6b9a2c6adb231758683",
219
+ sha_win = "3b8ed9e298a6d58fee841f5c3f1d3e7b2dff104cc7df314cd329f4c05d470be0",
220
+ ),
221
+ "4.0.4": struct(
222
+ hash = "ea71afcf5a172125179a07ff1731de6e81c92222",
223
+ sha_linux = "f05dab4a6a13a5fe6972e95e918d1483e687faf468e1a653deaa8d7956a97a3a",
224
+ sha_linux_arm64 = "95a421f304a7209c6f259754ad15aea5bbbbb1838139b51837aeb2c184fa4a89",
225
+ sha_mac = "d8b44aae37224ae76572ad84b60a2adaa126826332864fb689944d5130705d8d",
226
+ sha_mac_arm64 = "ade1c1a0c2e5893c6f74079beeae8b7e2a0c3f3b7ae88891064104fd985dfc2b",
227
+ sha_win = "342cf9dfb83e95bf678d07e460e093ea61a609d34b4603d9be06d4f31784409d",
228
+ ),
229
+ "4.0.3": struct(
230
+ hash = "de2109f0e5e7278d470da11de526aed16c527722",
231
+ sha_linux = "6480f51d0c24130424c696bf83e9774f42246a0109c8d48b59f4520fdfadb928",
232
+ sha_linux_arm64 = "76b1511d550b4f47276b93581ae5122063acbca7c960703637657388cf178636",
233
+ sha_mac = "f40851b816b31b3ca3214ebf61cc152625a05c24f43e2b13c2ad9b9e5dca73c0",
234
+ sha_mac_arm64 = "6d8ac5ad1f59f71de0927eb2c595dab2f21d9946ca293434359a6db2ab06a138",
235
+ sha_win = "3702e4a518057520d4ad9e7cd63a01a829770d090551e00f19f417f55b0170d3",
236
+ ),
237
+ "4.0.2": struct(
238
+ hash = "cc8eba40de8235f9c33d92463018f87b3edaa09e",
239
+ sha_linux = "3c0e3940240709388c24a4262680c18bb1d5979f2337abe53db00fb039606c44",
240
+ sha_linux_arm64 = "21ed0c31c1fc972e3509fcb140e0323061b5f2b173fe56d1f8961df2a37e4c11",
241
+ sha_mac = "e1bd96ec790968adf583d348158375b76ee0287e348954c3393c82565475b07b",
242
+ sha_mac_arm64 = "e5bf9a5efabc114b42636abcea07a1e02d3a9406cd399a29ccbc730586dce465",
243
+ sha_win = "78010f8e2f7bb6868bb20e3fc32e24d45e6fca749c388c2d25bea9845512338d",
244
+ ),
245
+ "4.0.1": struct(
246
+ hash = "5ff495a591978fdf8a16f2d172be3616f3150d1e",
247
+ sha_linux = "7b2b64b1bc15555696f78cbcb54c8d75832222d1578270ff5f56a8024c9a0dbc",
248
+ sha_linux_arm64 = "5c046a22b933de14be6b2522b75796afffe3940a19422eee483b7f3f1a226d66",
249
+ sha_mac = "d089eba9c3cad675bbd7d3318aec166ebe5ba984a6c5291136c09c68324d9818",
250
+ sha_mac_arm64 = "c8359b334bad71719e8d29e796ca7b63891e0305987b2572eb5a2f020e34f773",
251
+ sha_win = "9cf861339327f3657281c5c8c18aa723323acffe3b3d1c3807b9d4576d097e0e",
252
+ ),
253
+ "4.0.0": struct(
254
+ hash = "3ebc04a3dab24522a5bf8ced3ce3caea816558f6",
255
+ sha_linux = "6836988f0b7ee6ce3df5192dd4375b9eee55be78847ce31cf1d2abfb00f1e991",
256
+ sha_linux_arm64 = "d4e6e04b7e2fa1bdffc9c07ab4e0a3f66bde75adb06ebf9cc66a341907b17db4",
257
+ sha_mac = "4123e9ff6a699dac303c4fe22529ae0d618c118fcd8267df590363b0fc98c91d",
258
+ sha_mac_arm64 = "4b5fb7cc4f5f8526aaa41c8560a00ad6782b97cd3894d856beb635f05a825613",
259
+ sha_win = "6b1e5aee4b4a4274712566c845888bdf4eced09a5aaa64c1796cda57cd2854c4",
260
+ ),
261
+ "3.1.74": struct(
262
+ hash = "c2655005234810c7c42e02a18e4696554abe0352",
263
+ sha_linux = "a987bb4cded4f29437e8589accac204ce3c134feaaaf251bb97d0fdf450dce65",
264
+ sha_linux_arm64 = "c7fcc532eb7ee1dc7df0eacb49128ded12e4d55a973b8a2a5215da8bb6c4027c",
265
+ sha_mac = "04f848f40bd19220a43abde2dd1012d95bf1f89c618c0f631b83d18357e2bb65",
266
+ sha_mac_arm64 = "fc71758a5bfb02b8a5c2dd21d6bfc34aa3c64698f6105e204a1f4d11f6d67603",
267
+ sha_win = "603b0515e0367ee2718b2f360ef0194663d23a91236910d5f4a90ac4d745a4f2",
268
+ ),
269
+ "3.1.73": struct(
270
+ hash = "b363a836e75a245c548b7a6a021822d8c9e4c6df",
271
+ sha_linux = "4f3bc91cffec9096c3d3ccb11c222e1c2cb7734a0ff9a92d192e171849e68f28",
272
+ sha_linux_arm64 = "e6fb8a32889d4e4a3ac3e45d8012641369251ddd1255ada132ff6c70ab62b932",
273
+ sha_mac = "8d52ec080834f49996534de26772800dee048ec9bf148bb508be95887e267735",
274
+ sha_mac_arm64 = "58e6c984c5a1fb71e0871f0c3bb9e32d41e7553260c6eeb38800a4612623a99d",
275
+ sha_win = "d76003fad2146ad1f2289e8b251fbc359406ced0857f141a41f15149c2138302",
276
+ ),
277
+ "3.1.72": struct(
278
+ hash = "7a360458327cd24c2a7aab428bdbcb5bca8810e4",
279
+ sha_linux = "be094d6dd27c27a64116e9c0165d6cade5d329f5137e56696773e98e1df83fa7",
280
+ sha_linux_arm64 = "5dba64454809d72d53c432f3c91830d69d413ebd9dcd0ce18df5a79a3af235a6",
281
+ sha_mac = "52f713c118717814d2371912ab9019a3605b7d6acc627f3842e6aa7d3ffff7bf",
282
+ sha_mac_arm64 = "644593539684f59c635c7eae2e743f5e4e27b1d665f9c71c23dcefd4c2448b3c",
283
+ sha_win = "c72623fb68f109d8f122036f25b9fc75353bd1ce28995d9920277d4be4a1d99c",
284
+ ),
285
+ "3.1.71": struct(
286
+ hash = "7ee0f9488f152e9e9cf0d4d243970e03742f1a5c",
287
+ sha_linux = "43f87aa84a73697b905d2a13c89d016af8ec66bed792f37dd5a0059529abee12",
288
+ sha_linux_arm64 = "d25f5e57b2e7557df39cd9dec3b0283fb086f66c800af3d9a3f70f36c5fc6b14",
289
+ sha_mac = "8dac015c03c4f2e594d8bca25fe35d1e4d808aea81705121e852aff0464c4a9d",
290
+ sha_mac_arm64 = "a7797c3d210eda29f88eede261fc8f0aabf22c7b05214916b5b50a1271e9f0b8",
291
+ sha_win = "dfe77eaf22278ca975519f0497c8b336c86e52461c478060418fe67b39b6e87c",
292
+ ),
293
+ "3.1.70": struct(
294
+ hash = "6fa6145af41e835f3d13edf7d308c08e4573357a",
295
+ sha_linux = "c29b4a2c6addd5aafa613768d34273a23d8fcd1753c685ff61099506710cd8d7",
296
+ sha_linux_arm64 = "b13386975023a06f19057daef3896d480229b144d1e97f8764ed2f3e0fcb7d37",
297
+ sha_mac = "bc0edcaaaa19daeda9164d38d36c5f7d7b4b4e1eb7695ad58e776336c571fcc4",
298
+ sha_mac_arm64 = "e470d5eeb570850d66a79bd4c06064b9b3a1e90c7c2101e1a444ebcd6466fe5a",
299
+ sha_win = "f0118d71fd67583ddcfd39af2ed8bec3d18152fb6aadee085ebec5bcaf4ac4f5",
300
+ ),
301
+ "3.1.69": struct(
302
+ hash = "8fe01288bc35668c13316324336ea00195dfb814",
303
+ sha_linux = "24a786666e6f48ed3c3944b44df5cf146c45cf4faece4cb2686312a3d052a00c",
304
+ sha_linux_arm64 = "48e670501d215ac5b6b2680c900c517d9028dbc4de43be5dd6f25211a3640f2b",
305
+ sha_mac = "8503fe87dd2f30abff2550e9d6eb8aadeaf30fd3c6972d635b31e67f82e155f7",
306
+ sha_mac_arm64 = "995c7b3c84458edf6b8945e81405320c64a25dfe79eaa427fc1fe9a680f56b4f",
307
+ sha_win = "3839e0a581ae7b19156f004762a8221585e9a0d6237e468b13a878d1947636c5",
308
+ ),
309
+ "3.1.68": struct(
310
+ hash = "b52d8c9150dc7d4c8e4a7a08c7a9b4006c9abe49",
311
+ sha_linux = "1f2bcb47d85eb31d90fa797b3513221adc50f0656bb37f0962a40fd0f49fcf6a",
312
+ sha_linux_arm64 = "de346e7a489aa27a442215945d154d58a0d35c608b6150b2992af0e70c04e1c5",
313
+ sha_mac = "b180711544d783121370d2c894703f99d370a864ab147730f82fd59b88fa3481",
314
+ sha_mac_arm64 = "5e9b6242b56edc8cb404cbaf6c8bd7eb1f0f168b55b580bd92652f98c5d286f4",
315
+ sha_win = "824d37e8a0845f44e4c1111e8365640eea28944f1bdbd1e9e3fea0279b68baea",
316
+ ),
317
+ "3.1.67": struct(
318
+ hash = "4ae62984ea36ef0e5bfcbd0ed9b62f04bee6426a",
319
+ sha_linux = "535b64822916c80124363a5c7a5bd0cafd703f166d5155c0ad0e464e4a879091",
320
+ sha_linux_arm64 = "04c5f959702d8c1e5c000752b562271c224dee593e81144280840fed06e36cd9",
321
+ sha_mac = "692b8fdc79a47332ba9881966c72517eedf15b2da7bed37a535dfec55e6bbd9c",
322
+ sha_mac_arm64 = "ac26753f59fa9c8e92be9c91666014ad9400c91fbd37064105d1b5fcae503985",
323
+ sha_win = "8c6af8046ed47386018e42d18b53f57fad0926306dd4315d7f09dfae844b3dd3",
324
+ ),
325
+ "3.1.66": struct(
326
+ hash = "243eae09cf5c20c4fde51a620b92f483255c8214",
327
+ sha_linux = "b10eac37c978b28da2f1f34cdd8a7759c0ed5e5a2d8eb4f4e6790209de33dbf7",
328
+ sha_linux_arm64 = "9c78a470f74c24fc1fde2c8d86583ed98847b6cbdd87cd0b36ff2d6b4799d950",
329
+ sha_mac = "64fd0603ccbf949967cb0dfd8f1b0b25e018abf8bfe813b53596c4fc78751027",
330
+ sha_mac_arm64 = "fd6250f25101957f56086d292263379880c4b3329819a021008b2058f92ef67b",
331
+ sha_win = "b24f65a1a1111d8ace6ba47b55e07681cd0620f7bf711d1018ee262c9501defc",
332
+ ),
333
+ "3.1.65": struct(
334
+ hash = "fdcf56c75a1d27fdff6525a7e03423595485ca19",
335
+ sha_linux = "b2b7de13d37c4c5126e6c6a077e6019ebacc78ef1fb1b35b9035f03975f5ffaa",
336
+ sha_linux_arm64 = "f838af6495408f3c0a14d233171b4919b62e445c62805a22dea1875cb709a116",
337
+ sha_mac = "cc50b829a21a041979e0941cfd2047d30a06e3c4a8fd9f662ecdc12a0ab40535",
338
+ sha_mac_arm64 = "db4430db6a085d6ed5284917e632541dad3ce0a9464659fb674055247ad059d0",
339
+ sha_win = "e72ae4ec3231d9a492eadbf77ff28c13efd90307a69df04234792e67a001d05e",
340
+ ),
341
+ "3.1.64": struct(
342
+ hash = "fd61bacaf40131f74987e649a135f1dd559aff60",
343
+ sha_linux = "c39de24beca60fd580f6dff0eca0e275016042a30234588b19eda82397e299f3",
344
+ sha_linux_arm64 = "61b412135630a60c5517278dc83930e06f80fa286fcc2bb6366c4f620c86e4e0",
345
+ sha_mac = "2644772be398c8095621b3d0fe9ff2d122b18b7b0963c0eb702639d94dfb8e90",
346
+ sha_mac_arm64 = "47449057c345a09aa8750be1a357c364ffea9f8a066066cb341a7a2a14bac96a",
347
+ sha_win = "eb5b59afb420915daab4c383e5f73d456cc14776dce02fdc852c46522cda5531",
348
+ ),
349
+ "3.1.63": struct(
350
+ hash = "aeb36a44b29e8ca9f4c7efbb4735b69003ac2bb9",
351
+ sha_linux = "2a38ac1ea2fe3b7169879f0f666ea278f344cbb5db6e34421b9554939559109c",
352
+ sha_linux_arm64 = "f1dd5fe4cd22e89b1f5bfd216f1245f9f40f6ea76651a7f66e925a68ff6f18b8",
353
+ sha_mac = "7e192b84aecfade22817b5b38f0c69d1f795a9b990308188d39ed1d218692cd3",
354
+ sha_mac_arm64 = "751ef26a3682f5f23dfdc1c2f80cd0604a32cad61e6373c823de774722ecb9af",
355
+ sha_win = "947f8e867e781750d374d659644897f2345a133ad3d0f9ade23afcb81eeaddd3",
356
+ ),
357
+ "3.1.62": struct(
358
+ hash = "d52176ac8e07c47c1773bb2776ebd91e3886c3af",
359
+ sha_linux = "fd303a2b2a85c4b3ab8aa29595d70c5fde9df71c5254d56ed19d54e9ee98e881",
360
+ sha_linux_arm64 = "233c0df77644472cd322b45b2d7cf709e6c338799b46f6ec5d5f39ca4dbe8aef",
361
+ sha_mac = "d9cfef7ba8f44bf21be715244d0d5f909f1ccc2a481a301b3c01d12d1babc049",
362
+ sha_mac_arm64 = "de5484d60c858aaa8b93ba6485924adffe734cf4f8296765c089900cf9ce0701",
363
+ sha_win = "7455680bf9c19a26fe4868111ac01401023b0f92e862d3cabadf7950b87707fd",
364
+ ),
365
+ "3.1.61": struct(
366
+ hash = "28e4a74b579b4157bda5fc34f23c7d3905a8bd6c",
367
+ sha_linux = "e3e20e09219fd47a0019bb3252e17db4a00ded39b39b41634bc73f840a8ff2be",
368
+ sha_linux_arm64 = "a6b858601ca09fb7bb6ddf1a5ffb1a4130454c936ad046d45fef183037828c46",
369
+ sha_mac = "1fe69a3c42fb2857b80c8e77bfab780cb212ed7cf81ae57c0c4d235504df5269",
370
+ sha_mac_arm64 = "4ba702eea409e2d4bfabc73a68919217d3993e7585d95734e3e40a3c9ce1bd21",
371
+ sha_win = "bbafba849ff072a61dd34a8ffc0c85eed20a417854a3ca751b092e3565a92581",
372
+ ),
373
+ "3.1.60": struct(
374
+ hash = "87709b5747de5b1993fe314285528bf4b65c23e1",
375
+ sha_linux = "ff5eb062165920c7cb69935d396f13e9f8ca5b13f2d7f3af2759bcacb5e877e2",
376
+ sha_linux_arm64 = "2c291942df4868d3f65b31dd964bda9736bfddcd6a7886158963f797d1b45cf5",
377
+ sha_mac = "45586fab1bad65a4293ea8939dafb5ec711ba92ae7b4d1edbaae3b4486f398b5",
378
+ sha_mac_arm64 = "8dc27416a378ad07285d380f68717cfe0db1ea6252fdb1ad012af95e4d3f342e",
379
+ sha_win = "f3147ef2d4ca48ea2624039969fd0529d0bacb63bf49ee4809c681902768b973",
380
+ ),
381
+ "3.1.59": struct(
382
+ hash = "e20ee09a8a740544c4bc6de5d4ba5f81f74b74d6",
383
+ sha_linux = "ae59d1946cb92e1651cbb904fe824b3f07b39f42fa25f582116b5aaa226fa239",
384
+ sha_linux_arm64 = "25b918d6d5ee2af7ef6b28e089dc21d2dc419dca76c8079bb638cb20459eb9e5",
385
+ sha_mac = "af175bd559cb80459749e504da314af0163291f195461bf4d376d6980c4c60c3",
386
+ sha_mac_arm64 = "e17553bca5d00b30c920595e785281627e973f9e7e14c5dc0a73c355ccafe113",
387
+ sha_win = "bb54256fc3b7824cb75d5474f887d9bf8e1e63c15b351bdfbed898aa293ee4ab",
388
+ ),
389
+ "3.1.58": struct(
390
+ hash = "a4d4afb626c5010f6ccda4638b8d77579a63782e",
391
+ sha_linux = "b188249ecb939dadc679aaf2d3d9afd0fe19ab942f91b7bc926b4f252915dd1a",
392
+ sha_linux_arm64 = "4aedc8ca641b40d9bd82d85b1dc3458fe1afc9a132da06a09384a5f89c058969",
393
+ sha_mac = "2092aa4bef3b9f88d3f343b042a417ba617d4e04454656d8f2e101ba53f854e8",
394
+ sha_mac_arm64 = "7a9a15845257629b7602d15bdf7633a8e10472b0fa9b3d9ee7149938aa2f2039",
395
+ sha_win = "9fe76b6189566d56f0cf9aecbd23a006778530aa87184a900f5662e39ce7272a",
396
+ ),
397
+ "3.1.57": struct(
398
+ hash = "523b29e1b99a61069a2fa9f9d3cc9be1c4c53d4d",
399
+ sha_linux = "5bc444132258d4404d396f2044a4a334064ad0f1022555cad5ec72804a98ba5a",
400
+ sha_linux_arm64 = "f0022413afcc1610deff10921b3f5938bf4d01eba46ce96655f2295bdd84bd6a",
401
+ sha_mac = "31ddccb68c86f0a45332982938c49505158860ed4f7e8ccef72a48382e0e3c96",
402
+ sha_mac_arm64 = "cc5fdb65b339464f99b9c731cc63c233ec9577268886a856fa49f227ca2a56d1",
403
+ sha_win = "b53555420bb9b6e31c153e4c59427000ec692be17ae900f659a9b774d1ecebed",
404
+ ),
405
+ "3.1.56": struct(
406
+ hash = "9d106be887796484c4aaffc9dc45f48a8810f336",
407
+ sha_linux = "52338cca556002251e5e7d738adb1870d14331ddf463e613af02028b64e05a82",
408
+ sha_mac = "fc5cca6a9db571ecb2974bf0d4e12f1bc6068726271464586cf7e8723004b4c6",
409
+ sha_mac_arm64 = "aed728d09d801c4a33210505874ce066269292e7809a7d6a6414146be01545f1",
410
+ sha_win = "cd5fbe94fb0bcf01badc10eace48eddbca22b34f31229e3d70c68ade7bcdd571",
411
+ ),
412
+ "3.1.55": struct(
413
+ hash = "f5557e3b7166d05bddb5977e363ec48cd06e9d32",
414
+ sha_linux = "2a1cccc2f6db801219eb966d00af78a026af7822055064092387e7eba18e75ad",
415
+ sha_mac = "f1f8f4ebd086d0cd8bd54c41c6a0e86bbb26d7b8020484fef3dba67cd9e6906c",
416
+ sha_mac_arm64 = "7533b7a1beaa692a4f1e57b91c456b13e6bcc367dc9a414cb066350e8a2058c7",
417
+ sha_win = "204984cbb755f9aa09c21b49129d908f59617a60d5aebd8742097a9a2c196abb",
418
+ ),
419
+ "3.1.54": struct(
420
+ hash = "aa1588cd28c250a60457b5ed342557c762f416e3",
421
+ sha_linux = "5c8db804abe1ac7ddaa99a6997683cf9fa9004de655b32b5b612d59a94bd59d0",
422
+ sha_mac = "e6d2b8c6983767c7ced83d40b87081a221f05bab08d0fa4f0c6de652547c8a9f",
423
+ sha_mac_arm64 = "83764751ee5c7b42529e1df168695d4a51a23c9c165f3f90693baa9bd9256efa",
424
+ sha_win = "c0a1c9f3e1dfc9bb2e600501aea999f53b34a16f82da387317fdcae7e9c2a79b",
425
+ ),
426
+ "3.1.53": struct(
427
+ hash = "e5523d57a0e0dcf80f3b101bbc23613fcc3101aa",
428
+ sha_linux = "1025c0c738fbaedf3f8fcffee23bef71c8d04a95b30ea8a69a47231fb35d1c8b",
429
+ sha_mac = "318dc0cc51a237040bc1cb0a9e7d6c214196c8a100b50d0e298cf3ea7c365dbe",
430
+ sha_mac_arm64 = "e346ef588f7cfe1e41623de2257a11ecf8381fbd3bde63a8773b3a663411ea12",
431
+ sha_win = "af7f7175ab0b3c1e9121c713764e8ac1d970b6dbee8a84602b4a69cc5ec5940d",
432
+ ),
433
+ "3.1.52": struct(
434
+ hash = "ce2097fb81953331e65543c20b437475f218127c",
435
+ sha_linux = "1c0cd572067c6348cea5e347b9ef7c5460493ca3f0d84bb991689731d0e140ef",
436
+ sha_mac = "5d9c801f9cfe81337d65969e174e0b3ef4cf2b47eb548ff4695abe3a2e69ba70",
437
+ sha_mac_arm64 = "7ce8fef7542437c85412143cb59b13b8804bb06243a106d2d342c7d9132edc8e",
438
+ sha_win = "82ed01d965f5c2765191c67da5baecd2d3ce3f82a8cf30fc47fcd56d47826cf6",
439
+ ),
440
+ "3.1.51": struct(
441
+ hash = "4f416d92fbff66ce79901cfc8263768f1b25dd3e",
442
+ sha_linux = "09af08eb562cccf85770e4b8e368acb5accb1759fe3bc436b8fad80c27f90c79",
443
+ sha_mac = "b12201caf9ff2b981349edebd2d2c022ff000c74241ef96305b831abbd4f9450",
444
+ sha_mac_arm64 = "65fbee020cf965f9216607bad56215795529cbe8cef318fadcb33141dd6b5e82",
445
+ sha_win = "65c2d005a6be80723fa795ea724d4db9960601cf7d59d880f2882ecd45c8ad2b",
446
+ ),
447
+ "3.1.50": struct(
448
+ hash = "2ce4170cef5ce46f337f9fd907b614a8db772c7d",
449
+ sha_linux = "8822050b999286694cd4ffc7d959a8ea3137e3a910121d78b5377439ede9b598",
450
+ sha_mac = "39ce2f689be348b558df9c2c988b03472d43f8ac0827624397f7c0bb56a1e893",
451
+ sha_mac_arm64 = "5a9fa8de121db400bb46e716d861283b938ad87257d7c48f99dd5557100bd3ea",
452
+ sha_win = "29096f5596d93dbf620a9547fd1ecec8f54f3f52d49b13f09959d852310220db",
453
+ ),
454
+ "3.1.49": struct(
455
+ hash = "bd0a2e230466dadb36efc71aa7271f17c6c35420",
456
+ sha_linux = "18f452f8bdcd13e0d3a65c569180d1b83579775eadb8069cb32bca1f2e751751",
457
+ sha_mac = "c5275eab15e42abb3a42bbe1cfe38ee1b852febc78f65f5605b8972a7bee672f",
458
+ sha_mac_arm64 = "10a722e2c7dcc97236f70f2d68b23a7975800ebf27ec4fdf76deddf483b1c6d6",
459
+ sha_win = "4361fc18faaf70a2dc342c219b13c39a8196e9a48e6897d08c7b0dca6ba6525d",
460
+ ),
461
+ "3.1.48": struct(
462
+ hash = "694434b6d47c5f6eff2c8fbd9eeb016c977ae9dc",
463
+ sha_linux = "689fffcb60f93a60a7bb52cc205ead43ab31f252753cfef39ae2074f6a442634",
464
+ sha_mac = "8ac2a3f32b4cba0d84ca5a1fe1db883dbfc2731432833ab5a7e6967c5f4ab7dc",
465
+ sha_mac_arm64 = "10dd40f94fe5c5f8c4efc838d1623cafe98c629d4c7872ad8c15cd7b0836f281",
466
+ sha_win = "9276435ea7c402c18572a4301d6a26426eac73414b0ed5cb3e721044a50f651d",
467
+ ),
468
+ "3.1.47": struct(
469
+ hash = "39ade279e75e6d17dd6b7eb9fba2006e61fe966b",
470
+ sha_linux = "bdc50abe5c7d4b4f14acea4ec36b270e86770cea2da4b0c393b80a692dc7eb7a",
471
+ sha_mac = "6a3a116707037d75a967a7d971894d8ace74a2a230aa50ba55e88e7cd7b94953",
472
+ sha_mac_arm64 = "b13d228e6a1c89c13a1500fff07dcf093fb01fa621d458496d4a6d7f05cfd600",
473
+ sha_win = "66a6c4f0cda4ace14a86d3e59d20685d35211854d21670632b0566ac73638245",
474
+ ),
475
+ "3.1.46": struct(
476
+ hash = "21644188d5c473e92f1d7df2f9f60c758a78a486",
477
+ sha_linux = "75cbf14629b06e417b597d3f897ad7d881c53762380aca2f0dd85f1b15891511",
478
+ sha_mac = "06f45608381203d501141be632cab960aa105626c3a0f7a48657b79728103880",
479
+ sha_mac_arm64 = "c2a85b509a91663b390f77d51fba775421d42456211466fd3757f9dede7af9e4",
480
+ sha_win = "1ed3a3f36dee5d373ebea213fc723b3eeb7d6ba4c43da6a951ea0d76f265f234",
481
+ ),
482
+ "3.1.45": struct(
483
+ hash = "2b7c5fb8ffeac3315deb1f82ab7bf8da544f84a1",
484
+ sha_linux = "1c0576765f8b34603eead6f2bd4bc77bf68ea2f0a39ed4c144514103e85bc7d9",
485
+ sha_mac = "87f63ebb2f9807435016b238bbf46ccb94c919ec0786b46463cd788634391b0c",
486
+ sha_mac_arm64 = "29e698772c0e00c21ce120dd1db1586f5c65507168babff148c2e628add6e72a",
487
+ sha_win = "891d49f8828f715ef621d55fe202de4929bbdc89b69101fd33963571458a7f47",
488
+ ),
489
+ "3.1.44": struct(
490
+ hash = "b90507fcf011da61bacfca613569d882f7749552",
491
+ sha_linux = "5ffa2bab560a9cda6db6ee041a635d10e1ef26c8fc63675d682917b8d3d53263",
492
+ sha_mac = "291b2653f7576f8354f0267047e47a5ddef11223c89d5be399d04618f13b3832",
493
+ sha_mac_arm64 = "ad1625821b49ccbbe733596223fdf99fd786470d679f2c9dfabd4a1a7b929282",
494
+ sha_win = "8b61f60ef169b1c20207361067c40192c83b96cdbdb2f4cff21dfb20b9ee528d",
495
+ ),
496
+ "3.1.43": struct(
497
+ hash = "bf3c159888633d232c0507f4c76cc156a43c32dc",
498
+ sha_linux = "147a67a3454783b8c351780ec0111329d1e6fbb1d2fcdfe1c035e1c0997e0701",
499
+ sha_mac = "d84896c6d1ba0fbd9a5e5c5830b3ac4a02da5e683e9d8c7172f4c3ffdfaa0392",
500
+ sha_mac_arm64 = "d684f0bfc655f61e76cec29fdaad1668f3d21a229fdd908267f400691468328d",
501
+ sha_win = "a335f5f5b070cf354f1ca8e0afb23c06ae5f9ffb2c501124da7fcaea09a7db6d",
502
+ ),
503
+ "3.1.42": struct(
504
+ hash = "9d73bf4bd5b5c9ce6e51be0ed5ce6599fcb28e9e",
505
+ sha_linux = "aaa076e64dd511b0d874c348f8dab80a2f9ade0887ba74845fd02c40bbf9e68f",
506
+ sha_mac = "4715002394c5d444243c77ca231883eb999cf3313c4869cf0ae288d911f80f89",
507
+ sha_mac_arm64 = "84dede714edd81362ed2a2f79b91b1bd9cd544f219f937582e616d73bf0ea7f9",
508
+ sha_win = "4c704f4a4927aa537c2815a72915b7591c163ae8f0dbaedc167e810dd2a4a83d",
509
+ ),
510
+ "3.1.41": struct(
511
+ hash = "eb71265ef0ab905620015adbfedacf88c5dbf021",
512
+ sha_linux = "493ec8bd3f3ea3d6d616de01d6dac9c2af696978c6c44d453757ab2f8a666656",
513
+ sha_mac = "bb088e7b8f83b6bae02a0992eae61351e4e97bd033f8c8937cdaea0cb961ac9e",
514
+ sha_mac_arm64 = "aaba2de03a6dcc0db90e61e5e405a52aa47124e5ef21953d052ca015ce5ee773",
515
+ sha_win = "c7afbf2dfb6040990bd40bd72c726ada36e3e6f1985c4b62db7296465dd0778f",
516
+ ),
517
+ "3.1.40": struct(
518
+ hash = "c3122846bb040798aab975f61008c37eb19476de",
519
+ sha_linux = "5501e750c92f5a54b27ee101f6816e7416f154cb4181b73fd0be3faae947016c",
520
+ sha_mac = "052d6236ce49eaf3aa02b3c4d367b5ed4fb78209c1f1e64d48beb79e9c0b7131",
521
+ sha_mac_arm64 = "c8af68f904367938bac255f5e64ed271021b289bb135dc77ab3b58b87e1ea5b2",
522
+ sha_win = "3ec21ca18b56f7d3953da2e0d468154fcaaf30b5ac663d9ad00c41540923a099",
523
+ ),
524
+ "3.1.39": struct(
525
+ hash = "1b56b171b627af0841cf8d4d8c0160c6cb6d855f",
526
+ sha_linux = "7ec6e15a2da2701243f89af7744403ee011211e59e4f0a6fd8ced544e72e917d",
527
+ sha_mac = "dad7d270207aaffb8b8ef584cf0579bbad144879ea6f00ec9a8080adf22130dc",
528
+ sha_mac_arm64 = "c5e474ca661348d0339c785e25ad81845d49dab19d5e3e84eef2393e623e0bac",
529
+ sha_win = "a04f898b9d54dd2dc95fb697a92a1b65d07102a4cc36a02dea44c448fad83472",
530
+ ),
531
+ "3.1.38": struct(
532
+ hash = "03ecb526947f6a3702a0d083083799fe410d3893",
533
+ sha_linux = "e2812859fa32b6019f688dd66f2fa48efbfb5594da9a43b876fd4fe4ca474c20",
534
+ sha_mac = "a88c4b9eeb5dedb0d9af3b6b84bd45c486de567fbeba1675edb2d7d196e0013b",
535
+ sha_mac_arm64 = "0e5d1519ccc1163c13ee93d85f70ef6a520464f59ca3795c47cc7c44ab0f5f49",
536
+ sha_win = "bcdea031961a4f3c23008d53e083770d19751dd2a2aa71cacdea8462d09548be",
537
+ ),
538
+ "3.1.37": struct(
539
+ hash = "7c905cfc1ca6699f6ccb288ae174902cfbdcf0a2",
540
+ sha_linux = "9ff44ef69d3f389adcacbb9b95331da72cffdf6e9431c8beb6ebf7aedb77499c",
541
+ sha_mac = "accfe90322b6449933c3d8e1346024e2e2e3bef7b101942294f995b2c8e1b60f",
542
+ sha_mac_arm64 = "a0461e234c08bd7ddd7a86b49b52ccc853ebe4ce0fb5b4314e9de0193c32514a",
543
+ sha_win = "e026ea2570e747d0640829c62abddcdc14a4acffe31180110971750b80042d7a",
544
+ ),
545
+ "3.1.36": struct(
546
+ hash = "adedc0750c4a89b65bee866edab24298cb8d6677",
547
+ sha_linux = "55d3cc557a83716f7a7fe121a07dbd59ed4b5d425051e22c902570e3e0ea6c4c",
548
+ sha_mac = "6643fcef0f928cd730b894f0c2c3343eeef870576e43e56428a7a8247c7bc921",
549
+ sha_mac_arm64 = "2e8d9103cd0ba7a2b143927196a630b091b981006c908d7d36995a210a04d73b",
550
+ sha_win = "69a197f6fc153d9f98ced539564683cb13ff0ef144d3d4fbddf643e33b5f860c",
551
+ ),
552
+ "3.1.35": struct(
553
+ hash = "671550b5bdceee7bdb21493714f9a815aa5149a9",
554
+ sha_linux = "9d4b5dcb719d39e59b646ecf7c409db20c5cb6b9575f5362ffb49a9e66290819",
555
+ sha_mac = "01ea06c1f4a6c980bfdc812f9599a8ef424a975c89d5c288c9e6f2fa5e5ef5ad",
556
+ sha_mac_arm64 = "f6480ee21c80fe062e0f9d8555f8bdef621601634b9bd1e5ad07b90777ff5e4b",
557
+ sha_win = "cd26088365433ce1263a11898406c2f9284e55c2c7f23b26170c2a172c52f0b1",
558
+ ),
559
+ "3.1.34": struct(
560
+ hash = "2fdd6b9e5b67d5b62f84d0501a876513ff118ef1",
561
+ sha_linux = "dd3713f077072dcdb811f934d6685187daa47c424039e31cba83633c8d1681b1",
562
+ sha_mac = "3824609ee9b7c9919e29b19775d495a16778adb981867901f4bc503fe2f65d7d",
563
+ sha_mac_arm64 = "72728637171df46e7cd22f90537dd6faf1d4809ed1befc504ff96768c82f0e0f",
564
+ sha_win = "7538d1a1e0d586bd0723f595557551b05d724a5803132949a6fafb8b056af995",
565
+ ),
566
+ "3.1.33": struct(
567
+ hash = "49b960bd03b3a9da478a08541ce6eafe792a58a8",
568
+ sha_linux = "eab02b3f4b7c076974452ba602f908a36adf597afa15b16095b441f191ede1bb",
569
+ sha_linux_arm64 = "5e15af6affcf37c9ce6c304b4aeccb87a2758e1ef029dbc996f9d77d7444378e",
570
+ sha_mac = "b8dad3cddb19c1daf9dae99020bd17b903ae9649cfc58e433ea4951e758804de",
571
+ sha_mac_arm64 = "fbf03d06c7503f091191e440b8ea577d65b3261167cdb47359d053f12888974b",
572
+ sha_win = "031f951668eaeea39bd9363abb3f514efc3401506374984fa9b1d7ba3130a62f",
573
+ ),
574
+ "3.1.32": struct(
575
+ hash = "29ad1037cd6b99e5d8a1bd75bc188c1e9a6fda8d",
576
+ sha_linux = "25fa252e9fc674d1bcef35b3a10dd85024aa93c843b8067f8d917e5151968ffc",
577
+ sha_mac = "7881714e7738eb183b5a421bb2b907e96359e791ad0a622be6e7f5690a16b9d6",
578
+ sha_mac_arm64 = "04eede7352aca4b6fc1c111a8b31d00e8aa40547c3cd062ff9be4ffe1ed98d95",
579
+ sha_win = "22c3429eb1e6051bda46e9c02c14eca1ae3749ba8c411fbd5a3b51e3b9623161",
580
+ ),
581
+ "3.1.31": struct(
582
+ hash = "1eec24930cb2f56f6d9cd10ffcb031e27ea4157a",
583
+ sha_linux = "5952523c0c58cfc7c8839c1d3fe42ff34af5d8721231306ee432063dfacf96ca",
584
+ sha_mac = "13482cf3cb29f423f2037b9dc2b9e4ff72d0a49fcd471bbaa9b76d9f86f31d82",
585
+ sha_mac_arm64 = "654a35af16be5eeb2082e68fb36190fe76de28fa2da75ac0d2197482a203f39a",
586
+ sha_win = "493c29f5a505ccd9687036ee4c580d190b1c32b286be0e751a78e68997cec8b2",
587
+ ),
588
+ "3.1.30": struct(
589
+ hash = "dc1fdcfd3f5b9d29cb1ebdf15e6e845bef9b0cc1",
590
+ sha_linux = "151d7afdfb728e1e55ed1d100e4d3fbd20925fd65f3c3b9e093061a2c89dcac7",
591
+ sha_mac = "f0cdbc676c58bce7a65572418fb1521665ed522d7d05ae90f0764b77801982bb",
592
+ sha_mac_arm64 = "fca4eaf8ff528bb9308e5e8d0cf2709713b99fc19d55c6578a6c8f3e66182f55",
593
+ sha_win = "3001101622d98b2af3e5209154f60bbe341d32f6178307c6c723e84b5fe08bdc",
594
+ ),
595
+ "3.1.29": struct(
596
+ hash = "d949f1b99a477d4b0b54d95413df3688afa69d0a",
597
+ sha_linux = "d3f274446924c27082603170fab60ba78a2fb51360e5578fab4d9b5adab0fa9a",
598
+ sha_mac = "ed224c296efd22437f298f0fe0852613b0b1d48810b1b6d87b6b7e6beb589fe2",
599
+ sha_mac_arm64 = "af9bb86a7996bbbb36820e93dbc7f537ac23070e8730439b1e49792c4fc008e9",
600
+ sha_win = "6203f80273565a2ee6734bd33ad7bc6940ef709cbd593e70d6489e96c02ced25",
601
+ ),
602
+ "3.1.28": struct(
603
+ hash = "30b9e46ddcea66e91530559379089002d8b692cf",
604
+ sha_linux = "c23426d8b6d94cea702542c39e3bcef9439425dd4bd03bcc172e291dbbe5ed0d",
605
+ sha_mac = "4cfb918fe3233a2b31e5734e85b2a365e634f4e8a83c4390e8595cb98ae6bd8c",
606
+ sha_mac_arm64 = "a47f1f09bc7bbd4952cf54445d4fbfae53623ecbfecee0506a637665c7b4ea4c",
607
+ sha_win = "4388d230871d5b1e15c2fd0db21a792ab2836f23d860475fe183c03c5db75c8c",
608
+ ),
609
+ "3.1.27": struct(
610
+ hash = "48ce0b44015d0182fc8c27aa9fbc0a4474b55982",
611
+ sha_linux = "4dc872260c8f42a8e20c8612b2255adbd466fec54cfbe37b46eca4eb34a2b03f",
612
+ sha_mac = "40c3326147b162b8357efdc72476faaa6686338cff3e176680e361c2511453e8",
613
+ sha_mac_arm64 = "7b87610de966b84353c8c1ded8e12c034b5b913c093210ebd3b26320e2ac2990",
614
+ sha_win = "39bbfcb09ba7feb214518a67b1ff6d38bae065b416b4483834e4fdaef2316f8c",
615
+ ),
616
+ "3.1.26": struct(
617
+ hash = "4f68bb2a505c727bcf58195cf4da20592a6e92c8",
618
+ sha_linux = "82d24d5619c814ae99ef7243de428600c02e96dfc49c36e44753b1fce626766e",
619
+ sha_mac = "7b645979d8901f3153507561bbec10ecfeb197dca5914228715a74b760cf7eec",
620
+ sha_mac_arm64 = "d9c647fd70588bae71303a6c923df8a44ffe63e168b375d35bf6ceda21258fa1",
621
+ sha_win = "1ad49d69634ce2d1fe04614c18060a903c102e1dbc9dfdef3a03e52c189b4c92",
622
+ ),
623
+ "3.1.25": struct(
624
+ hash = "ff6babb041d0f31575cc16d15ef82c6222ca99b8",
625
+ sha_linux = "c5ae6b4525845ea36bde89cbf4e1d03de87a2658862d76c6a53bbf8de7c67ff5",
626
+ sha_mac = "d2581aaa7207f0d9dd9949247f0706bda8561e805d67aec166ed4f3b39c3a3fa",
627
+ sha_mac_arm64 = "dbcb76036a09248c2a839872c27b87b6d4ccc81e57add4e2a6f5e560a2c530fc",
628
+ sha_win = "3a86d98d934456a74ed06388c1487d95a0d5a3f31777636453f22e61d57d7fb1",
629
+ ),
630
+ "3.1.24": struct(
631
+ hash = "54217a0950bb1dafe8808cc6207d378e323f9d74",
632
+ sha_linux = "20e8e5bd745e3ad69c03bb877091d2fbb0c7db1eab309de8f185e9821aea40f4",
633
+ sha_mac = "cfb897a980dd51fceb02ff143ad0fd8e5d299db640c5646d1547d522194545f2",
634
+ sha_mac_arm64 = "e87b0727343051312f82a6653cad4682a518dd9cb6575844c0cd6505d520fab6",
635
+ sha_win = "a0ea07f9014a912f13176fdbbc1ee7ab08104d45e7ca7e1c237505579b63d530",
636
+ ),
637
+ "3.1.23": struct(
638
+ hash = "bfd5e63a44ba4c8568cd8ac87c27b35e40732bf4",
639
+ sha_linux = "3b8d9e163d6afc8569deca0ba1d4042f80da7a31e23cee006c3faa9cbf2fbc31",
640
+ sha_mac = "fd1c79475e47fd2f06ee9ba189e68309e443c2d3c56fd28163d1cd6f77047075",
641
+ sha_mac_arm64 = "66e57ee0962ec31056674b5681f91bd62f85b0bf1238a8d5b160660c0bf47292",
642
+ sha_win = "7c30b281abcc0ffb9e7575197f1ac0598a94c6cec36547b81554a97b792a9e75",
643
+ ),
644
+ "3.1.22": struct(
645
+ hash = "990cee04a21caafc75955d736fb45791a7f2aeee",
646
+ sha_linux = "a310ed9f16c97a91c72564ca5f85c412cb99429d8001825663fda1b28c00346e",
647
+ sha_mac = "b19afaf414178781c4c91ee711ec4d9063b9736719e45ca2e8b45c2258df16be",
648
+ sha_mac_arm64 = "7c8212abf77f0307b6ff848bf9c6212f870506df6d074349f76401f30f9fcefe",
649
+ sha_win = "2c0cfe267d47f390d7e35a83545b1d5043e4a7fb77b838ee19b0fce65035f55d",
650
+ ),
651
+ "3.1.21": struct(
652
+ hash = "a16a8bca2466eb144f7c93fa899c0272c8815dc3",
653
+ sha_linux = "7045ddb3b37a2cc63cb1cf976019a6a3b7f8dbdc71254db0eee5b0452f94e9e7",
654
+ sha_linux_arm64 = "2852c8b108ec748d52d31dab3f4854bc6022df008019daff1c7e31ac00363b3f",
655
+ sha_mac = "2a8d3d3ad721fec81ca1a4a581e4183b6e732e9905beb874531851846a05a367",
656
+ sha_mac_arm64 = "cf788a7bdc38bb40d01f94b2d46acafb0e2f02d8ee3b3d69541c114e467ee37f",
657
+ sha_win = "81518bba13f41717ffe6990b6d4a5af635d0c9d0f71a8d3bc0980cd0bc8f5f66",
658
+ ),
659
+ "3.1.20": struct(
660
+ hash = "d92c8639f406582d70a5dde27855f74ecf602f45",
661
+ sha_linux = "3b606d133489aac8cdfff4f99ff14a35563b1fafe658aa23f83694f77ed9467a",
662
+ sha_mac = "cc9ea1696bdb3f28778bac1cf4587a34e90830e1c64976cd205fd73e77566cd8",
663
+ sha_mac_arm64 = "b976410bf4fa1af9896be1c736634bfb56b2ef0f3386cd3cf39616ce47445cc0",
664
+ sha_win = "1e6806ee240ab838ae7eee618c57efc793195c62e4d167136507efcfa66d6c6d",
665
+ ),
666
+ "3.1.19": struct(
667
+ hash = "4c3772879a04140298c3abde90962d5567b5e2fc",
668
+ sha_linux = "18d4a5bb93371fe1d4586db9804f673fff0c510d98713ec25b6bda1a8457230d",
669
+ sha_mac = "6adb721340cb93b7a3efafbfd1d283842a39bb6f1390630b0806c8af26b66840",
670
+ sha_mac_arm64 = "429c9e3a79d32380f3dfee52b1001963edaa2e3035fce9f52ca87b08e1a2f26e",
671
+ sha_win = "0368eefb28f42799ce897020d0d10a4a27e1b69b650575d94deb268e402a3632",
672
+ ),
673
+ "3.1.18": struct(
674
+ hash = "49d45744895c7d7e28acd94a385d7ee361653b4a",
675
+ sha_linux = "6ef373c4ff3cdf33d7beecea47d4eaee7795693f8ca9469f33785cb9c54f40bb",
676
+ sha_mac = "ad0e645abdb6d3f0b6c6ad0ee70761010a712949c9b0b193aefc78ecbc3f1710",
677
+ sha_mac_arm64 = "68d0a1ec3e83e0415e24133c59e64206b83686712434c8c2e6792547cf654b1c",
678
+ sha_win = "96829a228f7c08fabd37833f7361614785aa39aa865beef06890ee8ede58dc66",
679
+ ),
680
+ "3.1.17": struct(
681
+ hash = "d27fef2070c86a218965da8b8b5df8b4425aa3bb",
682
+ sha_linux = "562b3ba75ce77a917317bc697febb38194e85cfe07f4fec308c3b29c621f8f13",
683
+ sha_mac = "8a2bee8ea434049e40663a6d78d1c3584e5c32196fd85d6a10f3192d2e3aba4e",
684
+ sha_mac_arm64 = "5f60d3f351d06d862e853a294642d24243d6cb197e34c2f2602d80555c2eb014",
685
+ sha_win = "90b2ade825e07bb05831090dd64b5f5b01a4169a84a3ddec85fcd60be3b246a5",
686
+ ),
687
+ "3.1.16": struct(
688
+ hash = "fb1baf00423818052359cf9126e94bc71c39feb5",
689
+ sha_linux = "bdce7e58833069a98d7e0b4fd9d6fea7394770ec10339cc95ed9fe52ba39f3a7",
690
+ sha_mac = "d05f4e997324d7f7d8561436677687d296893d6414f53930184fab272e4c6158",
691
+ sha_mac_arm64 = "36ab8da30698558a567c5c1c0e130b59f08cf4b29c9c5242f4ea60b449ecff17",
692
+ sha_win = "e1324c22c914ab7f62fe6d38a550de25b2232a723c80393fa8884a260c07766d",
693
+ ),
694
+ "3.1.15": struct(
695
+ hash = "568a46a9fb7e1f1686a6f7216b3dc976f28d2a79",
696
+ sha_linux = "737db513047d12e95a12f4fbe05314f3af79ac955d1ea43fc83626337e307edc",
697
+ sha_mac = "f8993371a1ff713203023f0283054a31df5342ca287debc4e16d04d97e069aee",
698
+ sha_mac_arm64 = "c61a8efa8543a6c44e394a0685e7d4facb4c7dbb210c4c32d311b0002c4dec99",
699
+ sha_win = "235592467a0be6a537e03fb587aaee230aa2c889f2785cb9754eb44bfbf747ed",
700
+ ),
701
+ "3.1.14": struct(
702
+ hash = "ade9d780ff17c88d81aa13860361743e3c1e1396",
703
+ sha_linux = "e2c43068fb1985592db42183a13f85bbd9518b3747746e0003d70c7d770a0b2f",
704
+ sha_mac = "567e9548f3fa7c1aa717821af4aaa7849a0f7217cb55eb7f66a06c898808fd96",
705
+ sha_mac_arm64 = "df8319aba8bc0d0c40ebec3c8f45e507c2a51a57df24826d4cab6f6cd75017ac",
706
+ sha_win = "6bfec6bf6a01e483a57e91f7223340a425f6ff711cbd32a08ed78002810d7882",
707
+ ),
708
+ "3.1.13": struct(
709
+ hash = "bc44364b561cfde15c243a54e3b96ea12d7ea284",
710
+ sha_linux = "290f04300465cbb7c8e920f9986128b3f287b14b93627b0c6d069d534860c1b4",
711
+ sha_mac = "72b209a3e5800be155cf5b29bdaceb18aefceeba68f35ac719a483bd27d85705",
712
+ sha_mac_arm64 = "2bf90ed73454f58b810e09a776a34ddf7395f9ee45580f3a8fea53f74ba7ede2",
713
+ sha_win = "07fd730289c26f72ae4037fd25f608f6b9d36f1950677229b6c7d392957db3d2",
714
+ ),
715
+ "3.1.12": struct(
716
+ hash = "a8c3b314d61e2bb98581d522f858132b2fc21488",
717
+ sha_linux = "ac8ae46b2fe2fbef07077cdeefc8288d2a73e3189958f32b36f2d17d868275d0",
718
+ sha_mac = "c33afddd7c8f7a5293cb427ef26eb65f51fa3121d0577568824174227aa37ef3",
719
+ sha_mac_arm64 = "253feff779385d2499764cd988175446e21db8cbb9952746e96969c2a763924c",
720
+ sha_win = "04015fb6a1b4ad4d7c16587a7eeaabf19c5b35097f3e28efa029c0c67547067c",
721
+ ),
722
+ "3.1.11": struct(
723
+ hash = "8c3a799341c01148692c52fda73bbba5e89c5727",
724
+ sha_linux = "ba52cfd784362530866c9d554ddc62cfa3f0690f44007c0b3b36e189bb579d5e",
725
+ sha_mac = "c46548425e0bf4acd3c4275aff6a463c90ff1faf283ae7f5237d8c17bf84d779",
726
+ sha_mac_arm64 = "c5ae40c468955ed02b86c54061278d2b4075b1230612bae5910f836aa9c200b3",
727
+ sha_win = "74481a1998236fd9d296f367584934d5ab8bbf174446ceb647f714031671de98",
728
+ ),
729
+ "3.1.10": struct(
730
+ hash = "8bd05c7221b4ce34d4bedec40b672d94e681a765",
731
+ sha_linux = "f5a937383b5c9fa15071a31d679a2ddd5c03bc8952cbbd5bfbf7c0a86c2dae5a",
732
+ sha_mac = "e73491f2787cbda75e718c3947916b57259164eddd9b2db16b9c876d3deb16a9",
733
+ sha_mac_arm64 = "d7485ce3b13f183484af5163d7bec79ece9a1fdc5845f8152e36270e6f90cfd9",
734
+ sha_win = "dd75061405bc902ecd983bd3e4cfd6931a866e1c9de602c4458280cbeb271720",
735
+ ),
736
+ "3.1.9": struct(
737
+ hash = "edabe25af34554d19c046078f853999b074259ca",
738
+ sha_linux = "89fa75c981e47ad19942b8236d2604b2666dfd516a08626aaa1bfb0d657c87bf",
739
+ sha_mac = "6c7f59dd84d1484f1dfa041d71cc79fc97db8d15834b6220e5868bd9bd373a24",
740
+ sha_mac_arm64 = "13a258de0daaa3c09a53e21a67414cbf5fa5706f955767fe791a059ed5eb90bf",
741
+ sha_win = "0857b03919b948558f9a57d15cf2b220852cc070359c386da0e6e4831c7ac5e0",
742
+ ),
743
+ "3.1.8": struct(
744
+ hash = "8c9e0a76ebed2c5e88a718d43e8b62452def3771",
745
+ sha_linux = "6b170777eb523e62972ad458e533b1853cd0c4e02f6f2cf4cd68e109499ccd9b",
746
+ sha_mac = "ede01fe160c3b8443f53f94dbad530e0e7e8197a1b874c7bb9038b187279080c",
747
+ sha_mac_arm64 = "9ecc8678f948875e7f64defeababc0320f98e103547f395c390c01d76e5a1d64",
748
+ sha_win = "039d27d4ae43b50d0858dbc4dcf412f572351e98e1056d7fdcdf2aab1740557e",
749
+ ),
750
+ "3.1.7": struct(
751
+ hash = "d0e637fe48197587d981f79e8114757731d0c2a9",
752
+ sha_linux = "d941738a3c755d6d530bab66d38325515b9dbaa588d2db2b8a63b2a8a1961e52",
753
+ sha_mac = "597aacdb25d422094427014d3a97e8b91ec80df2255a66e0986414bf71aaf37d",
754
+ sha_mac_arm64 = "a0b2db0269c55e854d1007a59f95b8e5f14d32309e76f985ea9afe481b2bd6e6",
755
+ sha_win = "cb44339db27b694862efb37539d41eaff7253c93c0882cf7d9aaf4afeaa82912",
756
+ ),
757
+ "3.1.6": struct(
758
+ hash = "8791c3e936141cbc2dd72d76290ea9b2726d39f3",
759
+ sha_linux = "f43dfe707dff18fa7a08dbfe2fa3f8d46afb65ccba9bbe554465d83d5d80e388",
760
+ sha_mac = "13a01080ff042560b9a9b1b2c9fc5f8c154710bc41db8bbd907a9e53c286afd0",
761
+ sha_mac_arm64 = "7ae97e85593b037c345b539e7f8b8952b82c001be982219060c83f0834bb6827",
762
+ sha_win = "e7005c0a5439e532cb64f34ba90405792288a1ed8845cdafcedd3de5af6fd3f2",
763
+ ),
764
+ "3.1.5": struct(
765
+ hash = "2dee36c7163f7394ab9341854ef5281501dd97d0",
766
+ sha_linux = "6641703b7da1805aa5a8488d231ae7fedfe27f1a5a33e7d05a2ee5902ab84180",
767
+ sha_mac = "9dba57f09702a7eed53f3f71cdd8a4ed1202ca5a5f4449249c2d98a285b26f75",
768
+ sha_mac_arm64 = "0093b4d47c9eb9c8bab5b3048c68855255b5e5a8bfd78f4183424009489327e6",
769
+ sha_win = "849edc42b494f670df4763dbc8ebbb5464ac28787482668c3f6e27588a77cb3a",
770
+ ),
771
+ "3.1.4": struct(
772
+ hash = "39e60dda6945cfcd6487725bdb1361ae7975173f",
773
+ sha_linux = "4a57c0d60eeb4e021de61c8497f0b595a0a9db0235f1640a528de752409f4fcf",
774
+ sha_mac = "f28a9a4f42f67de1d5c4d8a288f29e5082bbf4fcb172e0c6e248695163372478",
775
+ sha_mac_arm64 = "be35043edad7a7022f7b174e8efc90e2db54ba4fd71288760bea4db082835f56",
776
+ sha_win = "d97ff247bdfc7e839610cbcd87d30a65018f964d183d5b852b6021d43c5d199a",
777
+ ),
778
+ "3.1.3": struct(
779
+ hash = "2ddc66235392b37e5b33477fd86cbe01a14b8aa2",
780
+ sha_linux = "8b840819eb88f9178c11bad25859ce448a0559e485823a863a6add21380636ca",
781
+ sha_mac = "0cb3f9bfbcc744233eae9d20036155738409405eacf8a3d4f9beefc5919d809a",
782
+ sha_mac_arm64 = "ee2772f380419df17d154e00388a16bcddc78c7af035c16a2ee534d6ecf099aa",
783
+ sha_win = "c0549e1dbaa581ae66934c38beebd4250cd450cc2778e9a602cd9431bc81bc37",
784
+ ),
785
+ "3.1.2": struct(
786
+ hash = "6626e25d6d866cf283147ca68d54ac9326fe399f",
787
+ sha_linux = "4fb53364a2ba1de8978445aa26b2204bfd215b41da5d7df04f231040b197010a",
788
+ sha_mac = "a8e347accb1ff402d96a128912ac8cda1731611c9f89095fee0ad39a6a18bbc3",
789
+ sha_mac_arm64 = "4374f5c852d0403b0a3b0e9dc8a3856a340e9d82ecf0f20aa8b36c6179d31fc8",
790
+ sha_win = "e96f6ab8252fefa42f461676311d4c4e2d96fdc2e876ece07d9d7a49ef31aef0",
791
+ ),
792
+ "3.1.1": struct(
793
+ hash = "5ee64de9809592480da01372880ea11debd6c740",
794
+ sha_linux = "ba94c5ecabacbedc89665a742c37c4c132c739aea46aa66fd744cb72b260c870",
795
+ sha_mac = "8b5f8cec55af0e6816a08d8d1e8b873f96d0e0504fdd6e8deb2fc024957d1aa7",
796
+ sha_win = "6cbe976aff6155cf1c48707f0520b5aa6a7770860e9b1964bfca3e5923ce7225",
797
+ ),
798
+ "3.1.0": struct(
799
+ hash = "562e3a0af169e6dea5e6dbecac2255d67c2c8b94",
800
+ sha_linux = "0714344e32e244e6d44d9ea75937633ab1338e417a232fb66d6dcd7d4b704e8c",
801
+ sha_mac = "f6c1cad729ed799e1df09eacf5aa80cce9861d69ec6d9581c17e4ba8d9b064ce",
802
+ sha_win = "756c41cbcab4ae6077cca30834d16151392b8c19ab186c13d42d7d05d6d727cc",
803
+ ),
804
+ "3.0.1": struct(
805
+ hash = "91b7a67a486d2430e73423a38d950d8a550826ed",
806
+ sha_linux = "25fd430268596229c4ac38e188d7c2b31f75c2ec8172b1351d763e37c830c6af",
807
+ sha_mac = "52ec2204115b727cc4de38b5eeae147eead12b299b98e5a88653d12958cae4d4",
808
+ sha_win = "0e072736b471c9a07cdf534ba4da46b3b6545b63c8a6cbb0ef7d544251e15092",
809
+ ),
810
+ "3.0.0": struct(
811
+ hash = "7fbe748230f2ce99abbf975d9ad997699efb3153",
812
+ sha_linux = "10646b64daea15354f14f89f7e79937f420b77f31bda7c4b174de2474835950f",
813
+ sha_mac = "ebb17bc91c6a72ca06d17337d27aa1a2be4c9af4c68644c221712123f663b8ab",
814
+ sha_win = "0d4f2ff5d88a8eef5ed769ee4ffc5d5574143911d2e0079325cdc5206c9e9bb1",
815
+ ),
816
+ "2.0.34": struct(
817
+ hash = "d8fc1b92dbc0ce8d740a7adb937c5137ba4755e0",
818
+ sha_linux = "a6304e3a52c172eb178c6f9817d74aa3ee411e97ef00bcae0884377799c49954",
819
+ sha_mac = "975ae11000100362baf19d161fec04d82e1f7c9fb7d43c43864ddd65a47f1780",
820
+ sha_win = "8167a44bb895a0fdc153836bed91bf387be57f2dc1b8f103bf70e68923b61d39",
821
+ ),
822
+ "2.0.33": struct(
823
+ hash = "cef8850d57278271766fb2163eebcb07354018e7",
824
+ sha_linux = "958a0f4b1533e877c1a5ed3c13cb8baabc80e791d45858c2c94ac62325ada953",
825
+ sha_mac = "8ecb248653d44c3748e23c089cb9f0e3d4eee7cda13fdec27ec0113b896e34c4",
826
+ sha_mac_arm64 = "1ec6f3d7afa5e10f3af996e26d9c3a66f02ae49e48e512a4b5d6b7165c61290f",
827
+ sha_win = "6b6b2831f8b338488f787b4a8c34700277bf3988358dbb54426f017155603ac9",
828
+ ),
829
+ "2.0.32": struct(
830
+ hash = "74646397e3c5010824ad60d1de86c6bcbe334dff",
831
+ sha_linux = "236b3954e71d3bb30d347c655b9f47f2a091aa2e61046e1912c8da90152f4ca1",
832
+ sha_mac = "6a03267574534948e3b041e5d3e31bd757751ef17912eb6e90b96a47da03afb6",
833
+ sha_win = "2f8fbf0db097d67d0c364946faceec27c569c5c2d7b22068eef8db55645aba36",
834
+ ),
835
+ "2.0.31": struct(
836
+ hash = "597724ca3f6cd6e84bea73f1f519a3953b5c273d",
837
+ sha_linux = "ef70c7733aa0df41cb4c812f5a89bf6b2ed13ca8aa252872396c0be271156d9e",
838
+ sha_mac = "77e57c3e98758488ef676f8f58a85faa0bd65a1d326a91771ad83d7cb0e373ca",
839
+ sha_win = "541605b740afccd08a39f5ae815978f699f350d621a1b2dfba0763970b56aee4",
840
+ ),
841
+ "2.0.30": struct(
842
+ hash = "c69458f1bbf3ef5b8da4e934de210659cc9bca04",
843
+ sha_linux = "ee1c8270096a728966ae38af548047d1f64c18318e06ba75952e657136f02537",
844
+ sha_mac = "574a5819308eba6c8be6a780e26dff415a0e7178d3f44162dd8dca87eb40d4a7",
845
+ sha_win = "242d244f4f5f5af08e6e6ac9c143aebf1b7bb2a23fd2992350731e59acfee07c",
846
+ ),
847
+ "2.0.29": struct(
848
+ hash = "c2369dc425725fff86ba90a9007a4603ddf7941b",
849
+ sha_linux = "7df4a8f3e25820becadfa7f1fe0d78e764102ec3ee50c474ca1634ed90d48890",
850
+ sha_mac = "d998521ba95882a27792f0113ea2c972fbb891c240649f4c994f0260c0e1a213",
851
+ sha_win = "c64aa3f2af6503f6711b2322986a45784e00d7c7fe13ec3f5c4f740472d065a0",
852
+ ),
853
+ "2.0.28": struct(
854
+ hash = "866055ea639d64dfedc625d28ec981e47ce37168",
855
+ sha_linux = "7dca7704eb14e367bb67e9abc9eaf59e75f59b74e32422e04556de10897a9a86",
856
+ sha_mac = "370f76493e3805e2538290b698a381f04b6d78a77771e48fc0099cf89dad985f",
857
+ sha_win = "e913c50ea5f196d36971f7cf5b1cf9a9ca27ce0818aba56be3a66e31e95c0e5b",
858
+ ),
859
+ "2.0.27": struct(
860
+ hash = "1ac46e3b84955231ab4a4f4cbe0c7ac28c86b8cc",
861
+ sha_linux = "3e124e278de168cf22e03b93b2f14a65a86777e428cdaab7e5e1c2289eb41605",
862
+ sha_mac = "388262b9e1042ef9a3a1945d5a23dcd634c8042a225e8fdf80bcc2c1cb7e05cc",
863
+ sha_win = "762276a332432e717afb988310d21ae10e36facc1e05bfd77042a364fb43cc3c",
864
+ ),
865
+ "2.0.26": struct(
866
+ hash = "823d37b15d1ab61bc9ac0665ceef6951d3703842",
867
+ sha_linux = "996e16d368a99dd4dd12126acbcb8bea9a607b5257cc7b747c4afc2f036fd8cf",
868
+ sha_mac = "8b2d7e84cc449531e88034beb31da89a0b61ccaeaa1584ffb6da7842c6348fdc",
869
+ sha_win = "095e772764d7f8c0f8228bda4b8500ae43aac2303567da5cdc9f8623f70a5743",
870
+ ),
871
+ "2.0.25": struct(
872
+ hash = "f6f001b08fbb67935379cf13d17fd9bfdbaff791",
873
+ sha_linux = "06d8e2f3d4f4b35a57de9c15e62a559c941cfba1dd7ec02353d815904d912c3b",
874
+ sha_mac = "6541bf3a648aae7df84de424ff392dd1513ab5450203c84f72a6a03e321a301b",
875
+ sha_win = "267fbfa809ec0eb911c1962b1b9768675cb82228e694a5f9ef570232ee71db76",
876
+ ),
877
+ "2.0.24": struct(
878
+ hash = "6ab7fc5622a67e6111d07c4ba61c8d3c8fc33ed2",
879
+ sha_linux = "e5daa0e87f3afd2197e7975297cb0cd4c245edccb964ca5f1f32ee7d985bf440",
880
+ sha_mac = "e4b7f2a7b71d6ac4610ee7b14743570e0dfba3668dc6b4f984cbe7a135888527",
881
+ sha_win = "db2aad422a3ca2295be6101b0151eeee55dcea29ba1f31b4594c02ba46591cbe",
882
+ ),
883
+ "2.0.23": struct(
884
+ hash = "77b065ace39e6ab21446e13f92897f956c80476a",
885
+ sha_linux = "7713a9a5572d839aea9eaa84a7c4779d11c6c8818ee64a0f443b62081fae6d47",
886
+ sha_mac = "b793087462d581e25c8c267fca9d30519619e3272480862a56cc316a32c7afab",
887
+ sha_win = "b8885cbb41a39e4734861462e05ee58c7ff7562016a842bcee2603f229940e8b",
888
+ ),
889
+ "2.0.22": struct(
890
+ hash = "6465a9acb820207acf7da44661a7de52d0a1ae3c",
891
+ sha_linux = "c079781124e763c53c9fc73781fcee40296ce3314276836bc694f07bd331a859",
892
+ sha_mac = "ab95574dfc685b0300e37bea36aba413045bbfa2ab06b93eceb881670489eec1",
893
+ sha_win = "ba142e7e380596cba763e3a414de6511bcb86de48e4b48cf393b1ea449a24aaa",
894
+ ),
895
+ "2.0.21": struct(
896
+ hash = "72f4ec97fbc7ec16c15ae68a75b0a257b2835160",
897
+ sha_linux = "741264f33f96ba4b785ed0b133861ebdfefbaefab76ddcfe7bde6522829d6f70",
898
+ sha_mac = "b07c0d65ee7e2799170c6f3b2aacebfe070c2e4975088bcd1b3a4140fecd8418",
899
+ sha_win = "dc3cbf47aa4be52a92526f1790a013734ecbd407f7f36286ed0283c96355999a",
900
+ ),
901
+ "2.0.20": struct(
902
+ hash = "e0c15cd14170f407a9eb27fcbad22931dc67feb7",
903
+ sha_linux = "a196504fd1095836ca3961208338ff9e292be7729ea529bc19800aa7c966d34a",
904
+ sha_mac = "6cdbf17ed61486b38ea79d3f31d74483e7388d1e7468518dccba3f24e0ddd4c4",
905
+ sha_win = "4d22a32c219dbe18c55b635d014b9eaf7da60536171b7af37d9a8099fd33794b",
906
+ ),
907
+ "2.0.19": struct(
908
+ hash = "9b9ff2dabfb4a7fbacbc004c0bead12a60f9d05c",
909
+ sha_linux = "bd7c2a38ac88d219a1ab5003ddbf8fdc66a6ba55bc69f99077346edf2753b4ea",
910
+ sha_mac = "6cc44029c9052855a55938eb6496b5659da4b1ce9cb34502b740af5993a94f93",
911
+ sha_win = "a1fa8b1c387b9307f9b87c43dc83c0ff1bc04b9f29fbe4f39aff2dd946ca4b70",
912
+ ),
913
+ "2.0.18": struct(
914
+ hash = "c2ac7520fad29a7937ed60ab6a95b08eb374c7ba",
915
+ sha_linux = "e9f777de592f606b10104b2efe5179a7a8f44e3a9dffa1e3aaf73e05eb8893d7",
916
+ sha_mac = "86b1dd62e424e3788bf132292a694a25ca9b0875d06f50d0f5d424593697452c",
917
+ sha_win = "49ce07bda6be070251db44a08fcc05cae21ffdbd7522423a0c79bde635e87e28",
918
+ ),
919
+ "2.0.17": struct(
920
+ hash = "f5c45e60392b82f603e3a8039c62db294fab02d2",
921
+ sha_linux = "b40a4874057e4cace600f8ee9787dcbe236e3dc5b2fff5c2ecb0e867e426f99c",
922
+ sha_mac = "081f61abf7d5ac0ec31aaffc5550013d4093ea4ea39520b7a32b7448d2a6ee70",
923
+ sha_win = "45d06e597e6a1185a76200bd0481495e7298800a4805045d9cdbcce6311c91b2",
924
+ ),
925
+ "2.0.16": struct(
926
+ hash = "80d9674f2fafa6b9346d735c42d5c52b8cc8aa8e",
927
+ sha_linux = "e527638b224d9a30dc7e5fa4b9bd2eb2ab76ad306739ba8cacf5a5e333933a2a",
928
+ sha_mac = "061020eb0e3ee0611dc5a0008ccc7778168a4f838d49ca41c0aad8c52c1a01c9",
929
+ sha_win = "99364ed0388f928e0594f790662bf3a30c2894b0eff81797e1b64f62128561cb",
930
+ ),
931
+ "2.0.15": struct(
932
+ hash = "89202930a98fe7f9ed59b574469a9471b0bda7dd",
933
+ sha_linux = "7ff49fc63adf29970f6e7af1df445d7f554bdbbb2606db1cb5d3567ce69df1db",
934
+ sha_mac = "e35cced1514ad0da40584f8dd6f76aabf847ce0fa82c6dc8dd9442fb74ed6d0d",
935
+ sha_win = "31d5f8107c87833cea57edc57613bba4b36b16152772f744c5ad204594b4e666",
936
+ ),
937
+ "2.0.14": struct(
938
+ hash = "fc5562126762ab26c4757147a3b4c24e85a7289e",
939
+ sha_linux = "e466cd47ddd4bf0acd645412fdf08eda6d232484e48e5a2643e08062a7a4cf56",
940
+ sha_mac = "1c554c08459b7025638ca4eddba0d35babe8c26b202a70a74e9442d577896211",
941
+ sha_win = "428bc6094671937af96f26d803871fc5cd83d4d2b1c1df45fa6873a9bc5cac51",
942
+ ),
943
+ "2.0.13": struct(
944
+ hash = "ce0e4a4d1cab395ee5082a60ebb4f3891a94b256",
945
+ sha_linux = "8986ed886e111c661099c5147126b8a379a4040aab6a1f572fe01f0f9b99a343",
946
+ sha_mac = "88c91332c8c76fed14ebf0edc9a08f586012f54f04ad61e5b1b6d02bf96bdeab",
947
+ sha_win = "9fb3b945b7bd56e34d17ec04de4cce475f26c49d161aee9d9c0b8b1434591f88",
948
+ ),
949
+ }
bazel/test_external/.bazelrc ADDED
@@ -0,0 +1 @@
 
 
1
+ build --incompatible_enable_cc_toolchain_resolution
bazel/test_external/.gitignore ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ bazel-bin
2
+ bazel-out
3
+ bazel-test_external
4
+ bazel-testlogs
bazel/test_external/BUILD ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ load("@emsdk//emscripten_toolchain:wasm_rules.bzl", "wasm_cc_binary")
2
+ load("@rules_cc//cc:defs.bzl", "cc_binary")
3
+
4
+ cc_binary(
5
+ name = "hello-world",
6
+ srcs = ["hello-world.cc"],
7
+ )
8
+
9
+ wasm_cc_binary(
10
+ name = "hello-world-wasm",
11
+ cc_target = ":hello-world",
12
+ outputs = [
13
+ "hello-world.js",
14
+ "hello-world.wasm",
15
+ ],
16
+ )
17
+
18
+ BASE_LINKOPTS = [
19
+ "--bind", # Enable embind
20
+ "-sMODULARIZE",
21
+ "--pre-js",
22
+ "hello-embind-interface.js",
23
+ ]
24
+
25
+ RELEASE_OPTS = [
26
+ "--closure=1", # Run the closure compiler
27
+ # Tell closure about the externs file, so as not to minify our JS public API.
28
+ "--closure-args=--externs=$(location hello-embind-externs.js)",
29
+ ]
30
+
31
+ DEBUG_OPTS = [
32
+ "--closure=0", # Do not use closure
33
+ ]
34
+
35
+ config_setting(
36
+ name = "release_opts",
37
+ values = {"compilation_mode": "opt"},
38
+ )
39
+
40
+ config_setting(
41
+ name = "debug_opts",
42
+ values = {"compilation_mode": "dbg"},
43
+ )
44
+
45
+ cc_binary(
46
+ name = "hello-embind",
47
+ srcs = ["hello-embind.cc"],
48
+ additional_linker_inputs = [
49
+ "hello-embind-externs.js",
50
+ "hello-embind-interface.js",
51
+ ],
52
+ features = ["emcc_debug_link"],
53
+ linkopts = select({
54
+ ":debug_opts": BASE_LINKOPTS + DEBUG_OPTS,
55
+ ":release_opts": BASE_LINKOPTS + RELEASE_OPTS,
56
+ "//conditions:default": BASE_LINKOPTS + RELEASE_OPTS,
57
+ }),
58
+ # This target won't build successfully on its own because of missing emscripten
59
+ # headers etc. Therefore, we hide it from wildcards.
60
+ tags = ["manual"],
61
+ )
62
+
63
+ wasm_cc_binary(
64
+ name = "hello-embind-wasm",
65
+ cc_target = ":hello-embind",
66
+ )
bazel/test_external/MODULE.bazel ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ bazel_dep(name = "rules_cc", version = "0.2.16")
2
+ bazel_dep(name = "emsdk")
3
+ local_path_override(
4
+ module_name = "emsdk",
5
+ path = "..",
6
+ )
bazel/test_external/MODULE.bazel.lock ADDED
@@ -0,0 +1,902 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "lockFileVersion": 13,
3
+ "registryFileHashes": {
4
+ "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497",
5
+ "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2",
6
+ "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/MODULE.bazel": "70390338f7a5106231d20620712f7cccb659cd0e9d073d1991c038eb9fc57589",
7
+ "https://bcr.bazel.build/modules/abseil-cpp/20230125.1/MODULE.bazel": "89047429cb0207707b2dface14ba7f8df85273d484c2572755be4bab7ce9c3a0",
8
+ "https://bcr.bazel.build/modules/abseil-cpp/20230802.0.bcr.1/MODULE.bazel": "1c8cec495288dccd14fdae6e3f95f772c1c91857047a098fad772034264cc8cb",
9
+ "https://bcr.bazel.build/modules/abseil-cpp/20230802.0/MODULE.bazel": "d253ae36a8bd9ee3c5955384096ccb6baf16a1b1e93e858370da0a3b94f77c16",
10
+ "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/MODULE.bazel": "fa92e2eb41a04df73cdabeec37107316f7e5272650f81d6cc096418fe647b915",
11
+ "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/MODULE.bazel": "37bcdb4440fbb61df6a1c296ae01b327f19e9bb521f9b8e26ec854b6f97309ed",
12
+ "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da",
13
+ "https://bcr.bazel.build/modules/apple_support/1.23.1/MODULE.bazel": "53763fed456a968cf919b3240427cf3a9d5481ec5466abc9d5dc51bc70087442",
14
+ "https://bcr.bazel.build/modules/apple_support/1.23.1/source.json": "d888b44312eb0ad2c21a91d026753f330caa48a25c9b2102fae75eb2b0dcfdd2",
15
+ "https://bcr.bazel.build/modules/aspect_bazel_lib/2.14.0/MODULE.bazel": "2b31ffcc9bdc8295b2167e07a757dbbc9ac8906e7028e5170a3708cecaac119f",
16
+ "https://bcr.bazel.build/modules/aspect_bazel_lib/2.19.2/MODULE.bazel": "30dfabbfae0139b1f0036e01c201dd4c0167da3017f0b7ef3820d78e07622989",
17
+ "https://bcr.bazel.build/modules/aspect_bazel_lib/2.19.2/source.json": "89d8e5d7088ae33972733099b756dae71e1647ae684ab50b26adfa853c506d01",
18
+ "https://bcr.bazel.build/modules/aspect_bazel_lib/2.8.1/MODULE.bazel": "812d2dd42f65dca362152101fbec418029cc8fd34cbad1a2fde905383d705838",
19
+ "https://bcr.bazel.build/modules/aspect_rules_js/2.9.2/MODULE.bazel": "93fd5b85e6e912fb0712cbab453c43271d4ea33a093f84fd587638fbc9f8c145",
20
+ "https://bcr.bazel.build/modules/aspect_rules_js/2.9.2/source.json": "4bff7c03ab387b60deb15649ba575688e62f2a71a7544cbc7a660b19ec473808",
21
+ "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.3.3/MODULE.bazel": "37c764292861c2f70314efa9846bb6dbb44fc0308903b3285da6528305450183",
22
+ "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.3.3/source.json": "605086bbc197743a0d360f7ddc550a1d4dfa0441bc807236e17170f636153348",
23
+ "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd",
24
+ "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8",
25
+ "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d",
26
+ "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d",
27
+ "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a",
28
+ "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58",
29
+ "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b",
30
+ "https://bcr.bazel.build/modules/bazel_features/1.27.0/MODULE.bazel": "621eeee06c4458a9121d1f104efb80f39d34deff4984e778359c60eaf1a8cb65",
31
+ "https://bcr.bazel.build/modules/bazel_features/1.28.0/MODULE.bazel": "4b4200e6cbf8fa335b2c3f43e1d6ef3e240319c33d43d60cc0fbd4b87ece299d",
32
+ "https://bcr.bazel.build/modules/bazel_features/1.39.0/MODULE.bazel": "28739425c1fc283c91931619749c832b555e60bcd1010b40d8441ce0a5cf726d",
33
+ "https://bcr.bazel.build/modules/bazel_features/1.39.0/source.json": "f63cbeb4c602098484d57001e5a07d31cb02bbccde9b5e2c9bf0b29d05283e93",
34
+ "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7",
35
+ "https://bcr.bazel.build/modules/bazel_features/1.9.0/MODULE.bazel": "885151d58d90d8d9c811eb75e3288c11f850e1d6b481a8c9f766adee4712358b",
36
+ "https://bcr.bazel.build/modules/bazel_lib/3.0.0/MODULE.bazel": "22b70b80ac89ad3f3772526cd9feee2fa412c2b01933fea7ed13238a448d370d",
37
+ "https://bcr.bazel.build/modules/bazel_lib/3.0.0/source.json": "895f21909c6fba01d7c17914bb6c8e135982275a1b18cdaa4e62272217ef1751",
38
+ "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8",
39
+ "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e",
40
+ "https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686",
41
+ "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a",
42
+ "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5",
43
+ "https://bcr.bazel.build/modules/bazel_skylib/1.4.1/MODULE.bazel": "a0dcb779424be33100dcae821e9e27e4f2901d9dfd5333efe5ac6a8d7ab75e1d",
44
+ "https://bcr.bazel.build/modules/bazel_skylib/1.4.2/MODULE.bazel": "3bd40978e7a1fac911d5989e6b09d8f64921865a45822d8b09e815eaa726a651",
45
+ "https://bcr.bazel.build/modules/bazel_skylib/1.5.0/MODULE.bazel": "32880f5e2945ce6a03d1fbd588e9198c0a959bb42297b2cfaf1685b7bc32e138",
46
+ "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917",
47
+ "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d",
48
+ "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b",
49
+ "https://bcr.bazel.build/modules/bazel_skylib/1.8.1/MODULE.bazel": "88ade7293becda963e0e3ea33e7d54d3425127e0a326e0d17da085a5f1f03ff6",
50
+ "https://bcr.bazel.build/modules/bazel_skylib/1.8.2/MODULE.bazel": "69ad6927098316848b34a9142bcc975e018ba27f08c4ff403f50c1b6e646ca67",
51
+ "https://bcr.bazel.build/modules/bazel_skylib/1.8.2/source.json": "34a3c8bcf233b835eb74be9d628899bb32999d3e0eadef1947a0a562a2b16ffb",
52
+ "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84",
53
+ "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8",
54
+ "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb",
55
+ "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4",
56
+ "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6",
57
+ "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/source.json": "41e9e129f80d8c8bf103a7acc337b76e54fad1214ac0a7084bf24f4cd924b8b4",
58
+ "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f",
59
+ "https://bcr.bazel.build/modules/jq.bzl/0.1.0/MODULE.bazel": "2ce69b1af49952cd4121a9c3055faa679e748ce774c7f1fda9657f936cae902f",
60
+ "https://bcr.bazel.build/modules/jq.bzl/0.1.0/source.json": "746bf13cac0860f091df5e4911d0c593971cd8796b5ad4e809b2f8e133eee3d5",
61
+ "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075",
62
+ "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d",
63
+ "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902",
64
+ "https://bcr.bazel.build/modules/package_metadata/0.0.2/MODULE.bazel": "fb8d25550742674d63d7b250063d4580ca530499f045d70748b1b142081ebb92",
65
+ "https://bcr.bazel.build/modules/package_metadata/0.0.2/source.json": "e53a759a72488d2c0576f57491ef2da0cf4aab05ac0997314012495935531b73",
66
+ "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5",
67
+ "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f",
68
+ "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee",
69
+ "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37",
70
+ "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615",
71
+ "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814",
72
+ "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d",
73
+ "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc",
74
+ "https://bcr.bazel.build/modules/platforms/1.0.0/MODULE.bazel": "f05feb42b48f1b3c225e4ccf351f367be0371411a803198ec34a389fb22aa580",
75
+ "https://bcr.bazel.build/modules/platforms/1.0.0/source.json": "f4ff1fd412e0246fd38c82328eb209130ead81d62dcd5a9e40910f867f733d96",
76
+ "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7",
77
+ "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c",
78
+ "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df",
79
+ "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92",
80
+ "https://bcr.bazel.build/modules/protobuf/29.0-rc3/source.json": "c16a6488fb279ef578da7098e605082d72ed85fc8d843eaae81e7d27d0f4625d",
81
+ "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0",
82
+ "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858",
83
+ "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e",
84
+ "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/source.json": "be4789e951dd5301282729fe3d4938995dc4c1a81c2ff150afc9f1b0504c6022",
85
+ "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206",
86
+ "https://bcr.bazel.build/modules/re2/2023-09-01/source.json": "e044ce89c2883cd957a2969a43e79f7752f9656f6b20050b62f90ede21ec6eb4",
87
+ "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8",
88
+ "https://bcr.bazel.build/modules/rules_android/0.1.1/source.json": "e6986b41626ee10bdc864937ffb6d6bf275bb5b9c65120e6137d56e6331f089e",
89
+ "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647",
90
+ "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002",
91
+ "https://bcr.bazel.build/modules/rules_cc/0.0.11/MODULE.bazel": "9f249c5624a4788067b96b8b896be10c7e8b4375dc46f6d8e1e51100113e0992",
92
+ "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191",
93
+ "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc",
94
+ "https://bcr.bazel.build/modules/rules_cc/0.0.16/MODULE.bazel": "7661303b8fc1b4d7f532e54e9d6565771fea666fbdf839e0a86affcd02defe87",
95
+ "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c",
96
+ "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f",
97
+ "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e",
98
+ "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5",
99
+ "https://bcr.bazel.build/modules/rules_cc/0.1.5/MODULE.bazel": "88dfc9361e8b5ae1008ac38f7cdfd45ad738e4fa676a3ad67d19204f045a1fd8",
100
+ "https://bcr.bazel.build/modules/rules_cc/0.2.16/MODULE.bazel": "9242fa89f950c6ef7702801ab53922e99c69b02310c39fb6e62b2bd30df2a1d4",
101
+ "https://bcr.bazel.build/modules/rules_cc/0.2.16/source.json": "d03d5cde49376d87e14ec14b666c56075e5e3926930327fd5d0484a1ff2ac1cc",
102
+ "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6",
103
+ "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8",
104
+ "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/source.json": "c8b1e2c717646f1702290959a3302a178fb639d987ab61d548105019f11e527e",
105
+ "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74",
106
+ "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86",
107
+ "https://bcr.bazel.build/modules/rules_java/6.3.0/MODULE.bazel": "a97c7678c19f236a956ad260d59c86e10a463badb7eb2eda787490f4c969b963",
108
+ "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31",
109
+ "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a",
110
+ "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6",
111
+ "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab",
112
+ "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe",
113
+ "https://bcr.bazel.build/modules/rules_java/7.6.5/MODULE.bazel": "481164be5e02e4cab6e77a36927683263be56b7e36fef918b458d7a8a1ebadb1",
114
+ "https://bcr.bazel.build/modules/rules_java/8.3.2/MODULE.bazel": "7336d5511ad5af0b8615fdc7477535a2e4e723a357b6713af439fe8cf0195017",
115
+ "https://bcr.bazel.build/modules/rules_java/8.5.1/MODULE.bazel": "d8a9e38cc5228881f7055a6079f6f7821a073df3744d441978e7a43e20226939",
116
+ "https://bcr.bazel.build/modules/rules_java/8.5.1/source.json": "db1a77d81b059e0f84985db67a22f3f579a529a86b7997605be3d214a0abe38e",
117
+ "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7",
118
+ "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909",
119
+ "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036",
120
+ "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0",
121
+ "https://bcr.bazel.build/modules/rules_jvm_external/6.3/source.json": "6f5f5a5a4419ae4e37c35a5bb0a6ae657ed40b7abc5a5189111b47fcebe43197",
122
+ "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3",
123
+ "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5",
124
+ "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0",
125
+ "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d",
126
+ "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c",
127
+ "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb",
128
+ "https://bcr.bazel.build/modules/rules_nodejs/6.3.3/MODULE.bazel": "b66eadebd10f1f1b25f52f95ab5213a57e82c37c3f656fcd9a57ad04d2264ce7",
129
+ "https://bcr.bazel.build/modules/rules_nodejs/6.7.3/MODULE.bazel": "c22a48b2a0dbf05a9dc5f83837bbc24c226c1f6e618de3c3a610044c9f336056",
130
+ "https://bcr.bazel.build/modules/rules_nodejs/6.7.3/source.json": "a3f966f4415a8a6545e560ee5449eac95cc633f96429d08e87c87775c72f5e09",
131
+ "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc",
132
+ "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff",
133
+ "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a",
134
+ "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06",
135
+ "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7",
136
+ "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73",
137
+ "https://bcr.bazel.build/modules/rules_proto/6.0.2/source.json": "17a2e195f56cb28d6bbf763e49973d13890487c6945311ed141e196fb660426d",
138
+ "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f",
139
+ "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7",
140
+ "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300",
141
+ "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382",
142
+ "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed",
143
+ "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58",
144
+ "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c",
145
+ "https://bcr.bazel.build/modules/rules_python/1.8.3/MODULE.bazel": "f343e159b59701334be3914416b9f1b72845801ba47920fcb288af4ce8c5cce3",
146
+ "https://bcr.bazel.build/modules/rules_python/1.8.3/source.json": "e5439f308e3c6f79f318a0f87108db46fc575be89370c3dfb3f7e0eaa571a3f8",
147
+ "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c",
148
+ "https://bcr.bazel.build/modules/rules_shell/0.4.1/MODULE.bazel": "00e501db01bbf4e3e1dd1595959092c2fadf2087b2852d3f553b5370f5633592",
149
+ "https://bcr.bazel.build/modules/rules_shell/0.4.1/source.json": "4757bd277fe1567763991c4425b483477bb82e35e777a56fd846eb5cceda324a",
150
+ "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8",
151
+ "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c",
152
+ "https://bcr.bazel.build/modules/stardoc/0.6.2/MODULE.bazel": "7060193196395f5dd668eda046ccbeacebfd98efc77fed418dbe2b82ffaa39fd",
153
+ "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c",
154
+ "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5",
155
+ "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216",
156
+ "https://bcr.bazel.build/modules/tar.bzl/0.2.1/MODULE.bazel": "52d1c00a80a8cc67acbd01649e83d8dd6a9dc426a6c0b754a04fe8c219c76468",
157
+ "https://bcr.bazel.build/modules/tar.bzl/0.2.1/source.json": "600ac6ff61744667a439e7b814ae59c1f29632c3984fccf8000c64c9db8d7bb6",
158
+ "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43",
159
+ "https://bcr.bazel.build/modules/yq.bzl/0.1.1/MODULE.bazel": "9039681f9bcb8958ee2c87ffc74bdafba9f4369096a2b5634b88abc0eaefa072",
160
+ "https://bcr.bazel.build/modules/yq.bzl/0.3.2/MODULE.bazel": "0384efa70e8033d842ea73aa4b7199fa099709e236a7264345c03937166670b6",
161
+ "https://bcr.bazel.build/modules/yq.bzl/0.3.2/source.json": "c4ec3e192477e154f08769e29d69e8fd36e8a4f0f623997f3e1f6f7d328f7d7d",
162
+ "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0",
163
+ "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27",
164
+ "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79",
165
+ "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d",
166
+ "https://bcr.bazel.build/modules/zlib/1.3.1/MODULE.bazel": "751c9940dcfe869f5f7274e1295422a34623555916eb98c174c1e945594bf198"
167
+ },
168
+ "selectedYankedVersions": {},
169
+ "moduleExtensions": {
170
+ "@@emsdk~//:emscripten_cache.bzl%emscripten_cache": {
171
+ "general": {
172
+ "bzlTransitiveDigest": "uqDvXmpTNqW4+ie/Fk+xC3TrFrKvL+9hNtoP51Kt2oo=",
173
+ "usagesDigest": "jV72lfl76C0OC79x7zJCuHL9MQ48s2xwbFo4eE4mv+w=",
174
+ "recordedFileInputs": {},
175
+ "recordedDirentsInputs": {},
176
+ "envVariables": {},
177
+ "generatedRepoSpecs": {
178
+ "emscripten_cache": {
179
+ "bzlFile": "@@emsdk~//:emscripten_cache.bzl",
180
+ "ruleClassName": "_emscripten_cache_repository",
181
+ "attributes": {
182
+ "configuration": [],
183
+ "targets": []
184
+ }
185
+ }
186
+ },
187
+ "recordedRepoMappingEntries": []
188
+ }
189
+ },
190
+ "@@emsdk~//:emscripten_deps.bzl%emscripten_deps": {
191
+ "general": {
192
+ "bzlTransitiveDigest": "l13dpT30uo2JkUyTZcaXwreRsEt2lTQVOStOPWoZeaI=",
193
+ "usagesDigest": "JNMjHXCqUsMLiBJnH4xCE/8Hjcsv9bkczErK6IcoW60=",
194
+ "recordedFileInputs": {},
195
+ "recordedDirentsInputs": {},
196
+ "envVariables": {},
197
+ "generatedRepoSpecs": {
198
+ "emscripten_bin_linux": {
199
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
200
+ "ruleClassName": "http_archive",
201
+ "attributes": {
202
+ "build_file_content": "\npackage(default_visibility = ['//visibility:public'])\n\nfilegroup(\n name = \"all\",\n srcs = glob([\"**\"]),\n)\n\nfilegroup(\n name = \"includes\",\n srcs = glob([\n \"emscripten/cache/sysroot/include/c++/v1/**\",\n \"emscripten/cache/sysroot/include/compat/**\",\n \"emscripten/cache/sysroot/include/**\",\n \"lib/clang/**/include/**\",\n ]),\n)\n\nfilegroup(\n name = \"emcc_common\",\n srcs = [\n \"emscripten/emcc.py\",\n \"emscripten/embuilder.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/cache/sysroot_install.stamp\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/third_party/**\",\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"compiler_files\",\n srcs = [\n \"bin/clang\",\n \"bin/clang++\",\n \":emcc_common\",\n \":includes\",\n ],\n)\n\nfilegroup(\n name = \"linker_files\",\n srcs = [\n \"bin/clang\",\n \"bin/llvm-ar\",\n \"bin/llvm-dwarfdump\",\n \"bin/llvm-nm\",\n \"bin/llvm-objcopy\",\n \"bin/wasm-ctor-eval\",\n \"bin/wasm-emscripten-finalize\",\n \"bin/wasm-ld\",\n \"bin/wasm-metadce\",\n \"bin/wasm-opt\",\n \"bin/wasm-split\",\n \"bin/wasm2js\",\n \":emcc_common\",\n ] + glob(\n include = [\n \"emscripten/cache/sysroot/lib/**\",\n \"emscripten/node_modules/**\",\n \"emscripten/src/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"ar_files\",\n srcs = [\n \"bin/llvm-ar\",\n \"emscripten/emar.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n",
203
+ "sha256": "ba97bdf3737d19f70af390223eb6262013b89206202779b6a8d57568b3241a59",
204
+ "strip_prefix": "install",
205
+ "type": "tar.xz",
206
+ "url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/e44d3cc557d78155966478aa2bd8dec657609619/wasm-binaries.tar.xz"
207
+ }
208
+ },
209
+ "emscripten_bin_linux_arm64": {
210
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
211
+ "ruleClassName": "http_archive",
212
+ "attributes": {
213
+ "build_file_content": "\npackage(default_visibility = ['//visibility:public'])\n\nfilegroup(\n name = \"all\",\n srcs = glob([\"**\"]),\n)\n\nfilegroup(\n name = \"includes\",\n srcs = glob([\n \"emscripten/cache/sysroot/include/c++/v1/**\",\n \"emscripten/cache/sysroot/include/compat/**\",\n \"emscripten/cache/sysroot/include/**\",\n \"lib/clang/**/include/**\",\n ]),\n)\n\nfilegroup(\n name = \"emcc_common\",\n srcs = [\n \"emscripten/emcc.py\",\n \"emscripten/embuilder.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/cache/sysroot_install.stamp\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/third_party/**\",\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"compiler_files\",\n srcs = [\n \"bin/clang\",\n \"bin/clang++\",\n \":emcc_common\",\n \":includes\",\n ],\n)\n\nfilegroup(\n name = \"linker_files\",\n srcs = [\n \"bin/clang\",\n \"bin/llvm-ar\",\n \"bin/llvm-dwarfdump\",\n \"bin/llvm-nm\",\n \"bin/llvm-objcopy\",\n \"bin/wasm-ctor-eval\",\n \"bin/wasm-emscripten-finalize\",\n \"bin/wasm-ld\",\n \"bin/wasm-metadce\",\n \"bin/wasm-opt\",\n \"bin/wasm-split\",\n \"bin/wasm2js\",\n \":emcc_common\",\n ] + glob(\n include = [\n \"emscripten/cache/sysroot/lib/**\",\n \"emscripten/node_modules/**\",\n \"emscripten/src/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"ar_files\",\n srcs = [\n \"bin/llvm-ar\",\n \"emscripten/emar.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n",
214
+ "sha256": "d3e0a648d1d8a33908e8f1d0878b62ec10f3714c13045f29c720e3936a1c411c",
215
+ "strip_prefix": "install",
216
+ "type": "tar.xz",
217
+ "url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/e44d3cc557d78155966478aa2bd8dec657609619/wasm-binaries-arm64.tar.xz"
218
+ }
219
+ },
220
+ "emscripten_bin_mac": {
221
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
222
+ "ruleClassName": "http_archive",
223
+ "attributes": {
224
+ "build_file_content": "\npackage(default_visibility = ['//visibility:public'])\n\nfilegroup(\n name = \"all\",\n srcs = glob([\"**\"]),\n)\n\nfilegroup(\n name = \"includes\",\n srcs = glob([\n \"emscripten/cache/sysroot/include/c++/v1/**\",\n \"emscripten/cache/sysroot/include/compat/**\",\n \"emscripten/cache/sysroot/include/**\",\n \"lib/clang/**/include/**\",\n ]),\n)\n\nfilegroup(\n name = \"emcc_common\",\n srcs = [\n \"emscripten/emcc.py\",\n \"emscripten/embuilder.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/cache/sysroot_install.stamp\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/third_party/**\",\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"compiler_files\",\n srcs = [\n \"bin/clang\",\n \"bin/clang++\",\n \":emcc_common\",\n \":includes\",\n ],\n)\n\nfilegroup(\n name = \"linker_files\",\n srcs = [\n \"bin/clang\",\n \"bin/llvm-ar\",\n \"bin/llvm-dwarfdump\",\n \"bin/llvm-nm\",\n \"bin/llvm-objcopy\",\n \"bin/wasm-ctor-eval\",\n \"bin/wasm-emscripten-finalize\",\n \"bin/wasm-ld\",\n \"bin/wasm-metadce\",\n \"bin/wasm-opt\",\n \"bin/wasm-split\",\n \"bin/wasm2js\",\n \":emcc_common\",\n ] + glob(\n include = [\n \"emscripten/cache/sysroot/lib/**\",\n \"emscripten/node_modules/**\",\n \"emscripten/src/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"ar_files\",\n srcs = [\n \"bin/llvm-ar\",\n \"emscripten/emar.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n",
225
+ "sha256": "5020626bc87d3a9634bfa63fda05aa44f74144a849453c9cf1f014d9fdc63a5d",
226
+ "strip_prefix": "install",
227
+ "type": "tar.xz",
228
+ "url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/mac/e44d3cc557d78155966478aa2bd8dec657609619/wasm-binaries.tar.xz"
229
+ }
230
+ },
231
+ "emscripten_bin_mac_arm64": {
232
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
233
+ "ruleClassName": "http_archive",
234
+ "attributes": {
235
+ "build_file_content": "\npackage(default_visibility = ['//visibility:public'])\n\nfilegroup(\n name = \"all\",\n srcs = glob([\"**\"]),\n)\n\nfilegroup(\n name = \"includes\",\n srcs = glob([\n \"emscripten/cache/sysroot/include/c++/v1/**\",\n \"emscripten/cache/sysroot/include/compat/**\",\n \"emscripten/cache/sysroot/include/**\",\n \"lib/clang/**/include/**\",\n ]),\n)\n\nfilegroup(\n name = \"emcc_common\",\n srcs = [\n \"emscripten/emcc.py\",\n \"emscripten/embuilder.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/cache/sysroot_install.stamp\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/third_party/**\",\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"compiler_files\",\n srcs = [\n \"bin/clang\",\n \"bin/clang++\",\n \":emcc_common\",\n \":includes\",\n ],\n)\n\nfilegroup(\n name = \"linker_files\",\n srcs = [\n \"bin/clang\",\n \"bin/llvm-ar\",\n \"bin/llvm-dwarfdump\",\n \"bin/llvm-nm\",\n \"bin/llvm-objcopy\",\n \"bin/wasm-ctor-eval\",\n \"bin/wasm-emscripten-finalize\",\n \"bin/wasm-ld\",\n \"bin/wasm-metadce\",\n \"bin/wasm-opt\",\n \"bin/wasm-split\",\n \"bin/wasm2js\",\n \":emcc_common\",\n ] + glob(\n include = [\n \"emscripten/cache/sysroot/lib/**\",\n \"emscripten/node_modules/**\",\n \"emscripten/src/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"ar_files\",\n srcs = [\n \"bin/llvm-ar\",\n \"emscripten/emar.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n",
236
+ "sha256": "7172745de73be538e86680ae04856f8608370c971f5f21bb5cf1d6331c83ef6a",
237
+ "strip_prefix": "install",
238
+ "type": "tar.xz",
239
+ "url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/mac/e44d3cc557d78155966478aa2bd8dec657609619/wasm-binaries-arm64.tar.xz"
240
+ }
241
+ },
242
+ "emscripten_bin_win": {
243
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
244
+ "ruleClassName": "http_archive",
245
+ "attributes": {
246
+ "build_file_content": "\npackage(default_visibility = ['//visibility:public'])\n\nfilegroup(\n name = \"all\",\n srcs = glob([\"**\"]),\n)\n\nfilegroup(\n name = \"includes\",\n srcs = glob([\n \"emscripten/cache/sysroot/include/c++/v1/**\",\n \"emscripten/cache/sysroot/include/compat/**\",\n \"emscripten/cache/sysroot/include/**\",\n \"lib/clang/**/include/**\",\n ]),\n)\n\nfilegroup(\n name = \"emcc_common\",\n srcs = [\n \"emscripten/emcc.py\",\n \"emscripten/embuilder.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/cache/sysroot_install.stamp\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/third_party/**\",\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"compiler_files\",\n srcs = [\n \"bin/clang.exe\",\n \"bin/clang++.exe\",\n \":emcc_common\",\n \":includes\",\n ],\n)\n\nfilegroup(\n name = \"linker_files\",\n srcs = [\n \"bin/clang.exe\",\n \"bin/llvm-ar.exe\",\n \"bin/llvm-dwarfdump.exe\",\n \"bin/llvm-nm.exe\",\n \"bin/llvm-objcopy.exe\",\n \"bin/wasm-ctor-eval.exe\",\n \"bin/wasm-emscripten-finalize.exe\",\n \"bin/wasm-ld.exe\",\n \"bin/wasm-metadce.exe\",\n \"bin/wasm-opt.exe\",\n \"bin/wasm-split.exe\",\n \"bin/wasm2js.exe\",\n \":emcc_common\",\n ] + glob(\n include = [\n \"emscripten/cache/sysroot/lib/**\",\n \"emscripten/node_modules/**\",\n \"emscripten/src/**\",\n ],\n ),\n)\n\nfilegroup(\n name = \"ar_files\",\n srcs = [\n \"bin/llvm-ar.exe\",\n \"emscripten/emar.py\",\n \"emscripten/emscripten-version.txt\",\n \"emscripten/src/settings.js\",\n \"emscripten/src/settings_internal.js\",\n ] + glob(\n include = [\n \"emscripten/tools/**\",\n ],\n exclude = [\n \"**/__pycache__/**\",\n ],\n ),\n)\n",
247
+ "sha256": "660fcee6fff5042ca4b535f6100319303be399ca86c393266da09e709944915b",
248
+ "strip_prefix": "install",
249
+ "type": "zip",
250
+ "url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/win/e44d3cc557d78155966478aa2bd8dec657609619/wasm-binaries.zip"
251
+ }
252
+ }
253
+ },
254
+ "recordedRepoMappingEntries": [
255
+ [
256
+ "emsdk~",
257
+ "bazel_tools",
258
+ "bazel_tools"
259
+ ],
260
+ [
261
+ "emsdk~",
262
+ "rules_cc",
263
+ "rules_cc~"
264
+ ],
265
+ [
266
+ "rules_cc~",
267
+ "bazel_tools",
268
+ "bazel_tools"
269
+ ],
270
+ [
271
+ "rules_cc~",
272
+ "cc_compatibility_proxy",
273
+ "rules_cc~~compatibility_proxy~cc_compatibility_proxy"
274
+ ],
275
+ [
276
+ "rules_cc~",
277
+ "rules_cc",
278
+ "rules_cc~"
279
+ ],
280
+ [
281
+ "rules_cc~~compatibility_proxy~cc_compatibility_proxy",
282
+ "rules_cc",
283
+ "rules_cc~"
284
+ ]
285
+ ]
286
+ }
287
+ },
288
+ "@@rules_java~//java:rules_java_deps.bzl%compatibility_proxy": {
289
+ "general": {
290
+ "bzlTransitiveDigest": "C4xqrMy1wN4iuTN6Z2eCm94S5XingHhD6uwrIXvCxVI=",
291
+ "usagesDigest": "pwHZ+26iLgQdwvdZeA5wnAjKnNI3y6XO2VbhOTeo5h8=",
292
+ "recordedFileInputs": {},
293
+ "recordedDirentsInputs": {},
294
+ "envVariables": {},
295
+ "generatedRepoSpecs": {
296
+ "compatibility_proxy": {
297
+ "bzlFile": "@@rules_java~//java:rules_java_deps.bzl",
298
+ "ruleClassName": "_compatibility_proxy_repo_rule",
299
+ "attributes": {}
300
+ }
301
+ },
302
+ "recordedRepoMappingEntries": [
303
+ [
304
+ "rules_java~",
305
+ "bazel_tools",
306
+ "bazel_tools"
307
+ ]
308
+ ]
309
+ }
310
+ },
311
+ "@@rules_kotlin~//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": {
312
+ "general": {
313
+ "bzlTransitiveDigest": "eecmTsmdIQveoA97hPtH3/Ej/kugbdCI24bhXIXaly8=",
314
+ "usagesDigest": "aJF6fLy82rR95Ff5CZPAqxNoFgOMLMN5ImfBS0nhnkg=",
315
+ "recordedFileInputs": {},
316
+ "recordedDirentsInputs": {},
317
+ "envVariables": {},
318
+ "generatedRepoSpecs": {
319
+ "com_github_jetbrains_kotlin_git": {
320
+ "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl",
321
+ "ruleClassName": "kotlin_compiler_git_repository",
322
+ "attributes": {
323
+ "urls": [
324
+ "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip"
325
+ ],
326
+ "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88"
327
+ }
328
+ },
329
+ "com_github_jetbrains_kotlin": {
330
+ "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl",
331
+ "ruleClassName": "kotlin_capabilities_repository",
332
+ "attributes": {
333
+ "git_repository_name": "com_github_jetbrains_kotlin_git",
334
+ "compiler_version": "1.9.23"
335
+ }
336
+ },
337
+ "com_github_google_ksp": {
338
+ "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:ksp.bzl",
339
+ "ruleClassName": "ksp_compiler_plugin_repository",
340
+ "attributes": {
341
+ "urls": [
342
+ "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip"
343
+ ],
344
+ "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d",
345
+ "strip_version": "1.9.23-1.0.20"
346
+ }
347
+ },
348
+ "com_github_pinterest_ktlint": {
349
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
350
+ "ruleClassName": "http_file",
351
+ "attributes": {
352
+ "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985",
353
+ "urls": [
354
+ "https://github.com/pinterest/ktlint/releases/download/1.3.0/ktlint"
355
+ ],
356
+ "executable": true
357
+ }
358
+ },
359
+ "rules_android": {
360
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
361
+ "ruleClassName": "http_archive",
362
+ "attributes": {
363
+ "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806",
364
+ "strip_prefix": "rules_android-0.1.1",
365
+ "urls": [
366
+ "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip"
367
+ ]
368
+ }
369
+ }
370
+ },
371
+ "recordedRepoMappingEntries": [
372
+ [
373
+ "rules_kotlin~",
374
+ "bazel_tools",
375
+ "bazel_tools"
376
+ ]
377
+ ]
378
+ }
379
+ },
380
+ "@@rules_nodejs~//nodejs:extensions.bzl%node": {
381
+ "general": {
382
+ "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=",
383
+ "usagesDigest": "MjIIdA2dWsEfaskRbGc/REWUeha5SGkXZt/Zx7Hfr50=",
384
+ "recordedFileInputs": {},
385
+ "recordedDirentsInputs": {},
386
+ "envVariables": {},
387
+ "generatedRepoSpecs": {
388
+ "nodejs_linux_amd64": {
389
+ "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl",
390
+ "ruleClassName": "_nodejs_repositories",
391
+ "attributes": {
392
+ "node_download_auth": {},
393
+ "node_repositories": {},
394
+ "node_urls": [
395
+ "https://nodejs.org/dist/v{version}/{filename}"
396
+ ],
397
+ "node_version": "20.18.0",
398
+ "include_headers": false,
399
+ "platform": "linux_amd64"
400
+ }
401
+ },
402
+ "nodejs_linux_arm64": {
403
+ "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl",
404
+ "ruleClassName": "_nodejs_repositories",
405
+ "attributes": {
406
+ "node_download_auth": {},
407
+ "node_repositories": {},
408
+ "node_urls": [
409
+ "https://nodejs.org/dist/v{version}/{filename}"
410
+ ],
411
+ "node_version": "20.18.0",
412
+ "include_headers": false,
413
+ "platform": "linux_arm64"
414
+ }
415
+ },
416
+ "nodejs_linux_s390x": {
417
+ "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl",
418
+ "ruleClassName": "_nodejs_repositories",
419
+ "attributes": {
420
+ "node_download_auth": {},
421
+ "node_repositories": {},
422
+ "node_urls": [
423
+ "https://nodejs.org/dist/v{version}/{filename}"
424
+ ],
425
+ "node_version": "20.18.0",
426
+ "include_headers": false,
427
+ "platform": "linux_s390x"
428
+ }
429
+ },
430
+ "nodejs_linux_ppc64le": {
431
+ "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl",
432
+ "ruleClassName": "_nodejs_repositories",
433
+ "attributes": {
434
+ "node_download_auth": {},
435
+ "node_repositories": {},
436
+ "node_urls": [
437
+ "https://nodejs.org/dist/v{version}/{filename}"
438
+ ],
439
+ "node_version": "20.18.0",
440
+ "include_headers": false,
441
+ "platform": "linux_ppc64le"
442
+ }
443
+ },
444
+ "nodejs_darwin_amd64": {
445
+ "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl",
446
+ "ruleClassName": "_nodejs_repositories",
447
+ "attributes": {
448
+ "node_download_auth": {},
449
+ "node_repositories": {},
450
+ "node_urls": [
451
+ "https://nodejs.org/dist/v{version}/{filename}"
452
+ ],
453
+ "node_version": "20.18.0",
454
+ "include_headers": false,
455
+ "platform": "darwin_amd64"
456
+ }
457
+ },
458
+ "nodejs_darwin_arm64": {
459
+ "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl",
460
+ "ruleClassName": "_nodejs_repositories",
461
+ "attributes": {
462
+ "node_download_auth": {},
463
+ "node_repositories": {},
464
+ "node_urls": [
465
+ "https://nodejs.org/dist/v{version}/{filename}"
466
+ ],
467
+ "node_version": "20.18.0",
468
+ "include_headers": false,
469
+ "platform": "darwin_arm64"
470
+ }
471
+ },
472
+ "nodejs_windows_amd64": {
473
+ "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl",
474
+ "ruleClassName": "_nodejs_repositories",
475
+ "attributes": {
476
+ "node_download_auth": {},
477
+ "node_repositories": {},
478
+ "node_urls": [
479
+ "https://nodejs.org/dist/v{version}/{filename}"
480
+ ],
481
+ "node_version": "20.18.0",
482
+ "include_headers": false,
483
+ "platform": "windows_amd64"
484
+ }
485
+ },
486
+ "nodejs_windows_arm64": {
487
+ "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl",
488
+ "ruleClassName": "_nodejs_repositories",
489
+ "attributes": {
490
+ "node_download_auth": {},
491
+ "node_repositories": {},
492
+ "node_urls": [
493
+ "https://nodejs.org/dist/v{version}/{filename}"
494
+ ],
495
+ "node_version": "20.18.0",
496
+ "include_headers": false,
497
+ "platform": "windows_arm64"
498
+ }
499
+ },
500
+ "nodejs": {
501
+ "bzlFile": "@@rules_nodejs~//nodejs/private:nodejs_repo_host_os_alias.bzl",
502
+ "ruleClassName": "nodejs_repo_host_os_alias",
503
+ "attributes": {
504
+ "user_node_repository_name": "nodejs"
505
+ }
506
+ },
507
+ "nodejs_host": {
508
+ "bzlFile": "@@rules_nodejs~//nodejs/private:nodejs_repo_host_os_alias.bzl",
509
+ "ruleClassName": "nodejs_repo_host_os_alias",
510
+ "attributes": {
511
+ "user_node_repository_name": "nodejs"
512
+ }
513
+ },
514
+ "nodejs_toolchains": {
515
+ "bzlFile": "@@rules_nodejs~//nodejs/private:nodejs_toolchains_repo.bzl",
516
+ "ruleClassName": "nodejs_toolchains_repo",
517
+ "attributes": {
518
+ "user_node_repository_name": "nodejs"
519
+ }
520
+ }
521
+ },
522
+ "recordedRepoMappingEntries": []
523
+ }
524
+ },
525
+ "@@rules_python~//python/extensions:config.bzl%config": {
526
+ "general": {
527
+ "bzlTransitiveDigest": "Mr1nEq0gLFUbnMWVlKO2RA7igJa6gHp587zqUUbaUw4=",
528
+ "usagesDigest": "KwjULY4JAZrnEVuoT1YM1scfJLyUyQhw5LzrdYkShes=",
529
+ "recordedFileInputs": {},
530
+ "recordedDirentsInputs": {},
531
+ "envVariables": {},
532
+ "generatedRepoSpecs": {
533
+ "rules_python_internal": {
534
+ "bzlFile": "@@rules_python~//python/private:internal_config_repo.bzl",
535
+ "ruleClassName": "internal_config_repo",
536
+ "attributes": {
537
+ "transition_setting_generators": {},
538
+ "transition_settings": []
539
+ }
540
+ },
541
+ "pypi__build": {
542
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
543
+ "ruleClassName": "http_archive",
544
+ "attributes": {
545
+ "url": "https://files.pythonhosted.org/packages/e2/03/f3c8ba0a6b6e30d7d18c40faab90807c9bb5e9a1e3b2fe2008af624a9c97/build-1.2.1-py3-none-any.whl",
546
+ "sha256": "75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4",
547
+ "type": "zip",
548
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
549
+ }
550
+ },
551
+ "pypi__click": {
552
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
553
+ "ruleClassName": "http_archive",
554
+ "attributes": {
555
+ "url": "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl",
556
+ "sha256": "ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28",
557
+ "type": "zip",
558
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
559
+ }
560
+ },
561
+ "pypi__colorama": {
562
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
563
+ "ruleClassName": "http_archive",
564
+ "attributes": {
565
+ "url": "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl",
566
+ "sha256": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6",
567
+ "type": "zip",
568
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
569
+ }
570
+ },
571
+ "pypi__importlib_metadata": {
572
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
573
+ "ruleClassName": "http_archive",
574
+ "attributes": {
575
+ "url": "https://files.pythonhosted.org/packages/2d/0a/679461c511447ffaf176567d5c496d1de27cbe34a87df6677d7171b2fbd4/importlib_metadata-7.1.0-py3-none-any.whl",
576
+ "sha256": "30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570",
577
+ "type": "zip",
578
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
579
+ }
580
+ },
581
+ "pypi__installer": {
582
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
583
+ "ruleClassName": "http_archive",
584
+ "attributes": {
585
+ "url": "https://files.pythonhosted.org/packages/e5/ca/1172b6638d52f2d6caa2dd262ec4c811ba59eee96d54a7701930726bce18/installer-0.7.0-py3-none-any.whl",
586
+ "sha256": "05d1933f0a5ba7d8d6296bb6d5018e7c94fa473ceb10cf198a92ccea19c27b53",
587
+ "type": "zip",
588
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
589
+ }
590
+ },
591
+ "pypi__more_itertools": {
592
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
593
+ "ruleClassName": "http_archive",
594
+ "attributes": {
595
+ "url": "https://files.pythonhosted.org/packages/50/e2/8e10e465ee3987bb7c9ab69efb91d867d93959095f4807db102d07995d94/more_itertools-10.2.0-py3-none-any.whl",
596
+ "sha256": "686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684",
597
+ "type": "zip",
598
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
599
+ }
600
+ },
601
+ "pypi__packaging": {
602
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
603
+ "ruleClassName": "http_archive",
604
+ "attributes": {
605
+ "url": "https://files.pythonhosted.org/packages/49/df/1fceb2f8900f8639e278b056416d49134fb8d84c5942ffaa01ad34782422/packaging-24.0-py3-none-any.whl",
606
+ "sha256": "2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5",
607
+ "type": "zip",
608
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
609
+ }
610
+ },
611
+ "pypi__pep517": {
612
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
613
+ "ruleClassName": "http_archive",
614
+ "attributes": {
615
+ "url": "https://files.pythonhosted.org/packages/25/6e/ca4a5434eb0e502210f591b97537d322546e4833dcb4d470a48c375c5540/pep517-0.13.1-py3-none-any.whl",
616
+ "sha256": "31b206f67165b3536dd577c5c3f1518e8fbaf38cbc57efff8369a392feff1721",
617
+ "type": "zip",
618
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
619
+ }
620
+ },
621
+ "pypi__pip": {
622
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
623
+ "ruleClassName": "http_archive",
624
+ "attributes": {
625
+ "url": "https://files.pythonhosted.org/packages/8a/6a/19e9fe04fca059ccf770861c7d5721ab4c2aebc539889e97c7977528a53b/pip-24.0-py3-none-any.whl",
626
+ "sha256": "ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc",
627
+ "type": "zip",
628
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
629
+ }
630
+ },
631
+ "pypi__pip_tools": {
632
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
633
+ "ruleClassName": "http_archive",
634
+ "attributes": {
635
+ "url": "https://files.pythonhosted.org/packages/0d/dc/38f4ce065e92c66f058ea7a368a9c5de4e702272b479c0992059f7693941/pip_tools-7.4.1-py3-none-any.whl",
636
+ "sha256": "4c690e5fbae2f21e87843e89c26191f0d9454f362d8acdbd695716493ec8b3a9",
637
+ "type": "zip",
638
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
639
+ }
640
+ },
641
+ "pypi__pyproject_hooks": {
642
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
643
+ "ruleClassName": "http_archive",
644
+ "attributes": {
645
+ "url": "https://files.pythonhosted.org/packages/ae/f3/431b9d5fe7d14af7a32340792ef43b8a714e7726f1d7b69cc4e8e7a3f1d7/pyproject_hooks-1.1.0-py3-none-any.whl",
646
+ "sha256": "7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2",
647
+ "type": "zip",
648
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
649
+ }
650
+ },
651
+ "pypi__setuptools": {
652
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
653
+ "ruleClassName": "http_archive",
654
+ "attributes": {
655
+ "url": "https://files.pythonhosted.org/packages/90/99/158ad0609729111163fc1f674a5a42f2605371a4cf036d0441070e2f7455/setuptools-78.1.1-py3-none-any.whl",
656
+ "sha256": "c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561",
657
+ "type": "zip",
658
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
659
+ }
660
+ },
661
+ "pypi__tomli": {
662
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
663
+ "ruleClassName": "http_archive",
664
+ "attributes": {
665
+ "url": "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl",
666
+ "sha256": "939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
667
+ "type": "zip",
668
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
669
+ }
670
+ },
671
+ "pypi__wheel": {
672
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
673
+ "ruleClassName": "http_archive",
674
+ "attributes": {
675
+ "url": "https://files.pythonhosted.org/packages/7d/cd/d7460c9a869b16c3dd4e1e403cce337df165368c71d6af229a74699622ce/wheel-0.43.0-py3-none-any.whl",
676
+ "sha256": "55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81",
677
+ "type": "zip",
678
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
679
+ }
680
+ },
681
+ "pypi__zipp": {
682
+ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl",
683
+ "ruleClassName": "http_archive",
684
+ "attributes": {
685
+ "url": "https://files.pythonhosted.org/packages/da/55/a03fd7240714916507e1fcf7ae355bd9d9ed2e6db492595f1a67f61681be/zipp-3.18.2-py3-none-any.whl",
686
+ "sha256": "dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e",
687
+ "type": "zip",
688
+ "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n"
689
+ }
690
+ }
691
+ },
692
+ "recordedRepoMappingEntries": [
693
+ [
694
+ "rules_python~",
695
+ "bazel_tools",
696
+ "bazel_tools"
697
+ ],
698
+ [
699
+ "rules_python~",
700
+ "pypi__build",
701
+ "rules_python~~config~pypi__build"
702
+ ],
703
+ [
704
+ "rules_python~",
705
+ "pypi__click",
706
+ "rules_python~~config~pypi__click"
707
+ ],
708
+ [
709
+ "rules_python~",
710
+ "pypi__colorama",
711
+ "rules_python~~config~pypi__colorama"
712
+ ],
713
+ [
714
+ "rules_python~",
715
+ "pypi__importlib_metadata",
716
+ "rules_python~~config~pypi__importlib_metadata"
717
+ ],
718
+ [
719
+ "rules_python~",
720
+ "pypi__installer",
721
+ "rules_python~~config~pypi__installer"
722
+ ],
723
+ [
724
+ "rules_python~",
725
+ "pypi__more_itertools",
726
+ "rules_python~~config~pypi__more_itertools"
727
+ ],
728
+ [
729
+ "rules_python~",
730
+ "pypi__packaging",
731
+ "rules_python~~config~pypi__packaging"
732
+ ],
733
+ [
734
+ "rules_python~",
735
+ "pypi__pep517",
736
+ "rules_python~~config~pypi__pep517"
737
+ ],
738
+ [
739
+ "rules_python~",
740
+ "pypi__pip",
741
+ "rules_python~~config~pypi__pip"
742
+ ],
743
+ [
744
+ "rules_python~",
745
+ "pypi__pip_tools",
746
+ "rules_python~~config~pypi__pip_tools"
747
+ ],
748
+ [
749
+ "rules_python~",
750
+ "pypi__pyproject_hooks",
751
+ "rules_python~~config~pypi__pyproject_hooks"
752
+ ],
753
+ [
754
+ "rules_python~",
755
+ "pypi__setuptools",
756
+ "rules_python~~config~pypi__setuptools"
757
+ ],
758
+ [
759
+ "rules_python~",
760
+ "pypi__tomli",
761
+ "rules_python~~config~pypi__tomli"
762
+ ],
763
+ [
764
+ "rules_python~",
765
+ "pypi__wheel",
766
+ "rules_python~~config~pypi__wheel"
767
+ ],
768
+ [
769
+ "rules_python~",
770
+ "pypi__zipp",
771
+ "rules_python~~config~pypi__zipp"
772
+ ]
773
+ ]
774
+ }
775
+ },
776
+ "@@rules_python~//python/uv:uv.bzl%uv": {
777
+ "general": {
778
+ "bzlTransitiveDigest": "b2l7eQNeidPDzpdj1+RSuGVmjgZGCpGxl+y2y6Rtpco=",
779
+ "usagesDigest": "fvn6L92mc0TfUt4ABOl23nXkpqvpuUDcR5ofLKp6TcI=",
780
+ "recordedFileInputs": {},
781
+ "recordedDirentsInputs": {},
782
+ "envVariables": {},
783
+ "generatedRepoSpecs": {
784
+ "uv": {
785
+ "bzlFile": "@@rules_python~//python/uv/private:uv_toolchains_repo.bzl",
786
+ "ruleClassName": "uv_toolchains_repo",
787
+ "attributes": {
788
+ "toolchain_type": "'@@rules_python~//python/uv:uv_toolchain_type'",
789
+ "toolchain_names": [
790
+ "none"
791
+ ],
792
+ "toolchain_implementations": {
793
+ "none": "'@@rules_python~//python:none'"
794
+ },
795
+ "toolchain_compatible_with": {
796
+ "none": [
797
+ "@platforms//:incompatible"
798
+ ]
799
+ },
800
+ "toolchain_target_settings": {}
801
+ }
802
+ }
803
+ },
804
+ "recordedRepoMappingEntries": [
805
+ [
806
+ "rules_python~",
807
+ "bazel_tools",
808
+ "bazel_tools"
809
+ ],
810
+ [
811
+ "rules_python~",
812
+ "platforms",
813
+ "platforms"
814
+ ]
815
+ ]
816
+ }
817
+ },
818
+ "@@yq.bzl~//yq:extensions.bzl%yq": {
819
+ "general": {
820
+ "bzlTransitiveDigest": "61Uz+o5PnlY0jJfPZEUNqsKxnM/UCLeWsn5VVCc8u5Y=",
821
+ "usagesDigest": "bIxL1iOc27/N1kOtSvmFz78f2t5UG/igKD4PiTidq98=",
822
+ "recordedFileInputs": {},
823
+ "recordedDirentsInputs": {},
824
+ "envVariables": {},
825
+ "generatedRepoSpecs": {
826
+ "yq_darwin_amd64": {
827
+ "bzlFile": "@@yq.bzl~//yq/toolchain:platforms.bzl",
828
+ "ruleClassName": "yq_platform_repo",
829
+ "attributes": {
830
+ "platform": "darwin_amd64",
831
+ "version": "4.45.1"
832
+ }
833
+ },
834
+ "yq_darwin_arm64": {
835
+ "bzlFile": "@@yq.bzl~//yq/toolchain:platforms.bzl",
836
+ "ruleClassName": "yq_platform_repo",
837
+ "attributes": {
838
+ "platform": "darwin_arm64",
839
+ "version": "4.45.1"
840
+ }
841
+ },
842
+ "yq_linux_amd64": {
843
+ "bzlFile": "@@yq.bzl~//yq/toolchain:platforms.bzl",
844
+ "ruleClassName": "yq_platform_repo",
845
+ "attributes": {
846
+ "platform": "linux_amd64",
847
+ "version": "4.45.1"
848
+ }
849
+ },
850
+ "yq_linux_arm64": {
851
+ "bzlFile": "@@yq.bzl~//yq/toolchain:platforms.bzl",
852
+ "ruleClassName": "yq_platform_repo",
853
+ "attributes": {
854
+ "platform": "linux_arm64",
855
+ "version": "4.45.1"
856
+ }
857
+ },
858
+ "yq_linux_s390x": {
859
+ "bzlFile": "@@yq.bzl~//yq/toolchain:platforms.bzl",
860
+ "ruleClassName": "yq_platform_repo",
861
+ "attributes": {
862
+ "platform": "linux_s390x",
863
+ "version": "4.45.1"
864
+ }
865
+ },
866
+ "yq_linux_riscv64": {
867
+ "bzlFile": "@@yq.bzl~//yq/toolchain:platforms.bzl",
868
+ "ruleClassName": "yq_platform_repo",
869
+ "attributes": {
870
+ "platform": "linux_riscv64",
871
+ "version": "4.45.1"
872
+ }
873
+ },
874
+ "yq_linux_ppc64le": {
875
+ "bzlFile": "@@yq.bzl~//yq/toolchain:platforms.bzl",
876
+ "ruleClassName": "yq_platform_repo",
877
+ "attributes": {
878
+ "platform": "linux_ppc64le",
879
+ "version": "4.45.1"
880
+ }
881
+ },
882
+ "yq_windows_amd64": {
883
+ "bzlFile": "@@yq.bzl~//yq/toolchain:platforms.bzl",
884
+ "ruleClassName": "yq_platform_repo",
885
+ "attributes": {
886
+ "platform": "windows_amd64",
887
+ "version": "4.45.1"
888
+ }
889
+ },
890
+ "yq_toolchains": {
891
+ "bzlFile": "@@yq.bzl~//yq/toolchain:toolchain.bzl",
892
+ "ruleClassName": "yq_toolchains_repo",
893
+ "attributes": {
894
+ "user_repository_name": "yq"
895
+ }
896
+ }
897
+ },
898
+ "recordedRepoMappingEntries": []
899
+ }
900
+ }
901
+ }
902
+ }
bazel/test_external/hello-embind-externs.js ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ // This file prevents customJSFunctionToTestClosure from being minified by the Closure compiler.
2
+ Module.customJSFunctionToTestClosure = function() {}
bazel/test_external/hello-embind-interface.js ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ Module.customJSFunctionToTestClosure = function(firstParam, secondParam) {
2
+ console.log("This function adds two numbers to get", firstParam + secondParam);
3
+ }
bazel/test_external/hello-embind.cc ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <emscripten/bind.h>
2
+
3
+ using namespace emscripten;
4
+
5
+ class HelloClass {
6
+ public:
7
+ static std::string SayHello(const std::string &name) {
8
+ return "Yo! " + name;
9
+ };
10
+ };
11
+
12
+ EMSCRIPTEN_BINDINGS(Hello) {
13
+ emscripten::class_<HelloClass>("HelloClass")
14
+ .constructor<>()
15
+ .class_function("SayHello", &HelloClass::SayHello);
16
+ }
bazel/test_external/hello-world.cc ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ #include <iostream>
2
+
3
+ int main(int argc, char** argv) {
4
+ std::cout << "hello world!" << std::endl;
5
+ return 0;
6
+ }