mirror of
https://github.com/raysan5/raylib.git
synced 2025-09-06 03:18:14 +00:00
@@ -1,354 +0,0 @@
|
||||
version: 2.1
|
||||
|
||||
orbs:
|
||||
win: circleci/windows@5.0
|
||||
|
||||
executors:
|
||||
ubuntu:
|
||||
docker:
|
||||
- image: buildpack-deps:focal
|
||||
mac_arm64:
|
||||
environment:
|
||||
EMSDK_NOTTY: "1"
|
||||
# Without this, any `brew install` command will result in self-update of
|
||||
# brew itself which takes more than 4 minutes.
|
||||
HOMEBREW_NO_AUTO_UPDATE: "1"
|
||||
macos:
|
||||
xcode: "13.4.1"
|
||||
resource_class: macos.m1.medium.gen1
|
||||
linux_arm64:
|
||||
machine:
|
||||
image: ubuntu-2004:2023.07.1
|
||||
resource_class: arm.medium
|
||||
|
||||
commands:
|
||||
setup-macos:
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Install CMake
|
||||
command: brew install cmake
|
||||
test-macos:
|
||||
steps:
|
||||
- run:
|
||||
name: test.sh
|
||||
command: test/test.sh
|
||||
- run:
|
||||
name: test.py
|
||||
command: |
|
||||
source emsdk_env.sh
|
||||
test/test.py
|
||||
test-bazel-linux:
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: install bazelisk
|
||||
command: |
|
||||
wget https://github.com/bazelbuild/bazelisk/releases/download/v1.25.0/bazelisk-linux-amd64
|
||||
chmod +x bazelisk-linux-amd64
|
||||
mv bazelisk-linux-amd64 /usr/local/bin/bazel
|
||||
- run: test/test_bazel.sh
|
||||
test-bazel-mac:
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: install bazelisk
|
||||
command: |
|
||||
brew install bazelisk
|
||||
- run: test/test_bazel_mac.sh
|
||||
test-bazel-windows:
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Download Bazelisk
|
||||
shell: powershell.exe
|
||||
command: |
|
||||
$ProgressPreference = "SilentlyContinue"
|
||||
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 )
|
||||
- run:
|
||||
name: Run Tests
|
||||
shell: powershell.exe
|
||||
command: |
|
||||
$env:Path += ";C:\Python27amd64;$pwd\temp\bazel"
|
||||
.\test\test_bazel.ps1
|
||||
|
||||
jobs:
|
||||
flake8:
|
||||
executor: ubuntu
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: install pip
|
||||
command: |
|
||||
apt-get update -q
|
||||
apt-get install -q -y python3-pip
|
||||
- run: python3 -m pip install --upgrade pip
|
||||
- run: python3 -m pip install flake8==7.1.1
|
||||
- run: python3 -m flake8 --show-source --statistics --extend-exclude=./scripts
|
||||
|
||||
test-linux:
|
||||
executor: ubuntu
|
||||
environment:
|
||||
EMSDK_NOTTY: "1"
|
||||
# This is needed because the old gcc-7 that is installed on debian/bionic
|
||||
# generates warnings about unused variables when doing C++17
|
||||
# destructuring:
|
||||
# https://github.com/WebAssembly/binaryen/issues/4353
|
||||
CXXFLAGS: "-Wno-unused-variable"
|
||||
# I don't know why circleci VMs pretent to have 36 cores but its a lie.
|
||||
EMSDK_NUM_CORES: "4"
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Install debian packages
|
||||
command: apt-get update -q && apt-get install -q -y cmake build-essential openjdk-8-jre-headless ksh zsh
|
||||
- run: test/test_node_path.sh
|
||||
- run: test/test.sh
|
||||
- run: test/test_source_env.sh
|
||||
- run:
|
||||
name: test.py
|
||||
command: |
|
||||
source emsdk_env.sh
|
||||
test/test.py
|
||||
test-linux-arm64:
|
||||
executor: linux_arm64
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Install debian packages
|
||||
command: sudo apt-get update -q && sudo apt-get install -q cmake build-essential openjdk-8-jre-headless
|
||||
- run: test/test.sh
|
||||
test-mac-arm64:
|
||||
executor: mac_arm64
|
||||
steps:
|
||||
- setup-macos
|
||||
- test-macos
|
||||
test-windows:
|
||||
executor:
|
||||
name: win/server-2019
|
||||
shell: bash.exe
|
||||
environment:
|
||||
# We need python installed before we can test anytyhing.
|
||||
# There seems to be undocument copy of python installed here. Hopefully
|
||||
# if this disappears there will be another way of getting a re-installed
|
||||
# version.
|
||||
PYTHON_BIN: "C:\\Python27amd64"
|
||||
PYTHONUNBUFFERED: "1"
|
||||
EMSDK_NOTTY: "1"
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Add python to bash path
|
||||
command: echo "export PATH=\"$PATH:/c/python27amd64/\"" >> $BASH_ENV
|
||||
- run:
|
||||
name: Install latest
|
||||
shell: cmd.exe
|
||||
command: test\test.bat
|
||||
- run:
|
||||
name: test.py
|
||||
command: |
|
||||
source emsdk_env.sh
|
||||
python test/test.py
|
||||
|
||||
- run:
|
||||
name: flagless (process/shell) test
|
||||
shell: powershell.exe
|
||||
command: |
|
||||
test/test_activation.ps1
|
||||
|
||||
- run:
|
||||
name: --permanent test
|
||||
shell: powershell.exe
|
||||
command: |
|
||||
$env:PERMANENT_FLAG="--permanent"
|
||||
test/test_activation.ps1
|
||||
|
||||
- run:
|
||||
name: --system test
|
||||
shell: powershell.exe
|
||||
command: |
|
||||
$env:SYSTEM_FLAG="--system"
|
||||
test/test_activation.ps1
|
||||
|
||||
- run:
|
||||
name: Process/Shell PATH preservation test
|
||||
shell: powershell.exe
|
||||
command: |
|
||||
test/test_path_preservation.ps1
|
||||
|
||||
- run:
|
||||
name: User PATH preservation test
|
||||
shell: powershell.exe
|
||||
command: |
|
||||
$env:PERMANENT_FLAG="--permanent"
|
||||
test/test_path_preservation.ps1
|
||||
|
||||
- run:
|
||||
name: System PATH preservation test
|
||||
shell: powershell.exe
|
||||
command: |
|
||||
$env:SYSTEM_FLAG="--system"
|
||||
test/test_path_preservation.ps1
|
||||
|
||||
build-docker-image-x64:
|
||||
executor: ubuntu
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: install docker
|
||||
command: |
|
||||
apt-get update -q
|
||||
apt-get install -q -y ca-certificates curl gnupg lsb-release
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
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
|
||||
apt-get update -q
|
||||
apt-get install -q -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||
- setup_remote_docker
|
||||
# Build the `latest` version of EMSDK as docker image
|
||||
- run:
|
||||
name: build
|
||||
command: make -C ./docker version=latest build
|
||||
- run:
|
||||
name: test
|
||||
command: make -C ./docker version=latest test
|
||||
|
||||
publish-docker-image-x64:
|
||||
executor: ubuntu
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: install docker
|
||||
command: |
|
||||
apt-get update -q
|
||||
apt-get install -q -y ca-certificates curl gnupg lsb-release
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
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
|
||||
apt-get update -q
|
||||
apt-get install -q -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||
- setup_remote_docker
|
||||
- run:
|
||||
name: build
|
||||
command: make -C ./docker version=${CIRCLE_TAG} build
|
||||
- run:
|
||||
name: test
|
||||
command: make -C ./docker version=${CIRCLE_TAG} test
|
||||
- run:
|
||||
name: push image
|
||||
command: |
|
||||
docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"
|
||||
make -C ./docker version=${CIRCLE_TAG} alias=latest push
|
||||
|
||||
publish-docker-image-arm64:
|
||||
executor: linux_arm64
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: build
|
||||
command: make -C ./docker version=${CIRCLE_TAG} build
|
||||
- run:
|
||||
name: test
|
||||
command: make -C ./docker version=${CIRCLE_TAG} test
|
||||
- run:
|
||||
name: push image
|
||||
command: |
|
||||
docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"
|
||||
make -C ./docker version=${CIRCLE_TAG} alias=${CIRCLE_TAG}-arm64 only_alias=true push
|
||||
|
||||
test-bazel7-linux:
|
||||
executor: ubuntu
|
||||
environment:
|
||||
USE_BAZEL_VERSION: "7.x"
|
||||
steps:
|
||||
- test-bazel-linux
|
||||
|
||||
test-bazel-latest-linux:
|
||||
executor: ubuntu
|
||||
steps:
|
||||
- test-bazel-linux
|
||||
|
||||
test-bazel7-mac-arm64:
|
||||
executor: mac_arm64
|
||||
environment:
|
||||
USE_BAZEL_VERSION: "7.x"
|
||||
steps:
|
||||
- test-bazel-mac
|
||||
|
||||
test-bazel-latest-mac-arm64:
|
||||
executor: mac_arm64
|
||||
steps:
|
||||
- test-bazel-mac
|
||||
|
||||
test-bazel7-windows:
|
||||
executor:
|
||||
name: win/server-2019
|
||||
shell: powershell.exe -ExecutionPolicy Bypass
|
||||
environment:
|
||||
PYTHONUNBUFFERED: "1"
|
||||
EMSDK_NOTTY: "1"
|
||||
# For some reason version resolution with "7.x" does not work on Windows,
|
||||
# so we have to specify a full version.
|
||||
USE_BAZEL_VERSION: "7.6.1"
|
||||
steps:
|
||||
- test-bazel-windows
|
||||
|
||||
test-bazel-latest-windows:
|
||||
executor:
|
||||
name: win/server-2019
|
||||
shell: powershell.exe -ExecutionPolicy Bypass
|
||||
environment:
|
||||
PYTHONUNBUFFERED: "1"
|
||||
EMSDK_NOTTY: "1"
|
||||
steps:
|
||||
- test-bazel-windows
|
||||
|
||||
workflows:
|
||||
flake8:
|
||||
jobs:
|
||||
- flake8
|
||||
test-linux:
|
||||
jobs:
|
||||
- test-linux
|
||||
test-linux-arm64:
|
||||
jobs:
|
||||
- test-linux-arm64
|
||||
test-mac-arm64:
|
||||
jobs:
|
||||
- test-mac-arm64
|
||||
test-windows:
|
||||
jobs:
|
||||
- test-windows
|
||||
build-docker-image:
|
||||
jobs:
|
||||
- build-docker-image-x64
|
||||
- publish-docker-image-x64:
|
||||
filters:
|
||||
branches:
|
||||
ignore: /.*/
|
||||
tags:
|
||||
only: /.*/
|
||||
- publish-docker-image-arm64:
|
||||
filters:
|
||||
branches:
|
||||
ignore: /.*/
|
||||
tags:
|
||||
only: /.*/
|
||||
test-bazel7-linux:
|
||||
jobs:
|
||||
- test-bazel7-linux
|
||||
test-bazel-latest-linux:
|
||||
jobs:
|
||||
- test-bazel-latest-linux
|
||||
test-bazel7-mac-arm64:
|
||||
jobs:
|
||||
- test-bazel7-mac-arm64
|
||||
test-bazel-latest-mac-arm64:
|
||||
jobs:
|
||||
- test-bazel-latest-mac-arm64
|
||||
test-bazel7-windows:
|
||||
jobs:
|
||||
- test-bazel7-windows
|
||||
test-bazel-latest-windows:
|
||||
jobs:
|
||||
- test-bazel-latest-windows
|
@@ -1,21 +0,0 @@
|
||||
# Ignore everything
|
||||
*
|
||||
|
||||
# Allow the entrypoint/test script inside the Docker container
|
||||
!/docker/entrypoint.sh
|
||||
!/docker/test_dockerimage.sh
|
||||
|
||||
# Allow license file
|
||||
!LICENSE
|
||||
|
||||
# Allow necessary build files in top-level directory
|
||||
!emscripten-releases-tags.json
|
||||
!emsdk
|
||||
!emsdk.py
|
||||
!emsdk_env.sh
|
||||
!emsdk_manifest.json
|
||||
|
||||
# Allow files required to install legacy versions
|
||||
!legacy-binaryen-tags.txt
|
||||
!legacy-emscripten-tags.txt
|
||||
!llvm-tags-64bit.txt
|
@@ -1,24 +0,0 @@
|
||||
[flake8]
|
||||
extend-exclude =
|
||||
./.*,
|
||||
./binaryen,
|
||||
./clang,
|
||||
./crunch,
|
||||
./downloads,
|
||||
./emscripten,
|
||||
./fastcomp-clang,
|
||||
./fastcomp,
|
||||
./git,
|
||||
./gnu,
|
||||
./llvm,
|
||||
./node,
|
||||
./python,
|
||||
./releases,
|
||||
./temp,
|
||||
./upstream,
|
||||
|
||||
# E111: Indentation is not a multiple of four
|
||||
# E114: Indentation is not a multiple of four (comment)
|
||||
extend-ignore = E111, E114
|
||||
|
||||
max-line-length = 326
|
18
emsdk-cache/emsdk-main/.github/stale.yml
vendored
18
emsdk-cache/emsdk-main/.github/stale.yml
vendored
@@ -1,18 +0,0 @@
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 365
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 30
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- pinned
|
||||
- security
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: wontfix
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because there has been no
|
||||
activity in the past year. It will be closed automatically if no further
|
||||
activity occurs in the next 30 days. Feel free to re-open at any time if this
|
||||
issue is still relevant.
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: false
|
@@ -1,40 +0,0 @@
|
||||
name: Create Release PR
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
lto-sha:
|
||||
required: true
|
||||
type: string
|
||||
nonlto-sha:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
create-release-pr:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
- name: Run create_release.py
|
||||
run: python3 scripts/create_release.py -r ${{ inputs.lto-sha }} -a ${{ inputs.nonlto-sha }} --gh-action
|
||||
- name: Create PR
|
||||
id: cpr
|
||||
uses: peter-evans/create-pull-request@v6
|
||||
with:
|
||||
token: ${{ secrets.EMSCRIPTEN_BOT_TOKEN }}
|
||||
title: Release ${{ env.RELEASE_VERSION }}
|
||||
commit-message: |
|
||||
Release ${{ env.RELEASE_VERSION }}
|
||||
team-reviewers: release-reviewers
|
||||
labels: release
|
||||
body: |
|
||||
With emscripten-releases revisions:
|
||||
https://chromium.googlesource.com/emscripten-releases/+/${{ inputs.lto-sha }} (LTO)
|
||||
https://chromium.googlesource.com/emscripten-releases/+/${{ inputs.nonlto-sha }} (asserts)
|
||||
branch: release_${{ env.RELEASE_VERSION }}
|
||||
delete-branch: true
|
||||
- name: Enable auto-merge
|
||||
run: gh pr merge --squash --auto "${{ steps.cpr.outputs.pull-request-number }}"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.EMSCRIPTEN_BOT_TOKEN }}
|
@@ -1,78 +0,0 @@
|
||||
# When a release commit created by create-release.yml is landed, create the
|
||||
# corresponding tag.
|
||||
name: Create release tag
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- emscripten-releases-tags.json
|
||||
- .github/workflows/tag-release.yml
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
tag-release:
|
||||
# Only activate for commits created by the create-release.yml workflow.
|
||||
# The assumption is that when manual changes happen, we want to handle
|
||||
# tagging manually too.
|
||||
name: Check for release commit and create tag
|
||||
# The author is emscripten-bot when triggered from Chromium CI, and github-actions when manually triggered.
|
||||
if: ${{ github.event.head_commit.author.username == 'github-actions[bot]' || github.event.head_commit.author.username == 'emscripten-bot' }}
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
is_release: ${{ steps.create-tag.outputs.result }}
|
||||
steps:
|
||||
- name: Match message and create tag
|
||||
id: create-tag
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.EMSCRIPTEN_BOT_TOKEN }}
|
||||
# A commit with the message of the form 'Release X.Y.Z' is expected
|
||||
# to have been created by create_release.py and update the latest
|
||||
# release in emscripten-releases-tags.json
|
||||
script: |
|
||||
const message = `${{ github.event.head_commit.message }}`
|
||||
const regex = /Release ([0-9]+.[0-9]+.[0-9]+)/;
|
||||
const match = message.match(regex);
|
||||
let is_release = false;
|
||||
if (match) {
|
||||
const release = match[1];
|
||||
console.log(`Matched release ${release}`);
|
||||
await github.rest.git.createRef({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
ref: `refs/tags/${release}`,
|
||||
sha: context.sha
|
||||
});
|
||||
is_release = true;
|
||||
} else {
|
||||
console.log(`Commit message: '${message}' did not match pattern`);
|
||||
}
|
||||
return is_release;
|
||||
|
||||
dispatch-emscripten-tag:
|
||||
name: Dispatch workflow to tag emscripten repo
|
||||
runs-on: ubuntu-latest
|
||||
needs: tag-release
|
||||
if: ${{ needs.tag-release.outputs.is_release == 'true' }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
- name: Find emscripten revision
|
||||
# get_emscripten_revision_info.py sets env.EMSCRIPTEN_HASH to the
|
||||
# emscripten hash associated with the latest release in
|
||||
# emscripten-releases-tags.json
|
||||
run: python3 scripts/get_emscripten_revision_info.py
|
||||
- name: Dispatch emscripten workflow
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.EMSCRIPTEN_BOT_TOKEN }}
|
||||
script: |
|
||||
await github.rest.actions.createWorkflowDispatch({
|
||||
owner: context.repo.owner,
|
||||
repo: 'emscripten',
|
||||
workflow_id: 'tag-release.yml',
|
||||
ref: 'main',
|
||||
inputs: { 'release-sha': '${{ env.EMSCRIPTEN_HASH }}' }
|
||||
});
|
35
emsdk-cache/emsdk-main/.gitignore
vendored
35
emsdk-cache/emsdk-main/.gitignore
vendored
@@ -1,35 +0,0 @@
|
||||
*.pyc
|
||||
__pycache__
|
||||
|
||||
# Support for --embedded configs
|
||||
/.emscripten
|
||||
/.emscripten.old
|
||||
/.emscripten_cache
|
||||
/.emscripten_cache__last_clear
|
||||
/.emscripten_sanity
|
||||
/.emscripten_sanity_wasm
|
||||
|
||||
# Tags files that get generated at runtime
|
||||
/emscripten-releases-tot.txt
|
||||
|
||||
# File that get download/extracted by emsdk itself
|
||||
/ccache
|
||||
/gnu
|
||||
/upstream
|
||||
/fastcomp
|
||||
/fastcomp-clang/
|
||||
/llvm
|
||||
/ninja
|
||||
/releases
|
||||
/clang
|
||||
/emscripten
|
||||
/git
|
||||
/node
|
||||
/python
|
||||
/temp
|
||||
/downloads
|
||||
/crunch
|
||||
/java
|
||||
/mingw
|
||||
/spidermonkey
|
||||
/binaryen
|
@@ -1,27 +0,0 @@
|
||||
Copyright (c) 2018 Emscripten authors (see AUTHORS in Emscripten)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
This is the MIT/Expat Licence. For more information see:
|
||||
|
||||
1. http://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
2. http://en.wikipedia.org/wiki/MIT_License
|
@@ -1,245 +0,0 @@
|
||||
Emscripten SDK
|
||||
==============
|
||||
|
||||
[](https://circleci.com/gh/emscripten-core/emsdk/tree/main)
|
||||
|
||||
The Emscripten toolchain is distributed as a standalone Emscripten SDK. The SDK
|
||||
provides all the required tools, such as Clang, Python and Node.js along with an
|
||||
update mechanism that enables migrating to newer Emscripten versions as they are
|
||||
released.
|
||||
|
||||
You can also set up Emscripten from source, without the pre-built SDK, see
|
||||
"Installing from Source" below.
|
||||
|
||||
## Downloads / How do I get the latest Emscripten build?
|
||||
|
||||
To get started with Emscripten development, see the [Emscripten website
|
||||
documentation](https://emscripten.org/docs/getting_started/downloads.html).
|
||||
|
||||
That explains how to use the emsdk to get the latest binary builds (without
|
||||
compiling from source). Basically, that amounts to
|
||||
|
||||
```
|
||||
git pull
|
||||
./emsdk install latest
|
||||
./emsdk activate latest
|
||||
```
|
||||
|
||||
## SDK Concepts
|
||||
|
||||
The Emscripten SDK is effectively a small package manager for tools that are
|
||||
used in conjunction with Emscripten. The following glossary highlights the
|
||||
important concepts to help understanding the internals of the SDK:
|
||||
|
||||
* **Tool**: The basic unit of software bundled in the SDK. A Tool has a name and
|
||||
a version. For example, 'clang-3.2-32bit' is a Tool that contains the 32-bit
|
||||
version of the Clang v3.2 compiler.
|
||||
* **SDK**: A set of tools. For example, 'sdk-1.5.6-32bit' is an SDK consisting
|
||||
of the tools `clang-3.2-32bit`, `node-0.10.17-32bit`, `python-2.7.5.1-32bit`
|
||||
and `emscripten-1.5.6`.
|
||||
* **Active Tool/SDK**: Emscripten SDK stores compiler configuration in a file
|
||||
called `.emscripten` within the emsdk directory. This file points to paths
|
||||
for Emscripten, Python, Clang and so on. If the configuration file points to a
|
||||
Tool in a specific directory, then that tool is denoted as being
|
||||
**active**. This mechanism allows switching between different installed
|
||||
tools and SDKs.
|
||||
* **emsdk**: This is the name of the manager script that Emscripten SDK is
|
||||
accessed through. Most operations are of the form `emsdk <command>`.
|
||||
|
||||
## System Requirements
|
||||
|
||||
Using the emsdk pre-compiled packages requires only the minimal set of
|
||||
dependencies lists below. When building from source a wider set of tools
|
||||
include git, cmake, and a host compiler are required. See:
|
||||
https://emscripten.org/docs/building_from_source/toolchain_what_is_needed.html.
|
||||
|
||||
### Mac OS X
|
||||
|
||||
- For Intel-based Macs, macOS 10.13 or newer. For ARM64 M1 based Macs, macOS
|
||||
11.0 or newer.
|
||||
- `java`: For running closure compiler (optional). After installing emscripten
|
||||
via emsdk, typing 'emcc --help' should pop up a OS X dialog "Java is not
|
||||
installed. To open java, you need a Java SE 6 runtime. Would you like to
|
||||
install one now?" that will automatically download a Java runtime to the
|
||||
system.
|
||||
|
||||
### Linux
|
||||
|
||||
- `python`: Version 3.8 or above.
|
||||
- `java`: For running closure compiler (optional)
|
||||
|
||||
The emsdk pre-compiled binaries are built against Ubuntu/Focal 20.04 LTS and
|
||||
therefore depend on system libraries compatible with versions of `glibc` and
|
||||
`libstdc++` present in that release. If your linux distribution is very old
|
||||
you may not be able to use the pre-compiled binaries packages.
|
||||
|
||||
### Windows
|
||||
|
||||
- `java`: For running closure compiler (optional)
|
||||
|
||||
## Uninstalling the Emscripten SDK
|
||||
|
||||
To remove the Emscripten SDK, simply delete the emsdk directory.
|
||||
|
||||
## SDK Maintenance
|
||||
|
||||
The following tasks are common with the Emscripten SDK:
|
||||
|
||||
### How do I work the emsdk utility?
|
||||
|
||||
Run `emsdk help` or just `emsdk` to get information about all available commands.
|
||||
|
||||
### How do I check the installation status and version of the SDK and tools?
|
||||
|
||||
To get a list of all currently installed tools and SDK versions, and all
|
||||
available tools, run `emsdk list`.
|
||||
* A line will be printed for each tool/SDK that is available for installation.
|
||||
* The text `INSTALLED` will be shown for each tool that has already been
|
||||
installed.
|
||||
* If a tool/SDK is currently active, a star * will be shown next to it.
|
||||
* If a tool/SDK is currently active, but the terminal your are calling emsdk
|
||||
from does not have `PATH` and environment set up to utilize that tool, a star
|
||||
in parentheses (\*) will be shown next to it. Run `emsdk_env.bat` (Windows) or
|
||||
`source ./emsdk_env.sh` (Linux and OS X) to set up the environment for the
|
||||
calling terminal.
|
||||
|
||||
### How do I install a tool/SDK version?
|
||||
|
||||
Run the command `emsdk install <tool/sdk name>` to download and install a new
|
||||
tool or an SDK version.
|
||||
|
||||
### How do I remove a tool or an SDK?
|
||||
|
||||
Run the command `emsdk uninstall <tool/sdk name>` to delete the given tool or
|
||||
SDK from the local hard drive completely.
|
||||
|
||||
### How do I check for updates to the Emscripten SDK?
|
||||
|
||||
`emsdk update` will fetch package information for all the new tools and
|
||||
SDK versions. After that, run `emsdk install <tool/sdk name>` to install a new
|
||||
version.
|
||||
|
||||
### How do I install an old Emscripten compiler version?
|
||||
|
||||
Emsdk contains a history of old compiler versions that you can use to maintain
|
||||
your migration path. Type `emsdk list --old` to get a list of archived tool and
|
||||
SDK versions, and `emsdk install <name_of_tool>` to install it.
|
||||
|
||||
### I want to build from source!
|
||||
|
||||
Some Emsdk Tool and SDK targets refer to packages that are precompiled, and
|
||||
no compilation is needed when installing them. Other Emsdk Tools and SDK
|
||||
targets come "from source", meaning that they will fetch the source repositories
|
||||
using git, and compile the package on demand.
|
||||
|
||||
When you run `emsdk list`, it will group the Tools and SDKs under these two
|
||||
categories.
|
||||
|
||||
To obtain and build latest wasm SDK from source, run
|
||||
|
||||
```
|
||||
emsdk install sdk-main-64bit
|
||||
emsdk activate sdk-main-64bit
|
||||
```
|
||||
|
||||
You can use this target for example to bootstrap developing patches to LLVM,
|
||||
Binaryen or Emscripten. (After initial installation, use `git remote add`
|
||||
in the cloned tree to add your own fork to push changes as patches)
|
||||
|
||||
If you only intend to contribute to Emscripten repository, and not to LLVM
|
||||
or Binaryen, you can also use precompiled versions of them, and only git
|
||||
clone the Emscripten repository. For more details, see
|
||||
|
||||
https://emscripten.org/docs/contributing/developers_guide.html?highlight=developer#setting-up
|
||||
|
||||
### When working on git branches compiled from source, how do I update to a newer compiler version?
|
||||
|
||||
Unlike tags and precompiled versions, a few of the SDK packages are based on
|
||||
"moving" git branches and compiled from source (e.g. sdk-main,
|
||||
sdk-main, emscripten-main, binaryen-main). Because of that, the
|
||||
compiled versions will eventually go out of date as new commits are introduced
|
||||
to the development branches. To update an old compiled installation of one of
|
||||
this branches, simply reissue the "emsdk install" command on that tool/SDK. This
|
||||
will `git pull` the latest changes to the branch and issue an incremental
|
||||
recompilation of the target in question. This way you can keep calling `emsdk
|
||||
install` to keep an Emscripten installation up to date with a given git branch.
|
||||
|
||||
Note though that if the previously compiled branch is very old, sometimes CMake
|
||||
gets confused and is unable to properly rebuild a project. This has happened in
|
||||
the past e.g. when LLVM migrated to requiring a newer CMake version. In cases of
|
||||
any odd compilation errors, it is advised to try deleting the intermediate build
|
||||
directory to clear the build (e.g. "emsdk/clang/fastcomp/build_xxx/") before
|
||||
reissuing `emsdk install`.
|
||||
|
||||
### How do I change the currently active SDK version?
|
||||
|
||||
You can toggle between different tools and SDK versions by running `emsdk
|
||||
activate <tool/sdk name>`. Activating a tool will set up `~/.emscripten` to
|
||||
point to that particular tool. On Windows, you can pass the option `--permanent` to
|
||||
the `activate` command to register the environment permanently for the current user. Use `--system` to do this for all users.
|
||||
|
||||
### How do I track the latest Emscripten development with the SDK?
|
||||
|
||||
A common and supported use case of the Emscripten SDK is to enable the workflow
|
||||
where you directly interact with the github repositories. This allows you to
|
||||
obtain new features and latest fixes immediately as they are pushed to the
|
||||
github repository, without having to wait for release to be tagged. You do not
|
||||
need a github account or a fork of Emscripten to do this. To switch to using the
|
||||
latest git development branch `main`, run the following:
|
||||
|
||||
emsdk install git-1.9.4 # Install git. Skip if the system already has it.
|
||||
emsdk install sdk-main-64bit # Clone+pull the latest emscripten-core/emscripten/main.
|
||||
emsdk activate sdk-main-64bit # Set the main SDK as the currently active one.
|
||||
|
||||
### How do I use my own Emscripten github fork with the SDK?
|
||||
|
||||
It is also possible to use your own fork of the Emscripten repository via the
|
||||
SDK. This is achieved with standard git machinery, so if you are already
|
||||
acquainted with working on multiple remotes in a git clone, these steps should
|
||||
be familiar to you. This is useful in the case when you want to make your own
|
||||
modifications to the Emscripten toolchain, but still keep using the SDK
|
||||
environment and tools. To set up your own fork as the currently active
|
||||
Emscripten toolchain, first install the `sdk-main` SDK like shown in the
|
||||
previous section, and then run the following commands in the emsdk directory:
|
||||
|
||||
cd emscripten/main
|
||||
# Add a git remote link to your own repository.
|
||||
git remote add myremote https://github.com/mygituseraccount/emscripten.git
|
||||
# Obtain the changes in your link.
|
||||
git fetch myremote
|
||||
# Switch the emscripten-main tool to use your fork.
|
||||
git checkout -b mymain --track myremote/main
|
||||
|
||||
In this way you can utilize the Emscripten SDK tools while using your own git
|
||||
fork. You can switch back and forth between remotes via the `git checkout`
|
||||
command as usual.
|
||||
|
||||
### How do I use Emscripten SDK with a custom version of python, java, node.js or some other tool?
|
||||
|
||||
The provided Emscripten SDK targets are metapackages that refer to a specific
|
||||
set of tools that have been tested to work together. For example,
|
||||
`sdk-1.35.0-64bit` is an alias to the individual packages `clang-e1.35.0-64bit`,
|
||||
`node-4.1.1-64bit`, `python-2.7.5.3-64bit` and `emscripten-1.35.0`. This means
|
||||
that if you install this version of the SDK, both python and node.js will be
|
||||
installed inside emsdk as well. If you want to use your own/system python or
|
||||
node.js instead, you can opt to install emsdk by specifying the individual set
|
||||
of packages that you want to use. For example, `emsdk install
|
||||
clang-e1.35.0-64bit emscripten-1.35.0` will only install the Emscripten
|
||||
LLVM/Clang compiler and the Emscripten frontend without supplying python and
|
||||
node.js.
|
||||
|
||||
### My installation fails with "fatal error: ld terminated with signal 9 [Killed]"?
|
||||
|
||||
This may happen if the system runs out of memory. If you are attempting to build
|
||||
one of the packages from source and are running in a virtual OS or may have
|
||||
relatively little RAM and disk space available, then the build might fail. Try
|
||||
feeding your computer more memory. Another thing to try is to force emsdk
|
||||
install to build in a singlethreaded mode, which will require less RAM
|
||||
simultaneously. To do this, pass the `-j1` flag to the `emsdk install` command.
|
||||
|
||||
### How do I run Emscripten on 32-bit systems or non-x86-64 systems?
|
||||
|
||||
Emscripten SDK releases are no longer packaged or maintained for 32-bit systems.
|
||||
If you want to run Emscripten on a 32-bit system, you can try manually building
|
||||
the compiler. Follow the steps in the above section "Building an Emscripten tag
|
||||
or branch from source" to get started.
|
@@ -1,16 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
If you have discovered a security vulnerability in this project, please report it
|
||||
privately. **Do not disclose it as a public issue.** This gives us time to work with you
|
||||
to fix the issue before public exposure, reducing the chance that the exploit will be
|
||||
used before a patch is released.
|
||||
|
||||
Please submit the report as a [security bug on the Chromium tracker](https://bugs.chromium.org/p/chromium/issues/entry?template=Security%20Bug).
|
||||
|
||||
Please provide the following information in your report:
|
||||
|
||||
- A description of the vulnerability and its impact
|
||||
- How to reproduce the issue
|
||||
- Make it clear that it's an Emscripten SDK bug.
|
||||
|
||||
We ask that you give us 90 days to work on a fix before public exposure.
|
@@ -1 +0,0 @@
|
||||
build --incompatible_enable_cc_toolchain_resolution
|
1
emsdk-cache/emsdk-main/bazel/.gitignore
vendored
1
emsdk-cache/emsdk-main/bazel/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
/bazel-*
|
@@ -1,79 +0,0 @@
|
||||
module(
|
||||
name = "emsdk",
|
||||
version = "4.0.13",
|
||||
)
|
||||
|
||||
bazel_dep(name = "platforms", version = "0.0.11")
|
||||
bazel_dep(name = "bazel_skylib", version = "1.7.1")
|
||||
bazel_dep(name = "aspect_rules_js", version = "1.42.0")
|
||||
bazel_dep(name = "rules_nodejs", version = "6.3.2")
|
||||
bazel_dep(name = "rules_cc", version = "0.1.1")
|
||||
bazel_dep(name = "rules_python", version = "1.3.0")
|
||||
|
||||
python = use_extension("@rules_python//python/extensions:python.bzl", "python")
|
||||
python.toolchain(
|
||||
python_version = "3.13",
|
||||
)
|
||||
|
||||
node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
|
||||
node.toolchain(node_version = "20.18.0")
|
||||
use_repo(node, "nodejs")
|
||||
|
||||
emscripten_deps = use_extension(
|
||||
"//:emscripten_deps.bzl",
|
||||
"emscripten_deps",
|
||||
)
|
||||
use_repo(emscripten_deps, "emscripten_bin_linux")
|
||||
use_repo(emscripten_deps, "emscripten_bin_linux_arm64")
|
||||
use_repo(emscripten_deps, "emscripten_bin_mac")
|
||||
use_repo(emscripten_deps, "emscripten_bin_mac_arm64")
|
||||
use_repo(emscripten_deps, "emscripten_bin_win")
|
||||
|
||||
npm = use_extension(
|
||||
"@aspect_rules_js//npm:extensions.bzl",
|
||||
"npm",
|
||||
)
|
||||
npm.npm_translate_lock(
|
||||
name = "emscripten_npm_linux",
|
||||
data = ["@emscripten_bin_linux//:emscripten/package.json"],
|
||||
npm_package_lock = "@emscripten_bin_linux//:emscripten/package-lock.json",
|
||||
)
|
||||
npm.npm_translate_lock(
|
||||
name = "emscripten_npm_linux_arm64",
|
||||
data = ["@emscripten_bin_linux_arm64//:emscripten/package.json"],
|
||||
npm_package_lock = "@emscripten_bin_linux_arm64//:emscripten/package-lock.json",
|
||||
)
|
||||
npm.npm_translate_lock(
|
||||
name = "emscripten_npm_mac",
|
||||
data = ["@emscripten_bin_mac//:emscripten/package.json"],
|
||||
npm_package_lock = "@emscripten_bin_mac//:emscripten/package-lock.json",
|
||||
)
|
||||
npm.npm_translate_lock(
|
||||
name = "emscripten_npm_mac_arm64",
|
||||
data = ["@emscripten_bin_mac_arm64//:emscripten/package.json"],
|
||||
npm_package_lock = "@emscripten_bin_mac_arm64//:emscripten/package-lock.json",
|
||||
)
|
||||
npm.npm_translate_lock(
|
||||
name = "emscripten_npm_win",
|
||||
data = ["@emscripten_bin_win//:emscripten/package.json"],
|
||||
npm_package_lock = "@emscripten_bin_win//:emscripten/package-lock.json",
|
||||
)
|
||||
use_repo(
|
||||
npm,
|
||||
"emscripten_npm_linux",
|
||||
"emscripten_npm_linux_arm64",
|
||||
"emscripten_npm_mac",
|
||||
"emscripten_npm_mac_arm64",
|
||||
"emscripten_npm_win",
|
||||
)
|
||||
|
||||
emscripten_cache = use_extension("//:emscripten_cache.bzl", "emscripten_cache")
|
||||
use_repo(emscripten_cache, "emscripten_cache")
|
||||
|
||||
register_toolchains(
|
||||
"//emscripten_toolchain:cc-toolchain-wasm-emscripten_linux",
|
||||
"//emscripten_toolchain:cc-toolchain-wasm-emscripten_linux_arm64",
|
||||
"//emscripten_toolchain:cc-toolchain-wasm-emscripten_mac",
|
||||
"//emscripten_toolchain:cc-toolchain-wasm-emscripten_mac_arm64",
|
||||
"//emscripten_toolchain:cc-toolchain-wasm-emscripten_win",
|
||||
)
|
3696
emsdk-cache/emsdk-main/bazel/MODULE.bazel.lock
generated
3696
emsdk-cache/emsdk-main/bazel/MODULE.bazel.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,90 +0,0 @@
|
||||
# Bazel Emscripten toolchain
|
||||
|
||||
## Setup Instructions
|
||||
|
||||
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.
|
||||
|
||||
In your `MODULE.bazel` file, put:
|
||||
```starlark
|
||||
emsdk_version = "4.0.6"
|
||||
bazel_dep(name = "emsdk", version = emsdk_version)
|
||||
git_override(
|
||||
module_name = "emsdk",
|
||||
remote = "https://github.com/emscripten-core/emsdk.git",
|
||||
strip_prefix = "bazel",
|
||||
tag = emsdk_version,
|
||||
)
|
||||
```
|
||||
|
||||
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`:
|
||||
|
||||
```
|
||||
emscripten_deps = use_extension(
|
||||
"@emsdk//:emscripten_deps.bzl",
|
||||
"emscripten_deps",
|
||||
)
|
||||
emscripten_deps.config(version = "4.0.1")
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
Put the following line into your `.bazelrc`:
|
||||
|
||||
```
|
||||
build --incompatible_enable_cc_toolchain_resolution
|
||||
```
|
||||
|
||||
Then write a new rule wrapping your `cc_binary`.
|
||||
|
||||
```starlark
|
||||
load("@rules_cc//cc:defs.bzl", "cc_binary")
|
||||
load("@emsdk//emscripten_toolchain:wasm_rules.bzl", "wasm_cc_binary")
|
||||
|
||||
cc_binary(
|
||||
name = "hello-world",
|
||||
srcs = ["hello-world.cc"],
|
||||
)
|
||||
|
||||
wasm_cc_binary(
|
||||
name = "hello-world-wasm",
|
||||
cc_target = ":hello-world",
|
||||
)
|
||||
```
|
||||
|
||||
Now you can run `bazel build :hello-world-wasm`. The result of this build will
|
||||
be the individual files produced by emscripten. Note that some of these files
|
||||
may be empty. This is because bazel has no concept of optional outputs for
|
||||
rules.
|
||||
|
||||
`wasm_cc_binary` uses transition to use emscripten toolchain on `cc_target`
|
||||
and all of its dependencies, and does not require amending `.bazelrc`. This
|
||||
is the preferred way, since it also unpacks the resulting tarball.
|
||||
|
||||
The Emscripten cache shipped by default does not include LTO, 64-bit or PIC
|
||||
builds of the system libraries and ports. If you wish to use these features you
|
||||
will need to declare the cache in your `MODULE.bazel` as follows. Note
|
||||
that the configuration consists of the same flags that can be passed to
|
||||
embuilder. If `targets` is not set, all system libraries and ports will be
|
||||
built, i.e., the `ALL` option to embuilder.
|
||||
|
||||
```starlark
|
||||
emscripten_cache = use_extension(
|
||||
"@emsdk//:emscripten_cache.bzl",
|
||||
"emscripten_cache",
|
||||
)
|
||||
emscripten_cache.configuration(flags = ["--lto"])
|
||||
emscripten_cache.targets(targets = [
|
||||
"crtbegin",
|
||||
"libprintf_long_double-debug",
|
||||
"libstubs-debug",
|
||||
"libnoexit",
|
||||
"libc-debug",
|
||||
"libdlmalloc",
|
||||
"libcompiler_rt",
|
||||
"libc++-noexcept",
|
||||
"libc++abi-debug-noexcept",
|
||||
"libsockets"
|
||||
])
|
||||
```
|
||||
|
||||
See `test_external/` for an example using [embind](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html).
|
@@ -1,2 +0,0 @@
|
||||
build:wasm --incompatible_enable_cc_toolchain_resolution
|
||||
build:wasm --platforms=@emsdk//:platform_wasm
|
@@ -1,93 +0,0 @@
|
||||
"""A templated build file for emscripten repositories"""
|
||||
|
||||
EMSCRIPTEN_BUILD_FILE_CONTENT_TEMPLATE = """
|
||||
package(default_visibility = ['//visibility:public'])
|
||||
|
||||
filegroup(
|
||||
name = "all",
|
||||
srcs = glob(["**"]),
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "includes",
|
||||
srcs = glob([
|
||||
"emscripten/cache/sysroot/include/c++/v1/**",
|
||||
"emscripten/cache/sysroot/include/compat/**",
|
||||
"emscripten/cache/sysroot/include/**",
|
||||
"lib/clang/**/include/**",
|
||||
]),
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "emcc_common",
|
||||
srcs = [
|
||||
"emscripten/emcc.py",
|
||||
"emscripten/embuilder.py",
|
||||
"emscripten/emscripten-version.txt",
|
||||
"emscripten/cache/sysroot_install.stamp",
|
||||
"emscripten/src/settings.js",
|
||||
"emscripten/src/settings_internal.js",
|
||||
] + glob(
|
||||
include = [
|
||||
"emscripten/third_party/**",
|
||||
"emscripten/tools/**",
|
||||
],
|
||||
exclude = [
|
||||
"**/__pycache__/**",
|
||||
],
|
||||
),
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "compiler_files",
|
||||
srcs = [
|
||||
"bin/clang{bin_extension}",
|
||||
"bin/clang++{bin_extension}",
|
||||
":emcc_common",
|
||||
":includes",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "linker_files",
|
||||
srcs = [
|
||||
"bin/clang{bin_extension}",
|
||||
"bin/llvm-ar{bin_extension}",
|
||||
"bin/llvm-dwarfdump{bin_extension}",
|
||||
"bin/llvm-nm{bin_extension}",
|
||||
"bin/llvm-objcopy{bin_extension}",
|
||||
"bin/wasm-ctor-eval{bin_extension}",
|
||||
"bin/wasm-emscripten-finalize{bin_extension}",
|
||||
"bin/wasm-ld{bin_extension}",
|
||||
"bin/wasm-metadce{bin_extension}",
|
||||
"bin/wasm-opt{bin_extension}",
|
||||
"bin/wasm-split{bin_extension}",
|
||||
"bin/wasm2js{bin_extension}",
|
||||
":emcc_common",
|
||||
] + glob(
|
||||
include = [
|
||||
"emscripten/cache/sysroot/lib/**",
|
||||
"emscripten/node_modules/**",
|
||||
"emscripten/src/**",
|
||||
],
|
||||
),
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "ar_files",
|
||||
srcs = [
|
||||
"bin/llvm-ar{bin_extension}",
|
||||
"emscripten/emar.py",
|
||||
"emscripten/emscripten-version.txt",
|
||||
"emscripten/src/settings.js",
|
||||
"emscripten/src/settings_internal.js",
|
||||
] + glob(
|
||||
include = [
|
||||
"emscripten/tools/**",
|
||||
],
|
||||
exclude = [
|
||||
"**/__pycache__/**",
|
||||
],
|
||||
),
|
||||
)
|
||||
"""
|
@@ -1,113 +0,0 @@
|
||||
BUILD_FILE_CONTENT_TEMPLATE = """
|
||||
package(default_visibility = ['//visibility:public'])
|
||||
exports_files(['emscripten_config'])
|
||||
"""
|
||||
|
||||
EMBUILDER_CONFIG_TEMPLATE = """
|
||||
CACHE = '{cache}'
|
||||
BINARYEN_ROOT = '{binaryen_root}'
|
||||
LLVM_ROOT = '{llvm_root}'
|
||||
"""
|
||||
|
||||
def get_root_and_script_ext(repository_ctx):
|
||||
if repository_ctx.os.name.startswith("linux"):
|
||||
if "amd64" in repository_ctx.os.arch or "x86_64" in repository_ctx.os.arch:
|
||||
return (repository_ctx.path(Label("@emscripten_bin_linux//:BUILD.bazel")).dirname, "")
|
||||
elif "aarch64" in repository_ctx.os.arch:
|
||||
return (repository_ctx.path(Label("@emscripten_bin_linux_arm64//:BUILD.bazel")).dirname, "")
|
||||
else:
|
||||
fail("Unsupported architecture for Linux")
|
||||
elif repository_ctx.os.name.startswith("mac"):
|
||||
if "amd64" in repository_ctx.os.arch or "x86_64" in repository_ctx.os.arch:
|
||||
return (repository_ctx.path(Label("@emscripten_bin_mac//:BUILD.bazel")).dirname, "")
|
||||
elif "aarch64" in repository_ctx.os.arch:
|
||||
return (repository_ctx.path(Label("@emscripten_bin_mac_arm64//:BUILD.bazel")).dirname, "")
|
||||
else:
|
||||
fail("Unsupported architecture for MacOS")
|
||||
elif repository_ctx.os.name.startswith("windows"):
|
||||
return (repository_ctx.path(Label("@emscripten_bin_win//:BUILD.bazel")).dirname, ".bat")
|
||||
else:
|
||||
fail("Unsupported operating system")
|
||||
|
||||
def _emscripten_cache_repository_impl(repository_ctx):
|
||||
# Read the default emscripten configuration file
|
||||
default_config = repository_ctx.read(
|
||||
repository_ctx.path(
|
||||
Label("@emsdk//emscripten_toolchain:default_config"),
|
||||
),
|
||||
)
|
||||
|
||||
if repository_ctx.attr.targets or repository_ctx.attr.configuration:
|
||||
root, script_ext = get_root_and_script_ext(repository_ctx)
|
||||
llvm_root = root.get_child("bin")
|
||||
cache = repository_ctx.path("cache")
|
||||
|
||||
# Create configuration file
|
||||
embuilder_config_content = EMBUILDER_CONFIG_TEMPLATE.format(
|
||||
cache = cache,
|
||||
binaryen_root = root,
|
||||
llvm_root = llvm_root,
|
||||
)
|
||||
repository_ctx.file("embuilder_config", embuilder_config_content)
|
||||
embuilder_config_path = repository_ctx.path("embuilder_config")
|
||||
embuilder_path = "{}{}".format(root.get_child("emscripten").get_child("embuilder"), script_ext)
|
||||
|
||||
# Prepare the command line
|
||||
if repository_ctx.attr.targets:
|
||||
targets = repository_ctx.attr.targets
|
||||
else:
|
||||
# If no targets are requested, build everything
|
||||
targets = ["ALL"]
|
||||
flags = ["--em-config", embuilder_config_path] + repository_ctx.attr.configuration
|
||||
embuilder_args = [embuilder_path] + flags + ["build"] + targets
|
||||
|
||||
# Run embuilder
|
||||
repository_ctx.report_progress("Building secondary cache")
|
||||
result = repository_ctx.execute(
|
||||
embuilder_args,
|
||||
quiet = True,
|
||||
environment = {
|
||||
"EM_IGNORE_SANITY": "1",
|
||||
"EM_NODE_JS": "empty",
|
||||
},
|
||||
)
|
||||
if result.return_code != 0:
|
||||
fail("Embuilder exited with a non-zero return code")
|
||||
|
||||
# Override Emscripten's cache with the secondary cache
|
||||
default_config += "CACHE = '{}'\n".format(cache)
|
||||
|
||||
# Create the configuration file for the toolchain and export
|
||||
repository_ctx.file("emscripten_config", default_config)
|
||||
repository_ctx.file("BUILD.bazel", BUILD_FILE_CONTENT_TEMPLATE)
|
||||
|
||||
_emscripten_cache_repository = repository_rule(
|
||||
implementation = _emscripten_cache_repository_impl,
|
||||
attrs = {
|
||||
"configuration": attr.string_list(),
|
||||
"targets": attr.string_list(),
|
||||
},
|
||||
)
|
||||
|
||||
def _emscripten_cache_impl(ctx):
|
||||
all_configuration = []
|
||||
all_targets = []
|
||||
for mod in ctx.modules:
|
||||
for configuration in mod.tags.configuration:
|
||||
all_configuration += configuration.flags
|
||||
for targets in mod.tags.targets:
|
||||
all_targets += targets.targets
|
||||
|
||||
_emscripten_cache_repository(
|
||||
name = "emscripten_cache",
|
||||
configuration = all_configuration,
|
||||
targets = all_targets,
|
||||
)
|
||||
|
||||
emscripten_cache = module_extension(
|
||||
tag_classes = {
|
||||
"configuration": tag_class(attrs = {"flags": attr.string_list()}),
|
||||
"targets": tag_class(attrs = {"targets": attr.string_list()}),
|
||||
},
|
||||
implementation = _emscripten_cache_impl,
|
||||
)
|
@@ -1,99 +0,0 @@
|
||||
load(":remote_emscripten_repository.bzl", "remote_emscripten_repository")
|
||||
load(":revisions.bzl", "EMSCRIPTEN_TAGS")
|
||||
|
||||
def _parse_version(v):
|
||||
return [int(u) for u in v.split(".")]
|
||||
|
||||
def _empty_repository_impl(ctx):
|
||||
ctx.file("MODULE.bazel", """module(name = "{}")""".format(ctx.name))
|
||||
ctx.file("BUILD.bazel", "")
|
||||
|
||||
_empty_repository = repository_rule(
|
||||
implementation = _empty_repository_impl,
|
||||
)
|
||||
|
||||
def emscripten_repo_name(name):
|
||||
return "emscripten_bin_{}".format(name)
|
||||
|
||||
def _emscripten_deps_impl(ctx):
|
||||
version = None
|
||||
|
||||
for mod in ctx.modules:
|
||||
for config in mod.tags.config:
|
||||
if config.version and version != None:
|
||||
fail("More than one emscripten version specified!")
|
||||
version = config.version
|
||||
if version == None:
|
||||
version = "latest"
|
||||
|
||||
if version == "latest":
|
||||
version = reversed(sorted(EMSCRIPTEN_TAGS.keys(), key = _parse_version))[0]
|
||||
|
||||
revision = EMSCRIPTEN_TAGS[version]
|
||||
|
||||
emscripten_url = "https://storage.googleapis.com/webassembly/emscripten-releases-builds/{}/{}/wasm-binaries{}.{}"
|
||||
|
||||
remote_emscripten_repository(
|
||||
name = emscripten_repo_name("linux"),
|
||||
bin_extension = "",
|
||||
sha256 = revision.sha_linux,
|
||||
strip_prefix = "install",
|
||||
type = "tar.xz",
|
||||
url = emscripten_url.format("linux", revision.hash, "", "tar.xz"),
|
||||
)
|
||||
|
||||
# Not all versions have a linux/arm64 release: https://github.com/emscripten-core/emsdk/issues/547
|
||||
if hasattr(revision, "sha_linux_arm64"):
|
||||
remote_emscripten_repository(
|
||||
name = emscripten_repo_name("linux_arm64"),
|
||||
bin_extension = "",
|
||||
sha256 = revision.sha_linux_arm64,
|
||||
strip_prefix = "install",
|
||||
type = "tar.xz",
|
||||
url = emscripten_url.format("linux", revision.hash, "-arm64", "tar.xz"),
|
||||
)
|
||||
else:
|
||||
_empty_repository(
|
||||
name = emscripten_repo_name("linux_arm64"),
|
||||
)
|
||||
|
||||
remote_emscripten_repository(
|
||||
name = emscripten_repo_name("mac"),
|
||||
bin_extension = "",
|
||||
sha256 = revision.sha_mac,
|
||||
strip_prefix = "install",
|
||||
type = "tar.xz",
|
||||
url = emscripten_url.format("mac", revision.hash, "", "tar.xz"),
|
||||
)
|
||||
|
||||
remote_emscripten_repository(
|
||||
name = emscripten_repo_name("mac_arm64"),
|
||||
bin_extension = "",
|
||||
sha256 = revision.sha_mac_arm64,
|
||||
strip_prefix = "install",
|
||||
type = "tar.xz",
|
||||
url = emscripten_url.format("mac", revision.hash, "-arm64", "tar.xz"),
|
||||
)
|
||||
|
||||
remote_emscripten_repository(
|
||||
name = emscripten_repo_name("win"),
|
||||
bin_extension = ".exe",
|
||||
sha256 = revision.sha_win,
|
||||
strip_prefix = "install",
|
||||
type = "zip",
|
||||
url = emscripten_url.format("win", revision.hash, "", "zip"),
|
||||
)
|
||||
|
||||
emscripten_deps = module_extension(
|
||||
tag_classes = {
|
||||
"config": tag_class(
|
||||
attrs = {
|
||||
"version": attr.string(
|
||||
doc = "Version to use. 'latest' to use latest.",
|
||||
values = ["latest"] + EMSCRIPTEN_TAGS.keys(),
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
implementation = _emscripten_deps_impl,
|
||||
)
|
@@ -1,43 +0,0 @@
|
||||
load("//:emscripten_deps.bzl", "emscripten_repo_name")
|
||||
load("//:remote_emscripten_repository.bzl", "create_toolchains", "emscripten_toolchain_name")
|
||||
load("@rules_python//python:py_binary.bzl", "py_binary")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
# dlmalloc.bc is implicitly added by the emscripten toolchain
|
||||
cc_library(name = "malloc")
|
||||
|
||||
create_toolchains(
|
||||
name = emscripten_toolchain_name("linux"),
|
||||
repo_name = emscripten_repo_name("linux"),
|
||||
exec_compatible_with = [ "@platforms//os:linux", "@platforms//cpu:x86_64"],
|
||||
)
|
||||
|
||||
create_toolchains(
|
||||
name = emscripten_toolchain_name("linux_arm64"),
|
||||
repo_name = emscripten_repo_name("linux_arm64"),
|
||||
exec_compatible_with = ["@platforms//os:linux", "@platforms//cpu:arm64"],
|
||||
)
|
||||
|
||||
create_toolchains(
|
||||
name = emscripten_toolchain_name("mac"),
|
||||
repo_name = emscripten_repo_name("mac"),
|
||||
exec_compatible_with = ["@platforms//os:macos", "@platforms//cpu:x86_64"],
|
||||
)
|
||||
|
||||
create_toolchains(
|
||||
name = emscripten_toolchain_name("mac_arm64"),
|
||||
repo_name = emscripten_repo_name("mac_arm64"),
|
||||
exec_compatible_with = ["@platforms//os:macos", "@platforms//cpu:arm64"],
|
||||
)
|
||||
|
||||
create_toolchains(
|
||||
name = emscripten_toolchain_name("win"),
|
||||
repo_name = emscripten_repo_name("win"),
|
||||
exec_compatible_with = ["@platforms//os:windows", "@platforms//cpu:x86_64"],
|
||||
)
|
||||
|
||||
py_binary(
|
||||
name = "wasm_binary",
|
||||
srcs = ["wasm_binary.py"],
|
||||
)
|
@@ -1,16 +0,0 @@
|
||||
import os
|
||||
import platform
|
||||
|
||||
ROOT_DIR = os.environ["ROOT_DIR"]
|
||||
EMSCRIPTEN_ROOT = os.environ["EMSCRIPTEN"]
|
||||
BINARYEN_ROOT = os.path.join(ROOT_DIR, os.environ["EM_BIN_PATH"])
|
||||
LLVM_ROOT = os.path.join(BINARYEN_ROOT, "bin")
|
||||
NODE_JS = os.path.join(ROOT_DIR, os.environ["NODE_JS_PATH"])
|
||||
FROZEN_CACHE = True
|
||||
|
||||
# This works around an issue with Bazel RBE where the symlinks in node_modules/.bin
|
||||
# are uploaded as the linked files, which means the cli.js cannot load its
|
||||
# dependencies from the expected locations.
|
||||
# See https://github.com/emscripten-core/emscripten/pull/16640 for more
|
||||
CLOSURE_COMPILER = [NODE_JS, os.path.join(EMSCRIPTEN_ROOT, "node_modules",
|
||||
"google-closure-compiler", "cli.js")]
|
@@ -1,5 +0,0 @@
|
||||
@ECHO OFF
|
||||
|
||||
call %~dp0\env.bat
|
||||
|
||||
py -3 %EMSCRIPTEN%\emar.py %*
|
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
source $(dirname $0)/env.sh
|
||||
|
||||
exec python3 $EMSCRIPTEN/emar.py "$@"
|
@@ -1,5 +0,0 @@
|
||||
@ECHO OFF
|
||||
|
||||
call %~dp0\env.bat
|
||||
|
||||
py -3 %EMSCRIPTEN%\emcc.py %*
|
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
source $(dirname $0)/env.sh
|
||||
|
||||
exec python3 $EMSCRIPTEN/emcc.py "$@"
|
@@ -1,5 +0,0 @@
|
||||
@ECHO OFF
|
||||
|
||||
call %~dp0\env.bat
|
||||
|
||||
py -3 %~dp0\link_wrapper.py %*
|
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
source $(dirname $0)/env.sh
|
||||
|
||||
exec python3 $(dirname $0)/link_wrapper.py "$@"
|
@@ -1,6 +0,0 @@
|
||||
@ECHO OFF
|
||||
|
||||
set ROOT_DIR=%EXT_BUILD_ROOT%
|
||||
if "%ROOT_DIR%"=="" set ROOT_DIR=%CD%
|
||||
set EMSCRIPTEN=%ROOT_DIR%\%EM_BIN_PATH%\emscripten
|
||||
set EM_CONFIG=%ROOT_DIR%\%EM_CONFIG_PATH%
|
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
export ROOT_DIR=${EXT_BUILD_ROOT:-$(pwd -P)}
|
||||
export EMSCRIPTEN=$ROOT_DIR/$EM_BIN_PATH/emscripten
|
||||
export EM_CONFIG=$ROOT_DIR/$EM_CONFIG_PATH
|
@@ -1,167 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
"""wrapper around emcc link step.
|
||||
|
||||
This wrapper currently serves the following purposes.
|
||||
|
||||
1. When building with --config=wasm the final output is multiple files, usually
|
||||
at least one .js and one .wasm file. Since the cc_binary link step only
|
||||
allows a single output, we must tar up the outputs into a single file.
|
||||
|
||||
2. Add quotes around arguments that need them in the response file to work
|
||||
around a bazel quirk.
|
||||
|
||||
3. Ensure the external_debug_info section of the wasm points at the correct
|
||||
bazel path.
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
# Only argument should be @path/to/parameter/file
|
||||
assert sys.argv[1][0] == '@', sys.argv
|
||||
param_filename = sys.argv[1][1:]
|
||||
param_file_args = [line.strip() for line in open(param_filename, 'r').readlines()]
|
||||
|
||||
# Re-write response file if needed.
|
||||
if any(' ' in a for a in param_file_args):
|
||||
new_param_filename = param_filename + '.modified'
|
||||
with open(new_param_filename, 'w') as f:
|
||||
for param in param_file_args:
|
||||
if ' ' in param:
|
||||
f.write('"%s"' % param)
|
||||
else:
|
||||
f.write(param)
|
||||
f.write('\n')
|
||||
sys.argv[1] = '@' + new_param_filename
|
||||
|
||||
emcc_py = os.path.join(os.environ['EMSCRIPTEN'], 'emcc.py')
|
||||
rtn = subprocess.call([sys.executable, emcc_py] + sys.argv[1:])
|
||||
if rtn != 0:
|
||||
sys.exit(1)
|
||||
|
||||
# Parse the arguments that we gave to the linker to determine what the output
|
||||
# file is named and what the output format is.
|
||||
parser = argparse.ArgumentParser(add_help=False)
|
||||
parser.add_argument('-o')
|
||||
parser.add_argument('--oformat')
|
||||
options = parser.parse_known_args(param_file_args)[0]
|
||||
output_file = options.o
|
||||
oformat = options.oformat
|
||||
outdir = os.path.normpath(os.path.dirname(output_file))
|
||||
base_name = os.path.basename(output_file)
|
||||
|
||||
# The output file name is the name of the build rule that was built.
|
||||
# Add an appropriate file extension based on --oformat.
|
||||
if oformat is not None:
|
||||
base_name_split = os.path.splitext(base_name)
|
||||
|
||||
# If the output name has no extension, give it the appropriate extension.
|
||||
if not base_name_split[1]:
|
||||
os.replace(output_file, output_file + '.' + oformat)
|
||||
|
||||
# If the output name does have an extension and it matches the output format,
|
||||
# change the base_name so it doesn't have an extension.
|
||||
elif base_name_split[1] == '.' + oformat:
|
||||
base_name = base_name_split[0]
|
||||
|
||||
# If the output name does have an extension and it does not match the output
|
||||
# format, change the base_name so it doesn't have an extension and rename
|
||||
# the output_file so it has the proper extension.
|
||||
# Note that if you do something like name your build rule "foo.js" and pass
|
||||
# "--oformat=html", emscripten will write to the same file for both the js and
|
||||
# html output, overwriting the js output entirely with the html.
|
||||
# Please don't do that.
|
||||
else:
|
||||
base_name = base_name_split[0]
|
||||
os.replace(output_file, os.path.join(outdir, base_name + '.' + oformat))
|
||||
|
||||
files = []
|
||||
extensions = [
|
||||
'.js',
|
||||
'.wasm',
|
||||
'.wasm.map',
|
||||
'.js.mem',
|
||||
'.fetch.js',
|
||||
'.worker.js',
|
||||
'.data',
|
||||
'.js.symbols',
|
||||
'.wasm.debug.wasm',
|
||||
'.html',
|
||||
'.aw.js'
|
||||
]
|
||||
|
||||
for ext in extensions:
|
||||
filename = base_name + ext
|
||||
if os.path.exists(os.path.join(outdir, filename)):
|
||||
files.append(filename)
|
||||
|
||||
wasm_base = os.path.join(outdir, base_name + '.wasm')
|
||||
if os.path.exists(wasm_base + '.debug.wasm') and os.path.exists(wasm_base):
|
||||
# If we have a .wasm.debug.wasm file and a .wasm file, we need to rewrite the
|
||||
# section in the .wasm file that refers to it. The path that's in there
|
||||
# is the blaze output path; we want it to be just the filename.
|
||||
|
||||
llvm_objcopy = os.path.join(
|
||||
os.environ['EM_BIN_PATH'], 'bin/llvm-objcopy')
|
||||
# First, check to make sure the .wasm file has the header that needs to be
|
||||
# rewritten.
|
||||
rtn = subprocess.call([
|
||||
llvm_objcopy,
|
||||
'--dump-section=external_debug_info=/dev/null',
|
||||
wasm_base], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
if rtn == 0:
|
||||
# If llvm-objcopy did not return an error, the external_debug_info section
|
||||
# must exist, so we're good to continue.
|
||||
|
||||
# Next we need to convert length of the filename to LEB128.
|
||||
# Start by converting the length of the filename to a bit string.
|
||||
bit_string = '{0:b}'.format(len(base_name + '.wasm.debug.wasm'))
|
||||
|
||||
# Pad the bit string with 0s so that its length is a multiple of 7.
|
||||
while len(bit_string) % 7 != 0:
|
||||
bit_string = '0' + bit_string
|
||||
|
||||
# Break up our bit string into chunks of 7.
|
||||
# We do this backwards because the final format is little-endian.
|
||||
final_bytes = bytearray()
|
||||
for i in reversed(range(0, len(bit_string), 7)):
|
||||
binary_part = bit_string[i:i + 7]
|
||||
if i != 0:
|
||||
# Every chunk except the last one needs to be prepended with '1'.
|
||||
# The length of each chunk is 7, so that one has an implicit '0'.
|
||||
binary_part = '1' + binary_part
|
||||
final_bytes.append(int(binary_part, 2))
|
||||
# Finally, add the actual filename.
|
||||
final_bytes.extend((base_name + '.wasm.debug.wasm').encode())
|
||||
|
||||
# Write our length + filename bytes to a temp file.
|
||||
with open(base_name + '_debugsection.tmp', 'wb+') as f:
|
||||
f.write(final_bytes)
|
||||
f.close()
|
||||
|
||||
# First delete the old section.
|
||||
subprocess.check_call([
|
||||
llvm_objcopy,
|
||||
wasm_base,
|
||||
'--remove-section=external_debug_info'])
|
||||
# Rewrite section with the new size and filename from the temp file.
|
||||
subprocess.check_call([
|
||||
llvm_objcopy,
|
||||
wasm_base,
|
||||
'--add-section=external_debug_info=' + base_name + '_debugsection.tmp'])
|
||||
|
||||
# Make sure we have at least one output file.
|
||||
if not len(files):
|
||||
print('emcc.py did not appear to output any known files!')
|
||||
sys.exit(1)
|
||||
|
||||
# cc_binary must output exactly one file; put all the output files in a tarball.
|
||||
cmd = ['tar', 'cf', base_name + '.tar'] + files
|
||||
subprocess.check_call(cmd, cwd=outdir)
|
||||
os.replace(os.path.join(outdir, base_name + '.tar'), output_file)
|
||||
|
||||
sys.exit(0)
|
File diff suppressed because it is too large
Load Diff
@@ -1,56 +0,0 @@
|
||||
"""Unpackages a bazel emscripten archive for use in a bazel BUILD rule.
|
||||
|
||||
This script will take a tar archive containing the output of the emscripten
|
||||
toolchain. This file contains any output files produced by a wasm_cc_binary or a
|
||||
cc_binary built with --config=wasm. The files are extracted into the given
|
||||
output paths.
|
||||
|
||||
The contents of the archive are expected to match the given outputs extnames.
|
||||
|
||||
This script and its accompanying Bazel rule should allow you to extract a
|
||||
WebAssembly binary into a larger web application.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import tarfile
|
||||
|
||||
|
||||
def ensure(f):
|
||||
if not os.path.exists(f):
|
||||
with open(f, 'w'):
|
||||
pass
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--archive', help='The archive to extract from.')
|
||||
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.')
|
||||
parser.add_argument('--allow_empty_outputs', help='If an output listed in --outputs does not exist, create it anyways.', action='store_true')
|
||||
args = parser.parse_args()
|
||||
|
||||
args.archive = os.path.normpath(args.archive)
|
||||
args.outputs = args.outputs.split(",")
|
||||
|
||||
tar = tarfile.open(args.archive)
|
||||
|
||||
for member in tar.getmembers():
|
||||
extname = '.' + member.name.split('.', 1)[1]
|
||||
for idx, output in enumerate(args.outputs):
|
||||
if output.endswith(extname):
|
||||
member_file = tar.extractfile(member)
|
||||
with open(output, "wb") as output_file:
|
||||
output_file.write(member_file.read())
|
||||
args.outputs.pop(idx)
|
||||
break
|
||||
|
||||
for output in args.outputs:
|
||||
extname = '.' + output.split('.', 1)[1]
|
||||
if args.allow_empty_outputs:
|
||||
ensure(output)
|
||||
else:
|
||||
print("[ERROR] Archive does not contain file with extname: %s" % extname)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
@@ -1,231 +0,0 @@
|
||||
"""wasm_cc_binary rule for compiling C++ targets to WebAssembly.
|
||||
"""
|
||||
|
||||
def _wasm_transition_impl(settings, attr):
|
||||
_ignore = (settings, attr)
|
||||
|
||||
features = list(settings["//command_line_option:features"])
|
||||
linkopts = list(settings["//command_line_option:linkopt"])
|
||||
|
||||
if attr.threads == "emscripten":
|
||||
# threads enabled
|
||||
features.append("use_pthreads")
|
||||
elif attr.threads == "off":
|
||||
# threads disabled
|
||||
features.append("-use_pthreads")
|
||||
|
||||
if attr.exit_runtime == True:
|
||||
features.append("exit_runtime")
|
||||
|
||||
if attr.backend == "llvm":
|
||||
features.append("llvm_backend")
|
||||
elif attr.backend == "emscripten":
|
||||
features.append("-llvm_backend")
|
||||
|
||||
if attr.simd:
|
||||
features.append("wasm_simd")
|
||||
|
||||
platform = "@emsdk//:platform_wasm"
|
||||
if attr.standalone:
|
||||
platform = "@emsdk//:platform_wasi"
|
||||
features.append("wasm_standalone")
|
||||
|
||||
return {
|
||||
"//command_line_option:compiler": "emscripten",
|
||||
"//command_line_option:cpu": "wasm",
|
||||
"//command_line_option:features": features,
|
||||
"//command_line_option:dynamic_mode": "off",
|
||||
"//command_line_option:linkopt": linkopts,
|
||||
"//command_line_option:platforms": [platform],
|
||||
# This is hardcoded to an empty cc_library because the malloc library
|
||||
# is implicitly added by the emscripten toolchain
|
||||
"//command_line_option:custom_malloc": "@emsdk//emscripten_toolchain:malloc",
|
||||
}
|
||||
|
||||
_wasm_transition = transition(
|
||||
implementation = _wasm_transition_impl,
|
||||
inputs = [
|
||||
"//command_line_option:features",
|
||||
"//command_line_option:linkopt",
|
||||
],
|
||||
outputs = [
|
||||
"//command_line_option:compiler",
|
||||
"//command_line_option:cpu",
|
||||
"//command_line_option:features",
|
||||
"//command_line_option:dynamic_mode",
|
||||
"//command_line_option:linkopt",
|
||||
"//command_line_option:platforms",
|
||||
"//command_line_option:custom_malloc",
|
||||
],
|
||||
)
|
||||
|
||||
_ALLOW_OUTPUT_EXTNAMES = [
|
||||
".js",
|
||||
".wasm",
|
||||
".wasm.map",
|
||||
".worker.js",
|
||||
".js.mem",
|
||||
".data",
|
||||
".fetch.js",
|
||||
".js.symbols",
|
||||
".wasm.debug.wasm",
|
||||
".html",
|
||||
".aw.js",
|
||||
]
|
||||
|
||||
_WASM_BINARY_COMMON_ATTRS = {
|
||||
"backend": attr.string(
|
||||
default = "_default",
|
||||
values = ["_default", "emscripten", "llvm"],
|
||||
),
|
||||
"cc_target": attr.label(
|
||||
cfg = _wasm_transition,
|
||||
mandatory = True,
|
||||
),
|
||||
"exit_runtime": attr.bool(
|
||||
default = False,
|
||||
),
|
||||
"threads": attr.string(
|
||||
default = "_default",
|
||||
values = ["_default", "emscripten", "off"],
|
||||
),
|
||||
"simd": attr.bool(
|
||||
default = False,
|
||||
),
|
||||
"standalone": attr.bool(
|
||||
default = False,
|
||||
),
|
||||
"_allowlist_function_transition": attr.label(
|
||||
default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
|
||||
),
|
||||
"_wasm_binary_extractor": attr.label(
|
||||
executable = True,
|
||||
allow_files = True,
|
||||
cfg = "exec",
|
||||
default = Label("@emsdk//emscripten_toolchain:wasm_binary"),
|
||||
),
|
||||
}
|
||||
|
||||
def _wasm_cc_binary_impl(ctx):
|
||||
args = ctx.actions.args()
|
||||
cc_target = ctx.attr.cc_target[0]
|
||||
|
||||
for output in ctx.outputs.outputs:
|
||||
valid_extname = False
|
||||
for allowed_extname in _ALLOW_OUTPUT_EXTNAMES:
|
||||
if output.path.endswith(allowed_extname):
|
||||
valid_extname = True
|
||||
break
|
||||
if not valid_extname:
|
||||
fail("Invalid output '{}'. Allowed extnames: {}".format(output.basename, ", ".join(_ALLOW_OUTPUT_EXTNAMES)))
|
||||
|
||||
args.add_all("--archive", ctx.files.cc_target)
|
||||
args.add_joined("--outputs", ctx.outputs.outputs, join_with = ",")
|
||||
|
||||
ctx.actions.run(
|
||||
inputs = ctx.files.cc_target,
|
||||
outputs = ctx.outputs.outputs,
|
||||
arguments = [args],
|
||||
executable = ctx.executable._wasm_binary_extractor,
|
||||
)
|
||||
|
||||
return [
|
||||
DefaultInfo(
|
||||
files = depset(ctx.outputs.outputs),
|
||||
# This is needed since rules like web_test usually have a data
|
||||
# dependency on this target.
|
||||
data_runfiles = ctx.runfiles(transitive_files = depset(ctx.outputs.outputs)),
|
||||
),
|
||||
OutputGroupInfo(_wasm_tar = cc_target.files),
|
||||
]
|
||||
|
||||
def _wasm_cc_binary_legacy_impl(ctx):
|
||||
cc_target = ctx.attr.cc_target[0]
|
||||
outputs = [
|
||||
ctx.outputs.loader,
|
||||
ctx.outputs.wasm,
|
||||
ctx.outputs.map,
|
||||
ctx.outputs.mem,
|
||||
ctx.outputs.fetch,
|
||||
ctx.outputs.worker,
|
||||
ctx.outputs.data,
|
||||
ctx.outputs.symbols,
|
||||
ctx.outputs.dwarf,
|
||||
ctx.outputs.html,
|
||||
ctx.outputs.audio_worklet,
|
||||
]
|
||||
|
||||
args = ctx.actions.args()
|
||||
args.add("--allow_empty_outputs")
|
||||
args.add_all("--archive", ctx.files.cc_target)
|
||||
args.add_joined("--outputs", outputs, join_with = ",")
|
||||
|
||||
ctx.actions.run(
|
||||
inputs = ctx.files.cc_target,
|
||||
outputs = outputs,
|
||||
arguments = [args],
|
||||
executable = ctx.executable._wasm_binary_extractor,
|
||||
)
|
||||
|
||||
return [
|
||||
DefaultInfo(
|
||||
executable = ctx.outputs.wasm,
|
||||
files = depset(outputs),
|
||||
# This is needed since rules like web_test usually have a data
|
||||
# dependency on this target.
|
||||
data_runfiles = ctx.runfiles(transitive_files = depset(outputs)),
|
||||
),
|
||||
OutputGroupInfo(_wasm_tar = cc_target.files),
|
||||
]
|
||||
|
||||
_wasm_cc_binary = rule(
|
||||
implementation = _wasm_cc_binary_impl,
|
||||
attrs = dict(
|
||||
_WASM_BINARY_COMMON_ATTRS,
|
||||
outputs = attr.output_list(
|
||||
allow_empty = False,
|
||||
mandatory = True,
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
def _wasm_binary_legacy_outputs(name, cc_target):
|
||||
basename = cc_target.name
|
||||
basename = basename.split(".")[0]
|
||||
outputs = {
|
||||
"loader": "{}/{}.js".format(name, basename),
|
||||
"wasm": "{}/{}.wasm".format(name, basename),
|
||||
"map": "{}/{}.wasm.map".format(name, basename),
|
||||
"mem": "{}/{}.js.mem".format(name, basename),
|
||||
"fetch": "{}/{}.fetch.js".format(name, basename),
|
||||
"worker": "{}/{}.worker.js".format(name, basename),
|
||||
"data": "{}/{}.data".format(name, basename),
|
||||
"symbols": "{}/{}.js.symbols".format(name, basename),
|
||||
"dwarf": "{}/{}.wasm.debug.wasm".format(name, basename),
|
||||
"html": "{}/{}.html".format(name, basename),
|
||||
"audio_worklet": "{}/{}.aw.js".format(name, basename)
|
||||
}
|
||||
|
||||
return outputs
|
||||
|
||||
_wasm_cc_binary_legacy = rule(
|
||||
implementation = _wasm_cc_binary_legacy_impl,
|
||||
attrs = _WASM_BINARY_COMMON_ATTRS,
|
||||
outputs = _wasm_binary_legacy_outputs,
|
||||
)
|
||||
|
||||
# Wraps a C++ Blaze target, extracting the appropriate files.
|
||||
#
|
||||
# This rule will transition to the emscripten toolchain in order
|
||||
# to build the the cc_target as a WebAssembly binary.
|
||||
#
|
||||
# Args:
|
||||
# name: The name of the rule.
|
||||
# cc_target: The cc_binary or cc_library to extract files from.
|
||||
def wasm_cc_binary(outputs = None, **kwargs):
|
||||
# for backwards compatibility if no outputs are set the deprecated
|
||||
# implementation is used.
|
||||
if not outputs:
|
||||
_wasm_cc_binary_legacy(**kwargs)
|
||||
else:
|
||||
_wasm_cc_binary(outputs = outputs, **kwargs)
|
@@ -1,6 +0,0 @@
|
||||
"""Rules related to C++ and WebAssembly.
|
||||
"""
|
||||
|
||||
load(":wasm_cc_binary.bzl", _wasm_cc_binary = "wasm_cc_binary")
|
||||
|
||||
wasm_cc_binary = _wasm_cc_binary
|
@@ -1,10 +0,0 @@
|
||||
#include <wasm_simd128.h>
|
||||
|
||||
void multiply_arrays(int* out, int* in_a, int* in_b, int size) {
|
||||
for (int i = 0; i < size; i += 4) {
|
||||
v128_t a = wasm_v128_load(&in_a[i]);
|
||||
v128_t b = wasm_v128_load(&in_b[i]);
|
||||
v128_t prod = wasm_i32x4_mul(a, b);
|
||||
wasm_v128_store(&out[i], prod);
|
||||
}
|
||||
}
|
@@ -1,6 +0,0 @@
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
std::cout << "hello world!" << std::endl;
|
||||
return 0;
|
||||
}
|
@@ -1,148 +0,0 @@
|
||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||
load(":emscripten_build_file.bzl", "EMSCRIPTEN_BUILD_FILE_CONTENT_TEMPLATE")
|
||||
load(":revisions.bzl", "EMSCRIPTEN_TAGS")
|
||||
load("//emscripten_toolchain:toolchain.bzl", "emscripten_cc_toolchain_config_rule")
|
||||
|
||||
def remote_emscripten_repository(
|
||||
name,
|
||||
bin_extension,
|
||||
**kwargs,
|
||||
):
|
||||
"""Imports an Emscripten from an http archive
|
||||
|
||||
Args:
|
||||
name: A unique name for this Emscripten repository.
|
||||
bin_extension: Extension for the binaries in this Emscripten repository
|
||||
**kwargs: Args for http_archive. Refer to http_archive documentation for more info.
|
||||
"""
|
||||
http_archive(
|
||||
name = name,
|
||||
build_file_content = EMSCRIPTEN_BUILD_FILE_CONTENT_TEMPLATE.format(bin_extension = bin_extension),
|
||||
**kwargs
|
||||
)
|
||||
|
||||
def emscripten_toolchain_name(name):
|
||||
return "emscripten_{}".format(name)
|
||||
|
||||
def _get_name_and_target(name):
|
||||
return name, ":" + name
|
||||
|
||||
def create_toolchains(name, repo_name, exec_compatible_with):
|
||||
"""Creates toolchain definition for an Emscripten
|
||||
|
||||
Register the toolchains defined by this macro via
|
||||
`register_toolchains("//<path-to-target>:cc-toolchain-wasm-<name>")`
|
||||
|
||||
Args:
|
||||
name: A unique name for this Emscripten toolchain
|
||||
repo_name: The name of the Emscripten repository for this toolchain
|
||||
exec_compatible_with: Execute platform constraints for the Emscripten toolchain associated
|
||||
with this repository.
|
||||
**kwargs: Args for http_archive. Refer to http_archive documentation for more info.
|
||||
"""
|
||||
common_files_name, common_files_target = _get_name_and_target("common_files_" + name)
|
||||
compiler_files_name, compiler_files_target = _get_name_and_target("compiler_files_" + name)
|
||||
linker_files_name, linker_files_target = _get_name_and_target("linker_files_" + name)
|
||||
ar_files_name, ar_files_target = _get_name_and_target("ar_files_" + name)
|
||||
all_files_name, all_files_target = _get_name_and_target("all_files_" + name)
|
||||
cc_wasm_name, cc_wasm_target = _get_name_and_target("cc-compiler-wasm-" + name)
|
||||
|
||||
wasm_name = "wasm-" + name
|
||||
|
||||
# These are file groups defined by the build_file_content on the Emscripten http_archive
|
||||
remote_repo = "@{}//".format(repo_name)
|
||||
repo_compiler_files_target = remote_repo + ":compiler_files"
|
||||
repo_linker_files_target = remote_repo + ":linker_files"
|
||||
repo_ar_files_target = remote_repo + ":ar_files"
|
||||
|
||||
native.filegroup(
|
||||
name = common_files_name,
|
||||
srcs = [
|
||||
"@emscripten_cache//:emscripten_config",
|
||||
"@emsdk//emscripten_toolchain:env.sh",
|
||||
"@emsdk//emscripten_toolchain:env.bat",
|
||||
"@nodejs//:node_files",
|
||||
],
|
||||
)
|
||||
|
||||
native.filegroup(
|
||||
name = compiler_files_name,
|
||||
srcs = [
|
||||
"@emsdk//emscripten_toolchain:emcc.sh",
|
||||
"@emsdk//emscripten_toolchain:emcc.bat",
|
||||
repo_compiler_files_target,
|
||||
common_files_target,
|
||||
],
|
||||
)
|
||||
|
||||
native.filegroup(
|
||||
name = linker_files_name,
|
||||
srcs = [
|
||||
"@emsdk//emscripten_toolchain:emcc_link.sh",
|
||||
"@emsdk//emscripten_toolchain:emcc_link.bat",
|
||||
"link_wrapper.py",
|
||||
repo_linker_files_target,
|
||||
common_files_target,
|
||||
],
|
||||
)
|
||||
|
||||
native.filegroup(
|
||||
name = ar_files_name,
|
||||
srcs = [
|
||||
"@emsdk//emscripten_toolchain:emar.sh",
|
||||
"@emsdk//emscripten_toolchain:emar.bat",
|
||||
repo_ar_files_target,
|
||||
common_files_target,
|
||||
],
|
||||
)
|
||||
|
||||
native.filegroup(
|
||||
name = all_files_name,
|
||||
srcs = [
|
||||
ar_files_target,
|
||||
compiler_files_target,
|
||||
linker_files_target,
|
||||
],
|
||||
)
|
||||
|
||||
emscripten_cc_toolchain_config_rule(
|
||||
name = wasm_name,
|
||||
cpu = "wasm",
|
||||
em_config = "@emscripten_cache//:emscripten_config",
|
||||
emscripten_binaries = repo_compiler_files_target,
|
||||
nodejs_bin = "@nodejs//:node",
|
||||
script_extension = select({
|
||||
"@bazel_tools//src/conditions:host_windows": "bat",
|
||||
"//conditions:default": "sh",
|
||||
}),
|
||||
)
|
||||
|
||||
native.cc_toolchain(
|
||||
name = cc_wasm_name,
|
||||
all_files = all_files_target,
|
||||
ar_files = ar_files_target,
|
||||
as_files = ":empty",
|
||||
compiler_files = compiler_files_target,
|
||||
dwp_files = ":empty",
|
||||
linker_files = linker_files_target,
|
||||
objcopy_files = ":empty",
|
||||
strip_files = ":empty",
|
||||
toolchain_config = wasm_name,
|
||||
toolchain_identifier = "emscripten-wasm-" + name,
|
||||
)
|
||||
|
||||
native.toolchain(
|
||||
name = "cc-toolchain-wasm-" + name,
|
||||
target_compatible_with = ["@platforms//cpu:wasm32"],
|
||||
exec_compatible_with = exec_compatible_with,
|
||||
toolchain = cc_wasm_target,
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
||||
|
||||
native.cc_toolchain_suite(
|
||||
name = "everything-" + name,
|
||||
toolchains = {
|
||||
"wasm": cc_wasm_target,
|
||||
"wasm|emscripten": cc_wasm_target,
|
||||
},
|
||||
)
|
@@ -1,805 +0,0 @@
|
||||
# This file is automatically updated by emsdk/scripts/update_bazel_workspace.py
|
||||
# DO NOT MODIFY
|
||||
|
||||
EMSCRIPTEN_TAGS = {
|
||||
"4.0.13": struct(
|
||||
hash = "32b8ae819674cb42b8ac2191afeb9571e33ad5e2",
|
||||
sha_linux = "2ad887035e3e5cac78abcaeca3b3881897f03b9919d008cbc0ef41d7641247c9",
|
||||
sha_linux_arm64 = "675156bd626c7b19d4f2271ea8ffa77a235d9b0a031116632e53b374cf23754c",
|
||||
sha_mac = "657cbd01e84f0a33cb7a1379baecd18a7d96883222a3a99b43919d8bb2374f55",
|
||||
sha_mac_arm64 = "12ac26e298ef973207eba9332e28da375ec2ba1d32e68e0d8b32de3c886a2e39",
|
||||
sha_win = "a363d6e92dcaf0024d378f1faabb61a139d9152a796f66a475a48e33e90f6adb",
|
||||
),
|
||||
"4.0.12": struct(
|
||||
hash = "209b886304498eff50dd835850dc5715803401ed",
|
||||
sha_linux = "1c303712707a91b88f743b0ad6dd1544c289e614844396698a2510a66c5608f1",
|
||||
sha_linux_arm64 = "2c503d031d2ad2b13c6e4fe09f104fe50c5d1319feaa2b3d19d4e4608435fbb8",
|
||||
sha_mac = "c85830f151ec8eebec6bb2344e3eed942bc7b5dc91b146326635f9f71af459f2",
|
||||
sha_mac_arm64 = "853dff1a8451b54ff7cdd95f923851dd9b58ab36873b7b600d16243a5fb6d907",
|
||||
sha_win = "7b7e58fbd35a78ddf9a2a4a3f6215857bf2342942c429cdf540a2251540cb845",
|
||||
),
|
||||
"4.0.11": struct(
|
||||
hash = "7033fec38817ec01909b044ea0193ddd5057255c",
|
||||
sha_linux = "f38e70b53be587e7c757f375b3452e259c70130d4b40db3213c95b7ae321f5d7",
|
||||
sha_linux_arm64 = "42020e4db200ac366a3e91ac2fccc04ee0ffc090cd2d5986c892b27f39172bb9",
|
||||
sha_mac = "4169811f9682f54ae5c9d0662d0a4dd4318abab5d3d0473fa54007f515a8cdea",
|
||||
sha_mac_arm64 = "09554371e3941306d047d67618532e5366ba6c9b5bda1a504a917bfbabc5d414",
|
||||
sha_win = "bd2094ca9bde5df25020a46ece7f56b622d1d22214fbd12950b01b952dd40084",
|
||||
),
|
||||
"4.0.10": struct(
|
||||
hash = "8103ffedfb0c42d231c6af6859a5a1a832260b43",
|
||||
sha_linux = "0183f887b56c3f8d4b45826cb49856a3324afb66236ad3c13944c0fd2550cbbc",
|
||||
sha_linux_arm64 = "0679f459118d80163d0712b0abda00cbc97a90cddf1dcefa9efb1bf89f67baed",
|
||||
sha_mac = "02f3179f703b4d196a679897b430c1eeeb1d5f9aeba9b435b04ba3f526f7e8e0",
|
||||
sha_mac_arm64 = "c744ffe06ffed55cd8dae42862b7646f15550c7decd47a48d09a474af83732b0",
|
||||
sha_win = "1a66825e85fda039f57d39c98ae2bdb96a18e53745159e9599f69679be18439f",
|
||||
),
|
||||
"4.0.9": struct(
|
||||
hash = "cb2a69bce627bd2247624c71fc12907cb8785d2f",
|
||||
sha_linux = "c6fd245138e6bbdd8349963cb4045c557d657e4be0ea44155375633c689c8be9",
|
||||
sha_linux_arm64 = "872d7f5870f1bfc523a446ca66ab1b47009a96be33c398dbbb12a56597e46ab5",
|
||||
sha_mac = "7efb0a6ddcb915aeca9f8685db909ae7799452894876fc1223a78d5c3288ff2d",
|
||||
sha_mac_arm64 = "b97f3cda61211dd83b31ef9ea92e83d416a9422192cf3ee484fffe11e5d6e5b9",
|
||||
sha_win = "e6e409ae564c041691f2fecd690431a9935401f8ab6afe284b222546887e84c5",
|
||||
),
|
||||
"4.0.8": struct(
|
||||
hash = "56f86607aeb458086e72f23188789be2ee0e971a",
|
||||
sha_linux = "7b50b2b40f80d4531ae29a0a5b902eca41552e04815f59880a122ac81e8f269d",
|
||||
sha_linux_arm64 = "d6e3ab0cdec2e6983235322f600f248d313bfce4a6a69ef16cdfdc330ff748b8",
|
||||
sha_mac = "e1b2e6d4797338ed884f9d8a8419f93fc42cfcdea5e8a8b29fe13c6fd3fe7f7a",
|
||||
sha_mac_arm64 = "115b207304d5471b77fc7649904111f3bb5ed7998ad192cba6cfc5fd0b2d78cb",
|
||||
sha_win = "9ca65cb49287f448216c2eac12dacff9808ae827d5de267aaf2bd65f6d4f233e",
|
||||
),
|
||||
"4.0.7": struct(
|
||||
hash = "ef4e9cedeac3332e4738087567552063f4f250d3",
|
||||
sha_linux = "60079078b1ecc4e96ab01c4189aceeff9049a1bb2544123295e9841b91a9410d",
|
||||
sha_linux_arm64 = "caa10ae2d2b01eb290957e96636f0a6861e7305c8d991c762379542208415793",
|
||||
sha_mac = "d588cc31b7db0d876f1d45f4d0c656d5e205d049c0bb27209cad04cfebe19309",
|
||||
sha_mac_arm64 = "c0153cc053d8961e094447c3e706cb8f379c263bee64202fd78251fe018fb014",
|
||||
sha_win = "7974b6e11164c2c94ddb252c9728d21de321094421f5d0856702e65c06751e54",
|
||||
),
|
||||
"4.0.6": struct(
|
||||
hash = "14767574a5c37ff9526a253a65ddbe0811cb3667",
|
||||
sha_linux = "27fc220a9ad98d323cad73531ff563e9838c9e1205f51ee2a5632bb4266a35d2",
|
||||
sha_linux_arm64 = "2d03f8eb3f81dd94821658eefbb442a92b0b7601f4cfb08590590fd7bc467ef8",
|
||||
sha_mac = "c06048915595726fc2e2da6a8db3134581a6287645fb818802a9734ff9785e77",
|
||||
sha_mac_arm64 = "35d743453d0f91857b09f00d721037bb46753aaeae373bd7f64746338db11770",
|
||||
sha_win = "3b576e825b26426bb72854ed98752df3fcb58cc3ab1dc116566e328b79a8abb3",
|
||||
),
|
||||
"4.0.5": struct(
|
||||
hash = "d7f8ff5e2ca3539c33fae81e98f7c56ef9fa1239",
|
||||
sha_linux = "fdd4d9d6b37e845039b207baaef60cd98fb594ea13a3e6d622c2dcd8f2a48ac6",
|
||||
sha_linux_arm64 = "0007aec32eee609b91f35c32481ec060ea7dac7151e36344bbcae419907f9240",
|
||||
sha_mac = "f4e5a6c57ad9de59bff73463972213a299af2bb419dafbdd3959947fa801a342",
|
||||
sha_mac_arm64 = "b8b93190fa17afe32a5eaa7120b807767b1c9d6e1d4ae6b9a2c6adb231758683",
|
||||
sha_win = "3b8ed9e298a6d58fee841f5c3f1d3e7b2dff104cc7df314cd329f4c05d470be0",
|
||||
),
|
||||
"4.0.4": struct(
|
||||
hash = "ea71afcf5a172125179a07ff1731de6e81c92222",
|
||||
sha_linux = "f05dab4a6a13a5fe6972e95e918d1483e687faf468e1a653deaa8d7956a97a3a",
|
||||
sha_linux_arm64 = "95a421f304a7209c6f259754ad15aea5bbbbb1838139b51837aeb2c184fa4a89",
|
||||
sha_mac = "d8b44aae37224ae76572ad84b60a2adaa126826332864fb689944d5130705d8d",
|
||||
sha_mac_arm64 = "ade1c1a0c2e5893c6f74079beeae8b7e2a0c3f3b7ae88891064104fd985dfc2b",
|
||||
sha_win = "342cf9dfb83e95bf678d07e460e093ea61a609d34b4603d9be06d4f31784409d",
|
||||
),
|
||||
"4.0.3": struct(
|
||||
hash = "de2109f0e5e7278d470da11de526aed16c527722",
|
||||
sha_linux = "6480f51d0c24130424c696bf83e9774f42246a0109c8d48b59f4520fdfadb928",
|
||||
sha_linux_arm64 = "76b1511d550b4f47276b93581ae5122063acbca7c960703637657388cf178636",
|
||||
sha_mac = "f40851b816b31b3ca3214ebf61cc152625a05c24f43e2b13c2ad9b9e5dca73c0",
|
||||
sha_mac_arm64 = "6d8ac5ad1f59f71de0927eb2c595dab2f21d9946ca293434359a6db2ab06a138",
|
||||
sha_win = "3702e4a518057520d4ad9e7cd63a01a829770d090551e00f19f417f55b0170d3",
|
||||
),
|
||||
"4.0.2": struct(
|
||||
hash = "cc8eba40de8235f9c33d92463018f87b3edaa09e",
|
||||
sha_linux = "3c0e3940240709388c24a4262680c18bb1d5979f2337abe53db00fb039606c44",
|
||||
sha_linux_arm64 = "21ed0c31c1fc972e3509fcb140e0323061b5f2b173fe56d1f8961df2a37e4c11",
|
||||
sha_mac = "e1bd96ec790968adf583d348158375b76ee0287e348954c3393c82565475b07b",
|
||||
sha_mac_arm64 = "e5bf9a5efabc114b42636abcea07a1e02d3a9406cd399a29ccbc730586dce465",
|
||||
sha_win = "78010f8e2f7bb6868bb20e3fc32e24d45e6fca749c388c2d25bea9845512338d",
|
||||
),
|
||||
"4.0.1": struct(
|
||||
hash = "5ff495a591978fdf8a16f2d172be3616f3150d1e",
|
||||
sha_linux = "7b2b64b1bc15555696f78cbcb54c8d75832222d1578270ff5f56a8024c9a0dbc",
|
||||
sha_linux_arm64 = "5c046a22b933de14be6b2522b75796afffe3940a19422eee483b7f3f1a226d66",
|
||||
sha_mac = "d089eba9c3cad675bbd7d3318aec166ebe5ba984a6c5291136c09c68324d9818",
|
||||
sha_mac_arm64 = "c8359b334bad71719e8d29e796ca7b63891e0305987b2572eb5a2f020e34f773",
|
||||
sha_win = "9cf861339327f3657281c5c8c18aa723323acffe3b3d1c3807b9d4576d097e0e",
|
||||
),
|
||||
"4.0.0": struct(
|
||||
hash = "3ebc04a3dab24522a5bf8ced3ce3caea816558f6",
|
||||
sha_linux = "6836988f0b7ee6ce3df5192dd4375b9eee55be78847ce31cf1d2abfb00f1e991",
|
||||
sha_linux_arm64 = "d4e6e04b7e2fa1bdffc9c07ab4e0a3f66bde75adb06ebf9cc66a341907b17db4",
|
||||
sha_mac = "4123e9ff6a699dac303c4fe22529ae0d618c118fcd8267df590363b0fc98c91d",
|
||||
sha_mac_arm64 = "4b5fb7cc4f5f8526aaa41c8560a00ad6782b97cd3894d856beb635f05a825613",
|
||||
sha_win = "6b1e5aee4b4a4274712566c845888bdf4eced09a5aaa64c1796cda57cd2854c4",
|
||||
),
|
||||
"3.1.74": struct(
|
||||
hash = "c2655005234810c7c42e02a18e4696554abe0352",
|
||||
sha_linux = "a987bb4cded4f29437e8589accac204ce3c134feaaaf251bb97d0fdf450dce65",
|
||||
sha_linux_arm64 = "c7fcc532eb7ee1dc7df0eacb49128ded12e4d55a973b8a2a5215da8bb6c4027c",
|
||||
sha_mac = "04f848f40bd19220a43abde2dd1012d95bf1f89c618c0f631b83d18357e2bb65",
|
||||
sha_mac_arm64 = "fc71758a5bfb02b8a5c2dd21d6bfc34aa3c64698f6105e204a1f4d11f6d67603",
|
||||
sha_win = "603b0515e0367ee2718b2f360ef0194663d23a91236910d5f4a90ac4d745a4f2",
|
||||
),
|
||||
"3.1.73": struct(
|
||||
hash = "b363a836e75a245c548b7a6a021822d8c9e4c6df",
|
||||
sha_linux = "4f3bc91cffec9096c3d3ccb11c222e1c2cb7734a0ff9a92d192e171849e68f28",
|
||||
sha_linux_arm64 = "e6fb8a32889d4e4a3ac3e45d8012641369251ddd1255ada132ff6c70ab62b932",
|
||||
sha_mac = "8d52ec080834f49996534de26772800dee048ec9bf148bb508be95887e267735",
|
||||
sha_mac_arm64 = "58e6c984c5a1fb71e0871f0c3bb9e32d41e7553260c6eeb38800a4612623a99d",
|
||||
sha_win = "d76003fad2146ad1f2289e8b251fbc359406ced0857f141a41f15149c2138302",
|
||||
),
|
||||
"3.1.72": struct(
|
||||
hash = "7a360458327cd24c2a7aab428bdbcb5bca8810e4",
|
||||
sha_linux = "be094d6dd27c27a64116e9c0165d6cade5d329f5137e56696773e98e1df83fa7",
|
||||
sha_linux_arm64 = "5dba64454809d72d53c432f3c91830d69d413ebd9dcd0ce18df5a79a3af235a6",
|
||||
sha_mac = "52f713c118717814d2371912ab9019a3605b7d6acc627f3842e6aa7d3ffff7bf",
|
||||
sha_mac_arm64 = "644593539684f59c635c7eae2e743f5e4e27b1d665f9c71c23dcefd4c2448b3c",
|
||||
sha_win = "c72623fb68f109d8f122036f25b9fc75353bd1ce28995d9920277d4be4a1d99c",
|
||||
),
|
||||
"3.1.71": struct(
|
||||
hash = "7ee0f9488f152e9e9cf0d4d243970e03742f1a5c",
|
||||
sha_linux = "43f87aa84a73697b905d2a13c89d016af8ec66bed792f37dd5a0059529abee12",
|
||||
sha_linux_arm64 = "d25f5e57b2e7557df39cd9dec3b0283fb086f66c800af3d9a3f70f36c5fc6b14",
|
||||
sha_mac = "8dac015c03c4f2e594d8bca25fe35d1e4d808aea81705121e852aff0464c4a9d",
|
||||
sha_mac_arm64 = "a7797c3d210eda29f88eede261fc8f0aabf22c7b05214916b5b50a1271e9f0b8",
|
||||
sha_win = "dfe77eaf22278ca975519f0497c8b336c86e52461c478060418fe67b39b6e87c",
|
||||
),
|
||||
"3.1.70": struct(
|
||||
hash = "6fa6145af41e835f3d13edf7d308c08e4573357a",
|
||||
sha_linux = "c29b4a2c6addd5aafa613768d34273a23d8fcd1753c685ff61099506710cd8d7",
|
||||
sha_linux_arm64 = "b13386975023a06f19057daef3896d480229b144d1e97f8764ed2f3e0fcb7d37",
|
||||
sha_mac = "bc0edcaaaa19daeda9164d38d36c5f7d7b4b4e1eb7695ad58e776336c571fcc4",
|
||||
sha_mac_arm64 = "e470d5eeb570850d66a79bd4c06064b9b3a1e90c7c2101e1a444ebcd6466fe5a",
|
||||
sha_win = "f0118d71fd67583ddcfd39af2ed8bec3d18152fb6aadee085ebec5bcaf4ac4f5",
|
||||
),
|
||||
"3.1.69": struct(
|
||||
hash = "8fe01288bc35668c13316324336ea00195dfb814",
|
||||
sha_linux = "24a786666e6f48ed3c3944b44df5cf146c45cf4faece4cb2686312a3d052a00c",
|
||||
sha_linux_arm64 = "48e670501d215ac5b6b2680c900c517d9028dbc4de43be5dd6f25211a3640f2b",
|
||||
sha_mac = "8503fe87dd2f30abff2550e9d6eb8aadeaf30fd3c6972d635b31e67f82e155f7",
|
||||
sha_mac_arm64 = "995c7b3c84458edf6b8945e81405320c64a25dfe79eaa427fc1fe9a680f56b4f",
|
||||
sha_win = "3839e0a581ae7b19156f004762a8221585e9a0d6237e468b13a878d1947636c5",
|
||||
),
|
||||
"3.1.68": struct(
|
||||
hash = "b52d8c9150dc7d4c8e4a7a08c7a9b4006c9abe49",
|
||||
sha_linux = "1f2bcb47d85eb31d90fa797b3513221adc50f0656bb37f0962a40fd0f49fcf6a",
|
||||
sha_linux_arm64 = "de346e7a489aa27a442215945d154d58a0d35c608b6150b2992af0e70c04e1c5",
|
||||
sha_mac = "b180711544d783121370d2c894703f99d370a864ab147730f82fd59b88fa3481",
|
||||
sha_mac_arm64 = "5e9b6242b56edc8cb404cbaf6c8bd7eb1f0f168b55b580bd92652f98c5d286f4",
|
||||
sha_win = "824d37e8a0845f44e4c1111e8365640eea28944f1bdbd1e9e3fea0279b68baea",
|
||||
),
|
||||
"3.1.67": struct(
|
||||
hash = "4ae62984ea36ef0e5bfcbd0ed9b62f04bee6426a",
|
||||
sha_linux = "535b64822916c80124363a5c7a5bd0cafd703f166d5155c0ad0e464e4a879091",
|
||||
sha_linux_arm64 = "04c5f959702d8c1e5c000752b562271c224dee593e81144280840fed06e36cd9",
|
||||
sha_mac = "692b8fdc79a47332ba9881966c72517eedf15b2da7bed37a535dfec55e6bbd9c",
|
||||
sha_mac_arm64 = "ac26753f59fa9c8e92be9c91666014ad9400c91fbd37064105d1b5fcae503985",
|
||||
sha_win = "8c6af8046ed47386018e42d18b53f57fad0926306dd4315d7f09dfae844b3dd3",
|
||||
),
|
||||
"3.1.66": struct(
|
||||
hash = "243eae09cf5c20c4fde51a620b92f483255c8214",
|
||||
sha_linux = "b10eac37c978b28da2f1f34cdd8a7759c0ed5e5a2d8eb4f4e6790209de33dbf7",
|
||||
sha_linux_arm64 = "9c78a470f74c24fc1fde2c8d86583ed98847b6cbdd87cd0b36ff2d6b4799d950",
|
||||
sha_mac = "64fd0603ccbf949967cb0dfd8f1b0b25e018abf8bfe813b53596c4fc78751027",
|
||||
sha_mac_arm64 = "fd6250f25101957f56086d292263379880c4b3329819a021008b2058f92ef67b",
|
||||
sha_win = "b24f65a1a1111d8ace6ba47b55e07681cd0620f7bf711d1018ee262c9501defc",
|
||||
),
|
||||
"3.1.65": struct(
|
||||
hash = "fdcf56c75a1d27fdff6525a7e03423595485ca19",
|
||||
sha_linux = "b2b7de13d37c4c5126e6c6a077e6019ebacc78ef1fb1b35b9035f03975f5ffaa",
|
||||
sha_linux_arm64 = "f838af6495408f3c0a14d233171b4919b62e445c62805a22dea1875cb709a116",
|
||||
sha_mac = "cc50b829a21a041979e0941cfd2047d30a06e3c4a8fd9f662ecdc12a0ab40535",
|
||||
sha_mac_arm64 = "db4430db6a085d6ed5284917e632541dad3ce0a9464659fb674055247ad059d0",
|
||||
sha_win = "e72ae4ec3231d9a492eadbf77ff28c13efd90307a69df04234792e67a001d05e",
|
||||
),
|
||||
"3.1.64": struct(
|
||||
hash = "fd61bacaf40131f74987e649a135f1dd559aff60",
|
||||
sha_linux = "c39de24beca60fd580f6dff0eca0e275016042a30234588b19eda82397e299f3",
|
||||
sha_linux_arm64 = "61b412135630a60c5517278dc83930e06f80fa286fcc2bb6366c4f620c86e4e0",
|
||||
sha_mac = "2644772be398c8095621b3d0fe9ff2d122b18b7b0963c0eb702639d94dfb8e90",
|
||||
sha_mac_arm64 = "47449057c345a09aa8750be1a357c364ffea9f8a066066cb341a7a2a14bac96a",
|
||||
sha_win = "eb5b59afb420915daab4c383e5f73d456cc14776dce02fdc852c46522cda5531",
|
||||
),
|
||||
"3.1.63": struct(
|
||||
hash = "aeb36a44b29e8ca9f4c7efbb4735b69003ac2bb9",
|
||||
sha_linux = "2a38ac1ea2fe3b7169879f0f666ea278f344cbb5db6e34421b9554939559109c",
|
||||
sha_linux_arm64 = "f1dd5fe4cd22e89b1f5bfd216f1245f9f40f6ea76651a7f66e925a68ff6f18b8",
|
||||
sha_mac = "7e192b84aecfade22817b5b38f0c69d1f795a9b990308188d39ed1d218692cd3",
|
||||
sha_mac_arm64 = "751ef26a3682f5f23dfdc1c2f80cd0604a32cad61e6373c823de774722ecb9af",
|
||||
sha_win = "947f8e867e781750d374d659644897f2345a133ad3d0f9ade23afcb81eeaddd3",
|
||||
),
|
||||
"3.1.62": struct(
|
||||
hash = "d52176ac8e07c47c1773bb2776ebd91e3886c3af",
|
||||
sha_linux = "fd303a2b2a85c4b3ab8aa29595d70c5fde9df71c5254d56ed19d54e9ee98e881",
|
||||
sha_linux_arm64 = "233c0df77644472cd322b45b2d7cf709e6c338799b46f6ec5d5f39ca4dbe8aef",
|
||||
sha_mac = "d9cfef7ba8f44bf21be715244d0d5f909f1ccc2a481a301b3c01d12d1babc049",
|
||||
sha_mac_arm64 = "de5484d60c858aaa8b93ba6485924adffe734cf4f8296765c089900cf9ce0701",
|
||||
sha_win = "7455680bf9c19a26fe4868111ac01401023b0f92e862d3cabadf7950b87707fd",
|
||||
),
|
||||
"3.1.61": struct(
|
||||
hash = "28e4a74b579b4157bda5fc34f23c7d3905a8bd6c",
|
||||
sha_linux = "e3e20e09219fd47a0019bb3252e17db4a00ded39b39b41634bc73f840a8ff2be",
|
||||
sha_linux_arm64 = "a6b858601ca09fb7bb6ddf1a5ffb1a4130454c936ad046d45fef183037828c46",
|
||||
sha_mac = "1fe69a3c42fb2857b80c8e77bfab780cb212ed7cf81ae57c0c4d235504df5269",
|
||||
sha_mac_arm64 = "4ba702eea409e2d4bfabc73a68919217d3993e7585d95734e3e40a3c9ce1bd21",
|
||||
sha_win = "bbafba849ff072a61dd34a8ffc0c85eed20a417854a3ca751b092e3565a92581",
|
||||
),
|
||||
"3.1.60": struct(
|
||||
hash = "87709b5747de5b1993fe314285528bf4b65c23e1",
|
||||
sha_linux = "ff5eb062165920c7cb69935d396f13e9f8ca5b13f2d7f3af2759bcacb5e877e2",
|
||||
sha_linux_arm64 = "2c291942df4868d3f65b31dd964bda9736bfddcd6a7886158963f797d1b45cf5",
|
||||
sha_mac = "45586fab1bad65a4293ea8939dafb5ec711ba92ae7b4d1edbaae3b4486f398b5",
|
||||
sha_mac_arm64 = "8dc27416a378ad07285d380f68717cfe0db1ea6252fdb1ad012af95e4d3f342e",
|
||||
sha_win = "f3147ef2d4ca48ea2624039969fd0529d0bacb63bf49ee4809c681902768b973",
|
||||
),
|
||||
"3.1.59": struct(
|
||||
hash = "e20ee09a8a740544c4bc6de5d4ba5f81f74b74d6",
|
||||
sha_linux = "ae59d1946cb92e1651cbb904fe824b3f07b39f42fa25f582116b5aaa226fa239",
|
||||
sha_linux_arm64 = "25b918d6d5ee2af7ef6b28e089dc21d2dc419dca76c8079bb638cb20459eb9e5",
|
||||
sha_mac = "af175bd559cb80459749e504da314af0163291f195461bf4d376d6980c4c60c3",
|
||||
sha_mac_arm64 = "e17553bca5d00b30c920595e785281627e973f9e7e14c5dc0a73c355ccafe113",
|
||||
sha_win = "bb54256fc3b7824cb75d5474f887d9bf8e1e63c15b351bdfbed898aa293ee4ab",
|
||||
),
|
||||
"3.1.58": struct(
|
||||
hash = "a4d4afb626c5010f6ccda4638b8d77579a63782e",
|
||||
sha_linux = "b188249ecb939dadc679aaf2d3d9afd0fe19ab942f91b7bc926b4f252915dd1a",
|
||||
sha_linux_arm64 = "4aedc8ca641b40d9bd82d85b1dc3458fe1afc9a132da06a09384a5f89c058969",
|
||||
sha_mac = "2092aa4bef3b9f88d3f343b042a417ba617d4e04454656d8f2e101ba53f854e8",
|
||||
sha_mac_arm64 = "7a9a15845257629b7602d15bdf7633a8e10472b0fa9b3d9ee7149938aa2f2039",
|
||||
sha_win = "9fe76b6189566d56f0cf9aecbd23a006778530aa87184a900f5662e39ce7272a",
|
||||
),
|
||||
"3.1.57": struct(
|
||||
hash = "523b29e1b99a61069a2fa9f9d3cc9be1c4c53d4d",
|
||||
sha_linux = "5bc444132258d4404d396f2044a4a334064ad0f1022555cad5ec72804a98ba5a",
|
||||
sha_linux_arm64 = "f0022413afcc1610deff10921b3f5938bf4d01eba46ce96655f2295bdd84bd6a",
|
||||
sha_mac = "31ddccb68c86f0a45332982938c49505158860ed4f7e8ccef72a48382e0e3c96",
|
||||
sha_mac_arm64 = "cc5fdb65b339464f99b9c731cc63c233ec9577268886a856fa49f227ca2a56d1",
|
||||
sha_win = "b53555420bb9b6e31c153e4c59427000ec692be17ae900f659a9b774d1ecebed",
|
||||
),
|
||||
"3.1.56": struct(
|
||||
hash = "9d106be887796484c4aaffc9dc45f48a8810f336",
|
||||
sha_linux = "52338cca556002251e5e7d738adb1870d14331ddf463e613af02028b64e05a82",
|
||||
sha_mac = "fc5cca6a9db571ecb2974bf0d4e12f1bc6068726271464586cf7e8723004b4c6",
|
||||
sha_mac_arm64 = "aed728d09d801c4a33210505874ce066269292e7809a7d6a6414146be01545f1",
|
||||
sha_win = "cd5fbe94fb0bcf01badc10eace48eddbca22b34f31229e3d70c68ade7bcdd571",
|
||||
),
|
||||
"3.1.55": struct(
|
||||
hash = "f5557e3b7166d05bddb5977e363ec48cd06e9d32",
|
||||
sha_linux = "2a1cccc2f6db801219eb966d00af78a026af7822055064092387e7eba18e75ad",
|
||||
sha_mac = "f1f8f4ebd086d0cd8bd54c41c6a0e86bbb26d7b8020484fef3dba67cd9e6906c",
|
||||
sha_mac_arm64 = "7533b7a1beaa692a4f1e57b91c456b13e6bcc367dc9a414cb066350e8a2058c7",
|
||||
sha_win = "204984cbb755f9aa09c21b49129d908f59617a60d5aebd8742097a9a2c196abb",
|
||||
),
|
||||
"3.1.54": struct(
|
||||
hash = "aa1588cd28c250a60457b5ed342557c762f416e3",
|
||||
sha_linux = "5c8db804abe1ac7ddaa99a6997683cf9fa9004de655b32b5b612d59a94bd59d0",
|
||||
sha_mac = "e6d2b8c6983767c7ced83d40b87081a221f05bab08d0fa4f0c6de652547c8a9f",
|
||||
sha_mac_arm64 = "83764751ee5c7b42529e1df168695d4a51a23c9c165f3f90693baa9bd9256efa",
|
||||
sha_win = "c0a1c9f3e1dfc9bb2e600501aea999f53b34a16f82da387317fdcae7e9c2a79b",
|
||||
),
|
||||
"3.1.53": struct(
|
||||
hash = "e5523d57a0e0dcf80f3b101bbc23613fcc3101aa",
|
||||
sha_linux = "1025c0c738fbaedf3f8fcffee23bef71c8d04a95b30ea8a69a47231fb35d1c8b",
|
||||
sha_mac = "318dc0cc51a237040bc1cb0a9e7d6c214196c8a100b50d0e298cf3ea7c365dbe",
|
||||
sha_mac_arm64 = "e346ef588f7cfe1e41623de2257a11ecf8381fbd3bde63a8773b3a663411ea12",
|
||||
sha_win = "af7f7175ab0b3c1e9121c713764e8ac1d970b6dbee8a84602b4a69cc5ec5940d",
|
||||
),
|
||||
"3.1.52": struct(
|
||||
hash = "ce2097fb81953331e65543c20b437475f218127c",
|
||||
sha_linux = "1c0cd572067c6348cea5e347b9ef7c5460493ca3f0d84bb991689731d0e140ef",
|
||||
sha_mac = "5d9c801f9cfe81337d65969e174e0b3ef4cf2b47eb548ff4695abe3a2e69ba70",
|
||||
sha_mac_arm64 = "7ce8fef7542437c85412143cb59b13b8804bb06243a106d2d342c7d9132edc8e",
|
||||
sha_win = "82ed01d965f5c2765191c67da5baecd2d3ce3f82a8cf30fc47fcd56d47826cf6",
|
||||
),
|
||||
"3.1.51": struct(
|
||||
hash = "4f416d92fbff66ce79901cfc8263768f1b25dd3e",
|
||||
sha_linux = "09af08eb562cccf85770e4b8e368acb5accb1759fe3bc436b8fad80c27f90c79",
|
||||
sha_mac = "b12201caf9ff2b981349edebd2d2c022ff000c74241ef96305b831abbd4f9450",
|
||||
sha_mac_arm64 = "65fbee020cf965f9216607bad56215795529cbe8cef318fadcb33141dd6b5e82",
|
||||
sha_win = "65c2d005a6be80723fa795ea724d4db9960601cf7d59d880f2882ecd45c8ad2b",
|
||||
),
|
||||
"3.1.50": struct(
|
||||
hash = "2ce4170cef5ce46f337f9fd907b614a8db772c7d",
|
||||
sha_linux = "8822050b999286694cd4ffc7d959a8ea3137e3a910121d78b5377439ede9b598",
|
||||
sha_mac = "39ce2f689be348b558df9c2c988b03472d43f8ac0827624397f7c0bb56a1e893",
|
||||
sha_mac_arm64 = "5a9fa8de121db400bb46e716d861283b938ad87257d7c48f99dd5557100bd3ea",
|
||||
sha_win = "29096f5596d93dbf620a9547fd1ecec8f54f3f52d49b13f09959d852310220db",
|
||||
),
|
||||
"3.1.49": struct(
|
||||
hash = "bd0a2e230466dadb36efc71aa7271f17c6c35420",
|
||||
sha_linux = "18f452f8bdcd13e0d3a65c569180d1b83579775eadb8069cb32bca1f2e751751",
|
||||
sha_mac = "c5275eab15e42abb3a42bbe1cfe38ee1b852febc78f65f5605b8972a7bee672f",
|
||||
sha_mac_arm64 = "10a722e2c7dcc97236f70f2d68b23a7975800ebf27ec4fdf76deddf483b1c6d6",
|
||||
sha_win = "4361fc18faaf70a2dc342c219b13c39a8196e9a48e6897d08c7b0dca6ba6525d",
|
||||
),
|
||||
"3.1.48": struct(
|
||||
hash = "694434b6d47c5f6eff2c8fbd9eeb016c977ae9dc",
|
||||
sha_linux = "689fffcb60f93a60a7bb52cc205ead43ab31f252753cfef39ae2074f6a442634",
|
||||
sha_mac = "8ac2a3f32b4cba0d84ca5a1fe1db883dbfc2731432833ab5a7e6967c5f4ab7dc",
|
||||
sha_mac_arm64 = "10dd40f94fe5c5f8c4efc838d1623cafe98c629d4c7872ad8c15cd7b0836f281",
|
||||
sha_win = "9276435ea7c402c18572a4301d6a26426eac73414b0ed5cb3e721044a50f651d",
|
||||
),
|
||||
"3.1.47": struct(
|
||||
hash = "39ade279e75e6d17dd6b7eb9fba2006e61fe966b",
|
||||
sha_linux = "bdc50abe5c7d4b4f14acea4ec36b270e86770cea2da4b0c393b80a692dc7eb7a",
|
||||
sha_mac = "6a3a116707037d75a967a7d971894d8ace74a2a230aa50ba55e88e7cd7b94953",
|
||||
sha_mac_arm64 = "b13d228e6a1c89c13a1500fff07dcf093fb01fa621d458496d4a6d7f05cfd600",
|
||||
sha_win = "66a6c4f0cda4ace14a86d3e59d20685d35211854d21670632b0566ac73638245",
|
||||
),
|
||||
"3.1.46": struct(
|
||||
hash = "21644188d5c473e92f1d7df2f9f60c758a78a486",
|
||||
sha_linux = "75cbf14629b06e417b597d3f897ad7d881c53762380aca2f0dd85f1b15891511",
|
||||
sha_mac = "06f45608381203d501141be632cab960aa105626c3a0f7a48657b79728103880",
|
||||
sha_mac_arm64 = "c2a85b509a91663b390f77d51fba775421d42456211466fd3757f9dede7af9e4",
|
||||
sha_win = "1ed3a3f36dee5d373ebea213fc723b3eeb7d6ba4c43da6a951ea0d76f265f234",
|
||||
),
|
||||
"3.1.45": struct(
|
||||
hash = "2b7c5fb8ffeac3315deb1f82ab7bf8da544f84a1",
|
||||
sha_linux = "1c0576765f8b34603eead6f2bd4bc77bf68ea2f0a39ed4c144514103e85bc7d9",
|
||||
sha_mac = "87f63ebb2f9807435016b238bbf46ccb94c919ec0786b46463cd788634391b0c",
|
||||
sha_mac_arm64 = "29e698772c0e00c21ce120dd1db1586f5c65507168babff148c2e628add6e72a",
|
||||
sha_win = "891d49f8828f715ef621d55fe202de4929bbdc89b69101fd33963571458a7f47",
|
||||
),
|
||||
"3.1.44": struct(
|
||||
hash = "b90507fcf011da61bacfca613569d882f7749552",
|
||||
sha_linux = "5ffa2bab560a9cda6db6ee041a635d10e1ef26c8fc63675d682917b8d3d53263",
|
||||
sha_mac = "291b2653f7576f8354f0267047e47a5ddef11223c89d5be399d04618f13b3832",
|
||||
sha_mac_arm64 = "ad1625821b49ccbbe733596223fdf99fd786470d679f2c9dfabd4a1a7b929282",
|
||||
sha_win = "8b61f60ef169b1c20207361067c40192c83b96cdbdb2f4cff21dfb20b9ee528d",
|
||||
),
|
||||
"3.1.43": struct(
|
||||
hash = "bf3c159888633d232c0507f4c76cc156a43c32dc",
|
||||
sha_linux = "147a67a3454783b8c351780ec0111329d1e6fbb1d2fcdfe1c035e1c0997e0701",
|
||||
sha_mac = "d84896c6d1ba0fbd9a5e5c5830b3ac4a02da5e683e9d8c7172f4c3ffdfaa0392",
|
||||
sha_mac_arm64 = "d684f0bfc655f61e76cec29fdaad1668f3d21a229fdd908267f400691468328d",
|
||||
sha_win = "a335f5f5b070cf354f1ca8e0afb23c06ae5f9ffb2c501124da7fcaea09a7db6d",
|
||||
),
|
||||
"3.1.42": struct(
|
||||
hash = "9d73bf4bd5b5c9ce6e51be0ed5ce6599fcb28e9e",
|
||||
sha_linux = "aaa076e64dd511b0d874c348f8dab80a2f9ade0887ba74845fd02c40bbf9e68f",
|
||||
sha_mac = "4715002394c5d444243c77ca231883eb999cf3313c4869cf0ae288d911f80f89",
|
||||
sha_mac_arm64 = "84dede714edd81362ed2a2f79b91b1bd9cd544f219f937582e616d73bf0ea7f9",
|
||||
sha_win = "4c704f4a4927aa537c2815a72915b7591c163ae8f0dbaedc167e810dd2a4a83d",
|
||||
),
|
||||
"3.1.41": struct(
|
||||
hash = "eb71265ef0ab905620015adbfedacf88c5dbf021",
|
||||
sha_linux = "493ec8bd3f3ea3d6d616de01d6dac9c2af696978c6c44d453757ab2f8a666656",
|
||||
sha_mac = "bb088e7b8f83b6bae02a0992eae61351e4e97bd033f8c8937cdaea0cb961ac9e",
|
||||
sha_mac_arm64 = "aaba2de03a6dcc0db90e61e5e405a52aa47124e5ef21953d052ca015ce5ee773",
|
||||
sha_win = "c7afbf2dfb6040990bd40bd72c726ada36e3e6f1985c4b62db7296465dd0778f",
|
||||
),
|
||||
"3.1.40": struct(
|
||||
hash = "c3122846bb040798aab975f61008c37eb19476de",
|
||||
sha_linux = "5501e750c92f5a54b27ee101f6816e7416f154cb4181b73fd0be3faae947016c",
|
||||
sha_mac = "052d6236ce49eaf3aa02b3c4d367b5ed4fb78209c1f1e64d48beb79e9c0b7131",
|
||||
sha_mac_arm64 = "c8af68f904367938bac255f5e64ed271021b289bb135dc77ab3b58b87e1ea5b2",
|
||||
sha_win = "3ec21ca18b56f7d3953da2e0d468154fcaaf30b5ac663d9ad00c41540923a099",
|
||||
),
|
||||
"3.1.39": struct(
|
||||
hash = "1b56b171b627af0841cf8d4d8c0160c6cb6d855f",
|
||||
sha_linux = "7ec6e15a2da2701243f89af7744403ee011211e59e4f0a6fd8ced544e72e917d",
|
||||
sha_mac = "dad7d270207aaffb8b8ef584cf0579bbad144879ea6f00ec9a8080adf22130dc",
|
||||
sha_mac_arm64 = "c5e474ca661348d0339c785e25ad81845d49dab19d5e3e84eef2393e623e0bac",
|
||||
sha_win = "a04f898b9d54dd2dc95fb697a92a1b65d07102a4cc36a02dea44c448fad83472",
|
||||
),
|
||||
"3.1.38": struct(
|
||||
hash = "03ecb526947f6a3702a0d083083799fe410d3893",
|
||||
sha_linux = "e2812859fa32b6019f688dd66f2fa48efbfb5594da9a43b876fd4fe4ca474c20",
|
||||
sha_mac = "a88c4b9eeb5dedb0d9af3b6b84bd45c486de567fbeba1675edb2d7d196e0013b",
|
||||
sha_mac_arm64 = "0e5d1519ccc1163c13ee93d85f70ef6a520464f59ca3795c47cc7c44ab0f5f49",
|
||||
sha_win = "bcdea031961a4f3c23008d53e083770d19751dd2a2aa71cacdea8462d09548be",
|
||||
),
|
||||
"3.1.37": struct(
|
||||
hash = "7c905cfc1ca6699f6ccb288ae174902cfbdcf0a2",
|
||||
sha_linux = "9ff44ef69d3f389adcacbb9b95331da72cffdf6e9431c8beb6ebf7aedb77499c",
|
||||
sha_mac = "accfe90322b6449933c3d8e1346024e2e2e3bef7b101942294f995b2c8e1b60f",
|
||||
sha_mac_arm64 = "a0461e234c08bd7ddd7a86b49b52ccc853ebe4ce0fb5b4314e9de0193c32514a",
|
||||
sha_win = "e026ea2570e747d0640829c62abddcdc14a4acffe31180110971750b80042d7a",
|
||||
),
|
||||
"3.1.36": struct(
|
||||
hash = "adedc0750c4a89b65bee866edab24298cb8d6677",
|
||||
sha_linux = "55d3cc557a83716f7a7fe121a07dbd59ed4b5d425051e22c902570e3e0ea6c4c",
|
||||
sha_mac = "6643fcef0f928cd730b894f0c2c3343eeef870576e43e56428a7a8247c7bc921",
|
||||
sha_mac_arm64 = "2e8d9103cd0ba7a2b143927196a630b091b981006c908d7d36995a210a04d73b",
|
||||
sha_win = "69a197f6fc153d9f98ced539564683cb13ff0ef144d3d4fbddf643e33b5f860c",
|
||||
),
|
||||
"3.1.35": struct(
|
||||
hash = "671550b5bdceee7bdb21493714f9a815aa5149a9",
|
||||
sha_linux = "9d4b5dcb719d39e59b646ecf7c409db20c5cb6b9575f5362ffb49a9e66290819",
|
||||
sha_mac = "01ea06c1f4a6c980bfdc812f9599a8ef424a975c89d5c288c9e6f2fa5e5ef5ad",
|
||||
sha_mac_arm64 = "f6480ee21c80fe062e0f9d8555f8bdef621601634b9bd1e5ad07b90777ff5e4b",
|
||||
sha_win = "cd26088365433ce1263a11898406c2f9284e55c2c7f23b26170c2a172c52f0b1",
|
||||
),
|
||||
"3.1.34": struct(
|
||||
hash = "2fdd6b9e5b67d5b62f84d0501a876513ff118ef1",
|
||||
sha_linux = "dd3713f077072dcdb811f934d6685187daa47c424039e31cba83633c8d1681b1",
|
||||
sha_mac = "3824609ee9b7c9919e29b19775d495a16778adb981867901f4bc503fe2f65d7d",
|
||||
sha_mac_arm64 = "72728637171df46e7cd22f90537dd6faf1d4809ed1befc504ff96768c82f0e0f",
|
||||
sha_win = "7538d1a1e0d586bd0723f595557551b05d724a5803132949a6fafb8b056af995",
|
||||
),
|
||||
"3.1.33": struct(
|
||||
hash = "49b960bd03b3a9da478a08541ce6eafe792a58a8",
|
||||
sha_linux = "eab02b3f4b7c076974452ba602f908a36adf597afa15b16095b441f191ede1bb",
|
||||
sha_linux_arm64 = "5e15af6affcf37c9ce6c304b4aeccb87a2758e1ef029dbc996f9d77d7444378e",
|
||||
sha_mac = "b8dad3cddb19c1daf9dae99020bd17b903ae9649cfc58e433ea4951e758804de",
|
||||
sha_mac_arm64 = "fbf03d06c7503f091191e440b8ea577d65b3261167cdb47359d053f12888974b",
|
||||
sha_win = "031f951668eaeea39bd9363abb3f514efc3401506374984fa9b1d7ba3130a62f",
|
||||
),
|
||||
"3.1.32": struct(
|
||||
hash = "29ad1037cd6b99e5d8a1bd75bc188c1e9a6fda8d",
|
||||
sha_linux = "25fa252e9fc674d1bcef35b3a10dd85024aa93c843b8067f8d917e5151968ffc",
|
||||
sha_mac = "7881714e7738eb183b5a421bb2b907e96359e791ad0a622be6e7f5690a16b9d6",
|
||||
sha_mac_arm64 = "04eede7352aca4b6fc1c111a8b31d00e8aa40547c3cd062ff9be4ffe1ed98d95",
|
||||
sha_win = "22c3429eb1e6051bda46e9c02c14eca1ae3749ba8c411fbd5a3b51e3b9623161",
|
||||
),
|
||||
"3.1.31": struct(
|
||||
hash = "1eec24930cb2f56f6d9cd10ffcb031e27ea4157a",
|
||||
sha_linux = "5952523c0c58cfc7c8839c1d3fe42ff34af5d8721231306ee432063dfacf96ca",
|
||||
sha_mac = "13482cf3cb29f423f2037b9dc2b9e4ff72d0a49fcd471bbaa9b76d9f86f31d82",
|
||||
sha_mac_arm64 = "654a35af16be5eeb2082e68fb36190fe76de28fa2da75ac0d2197482a203f39a",
|
||||
sha_win = "493c29f5a505ccd9687036ee4c580d190b1c32b286be0e751a78e68997cec8b2",
|
||||
),
|
||||
"3.1.30": struct(
|
||||
hash = "dc1fdcfd3f5b9d29cb1ebdf15e6e845bef9b0cc1",
|
||||
sha_linux = "151d7afdfb728e1e55ed1d100e4d3fbd20925fd65f3c3b9e093061a2c89dcac7",
|
||||
sha_mac = "f0cdbc676c58bce7a65572418fb1521665ed522d7d05ae90f0764b77801982bb",
|
||||
sha_mac_arm64 = "fca4eaf8ff528bb9308e5e8d0cf2709713b99fc19d55c6578a6c8f3e66182f55",
|
||||
sha_win = "3001101622d98b2af3e5209154f60bbe341d32f6178307c6c723e84b5fe08bdc",
|
||||
),
|
||||
"3.1.29": struct(
|
||||
hash = "d949f1b99a477d4b0b54d95413df3688afa69d0a",
|
||||
sha_linux = "d3f274446924c27082603170fab60ba78a2fb51360e5578fab4d9b5adab0fa9a",
|
||||
sha_mac = "ed224c296efd22437f298f0fe0852613b0b1d48810b1b6d87b6b7e6beb589fe2",
|
||||
sha_mac_arm64 = "af9bb86a7996bbbb36820e93dbc7f537ac23070e8730439b1e49792c4fc008e9",
|
||||
sha_win = "6203f80273565a2ee6734bd33ad7bc6940ef709cbd593e70d6489e96c02ced25",
|
||||
),
|
||||
"3.1.28": struct(
|
||||
hash = "30b9e46ddcea66e91530559379089002d8b692cf",
|
||||
sha_linux = "c23426d8b6d94cea702542c39e3bcef9439425dd4bd03bcc172e291dbbe5ed0d",
|
||||
sha_mac = "4cfb918fe3233a2b31e5734e85b2a365e634f4e8a83c4390e8595cb98ae6bd8c",
|
||||
sha_mac_arm64 = "a47f1f09bc7bbd4952cf54445d4fbfae53623ecbfecee0506a637665c7b4ea4c",
|
||||
sha_win = "4388d230871d5b1e15c2fd0db21a792ab2836f23d860475fe183c03c5db75c8c",
|
||||
),
|
||||
"3.1.27": struct(
|
||||
hash = "48ce0b44015d0182fc8c27aa9fbc0a4474b55982",
|
||||
sha_linux = "4dc872260c8f42a8e20c8612b2255adbd466fec54cfbe37b46eca4eb34a2b03f",
|
||||
sha_mac = "40c3326147b162b8357efdc72476faaa6686338cff3e176680e361c2511453e8",
|
||||
sha_mac_arm64 = "7b87610de966b84353c8c1ded8e12c034b5b913c093210ebd3b26320e2ac2990",
|
||||
sha_win = "39bbfcb09ba7feb214518a67b1ff6d38bae065b416b4483834e4fdaef2316f8c",
|
||||
),
|
||||
"3.1.26": struct(
|
||||
hash = "4f68bb2a505c727bcf58195cf4da20592a6e92c8",
|
||||
sha_linux = "82d24d5619c814ae99ef7243de428600c02e96dfc49c36e44753b1fce626766e",
|
||||
sha_mac = "7b645979d8901f3153507561bbec10ecfeb197dca5914228715a74b760cf7eec",
|
||||
sha_mac_arm64 = "d9c647fd70588bae71303a6c923df8a44ffe63e168b375d35bf6ceda21258fa1",
|
||||
sha_win = "1ad49d69634ce2d1fe04614c18060a903c102e1dbc9dfdef3a03e52c189b4c92",
|
||||
),
|
||||
"3.1.25": struct(
|
||||
hash = "ff6babb041d0f31575cc16d15ef82c6222ca99b8",
|
||||
sha_linux = "c5ae6b4525845ea36bde89cbf4e1d03de87a2658862d76c6a53bbf8de7c67ff5",
|
||||
sha_mac = "d2581aaa7207f0d9dd9949247f0706bda8561e805d67aec166ed4f3b39c3a3fa",
|
||||
sha_mac_arm64 = "dbcb76036a09248c2a839872c27b87b6d4ccc81e57add4e2a6f5e560a2c530fc",
|
||||
sha_win = "3a86d98d934456a74ed06388c1487d95a0d5a3f31777636453f22e61d57d7fb1",
|
||||
),
|
||||
"3.1.24": struct(
|
||||
hash = "54217a0950bb1dafe8808cc6207d378e323f9d74",
|
||||
sha_linux = "20e8e5bd745e3ad69c03bb877091d2fbb0c7db1eab309de8f185e9821aea40f4",
|
||||
sha_mac = "cfb897a980dd51fceb02ff143ad0fd8e5d299db640c5646d1547d522194545f2",
|
||||
sha_mac_arm64 = "e87b0727343051312f82a6653cad4682a518dd9cb6575844c0cd6505d520fab6",
|
||||
sha_win = "a0ea07f9014a912f13176fdbbc1ee7ab08104d45e7ca7e1c237505579b63d530",
|
||||
),
|
||||
"3.1.23": struct(
|
||||
hash = "bfd5e63a44ba4c8568cd8ac87c27b35e40732bf4",
|
||||
sha_linux = "3b8d9e163d6afc8569deca0ba1d4042f80da7a31e23cee006c3faa9cbf2fbc31",
|
||||
sha_mac = "fd1c79475e47fd2f06ee9ba189e68309e443c2d3c56fd28163d1cd6f77047075",
|
||||
sha_mac_arm64 = "66e57ee0962ec31056674b5681f91bd62f85b0bf1238a8d5b160660c0bf47292",
|
||||
sha_win = "7c30b281abcc0ffb9e7575197f1ac0598a94c6cec36547b81554a97b792a9e75",
|
||||
),
|
||||
"3.1.22": struct(
|
||||
hash = "990cee04a21caafc75955d736fb45791a7f2aeee",
|
||||
sha_linux = "a310ed9f16c97a91c72564ca5f85c412cb99429d8001825663fda1b28c00346e",
|
||||
sha_mac = "b19afaf414178781c4c91ee711ec4d9063b9736719e45ca2e8b45c2258df16be",
|
||||
sha_mac_arm64 = "7c8212abf77f0307b6ff848bf9c6212f870506df6d074349f76401f30f9fcefe",
|
||||
sha_win = "2c0cfe267d47f390d7e35a83545b1d5043e4a7fb77b838ee19b0fce65035f55d",
|
||||
),
|
||||
"3.1.21": struct(
|
||||
hash = "a16a8bca2466eb144f7c93fa899c0272c8815dc3",
|
||||
sha_linux = "7045ddb3b37a2cc63cb1cf976019a6a3b7f8dbdc71254db0eee5b0452f94e9e7",
|
||||
sha_linux_arm64 = "2852c8b108ec748d52d31dab3f4854bc6022df008019daff1c7e31ac00363b3f",
|
||||
sha_mac = "2a8d3d3ad721fec81ca1a4a581e4183b6e732e9905beb874531851846a05a367",
|
||||
sha_mac_arm64 = "cf788a7bdc38bb40d01f94b2d46acafb0e2f02d8ee3b3d69541c114e467ee37f",
|
||||
sha_win = "81518bba13f41717ffe6990b6d4a5af635d0c9d0f71a8d3bc0980cd0bc8f5f66",
|
||||
),
|
||||
"3.1.20": struct(
|
||||
hash = "d92c8639f406582d70a5dde27855f74ecf602f45",
|
||||
sha_linux = "3b606d133489aac8cdfff4f99ff14a35563b1fafe658aa23f83694f77ed9467a",
|
||||
sha_mac = "cc9ea1696bdb3f28778bac1cf4587a34e90830e1c64976cd205fd73e77566cd8",
|
||||
sha_mac_arm64 = "b976410bf4fa1af9896be1c736634bfb56b2ef0f3386cd3cf39616ce47445cc0",
|
||||
sha_win = "1e6806ee240ab838ae7eee618c57efc793195c62e4d167136507efcfa66d6c6d",
|
||||
),
|
||||
"3.1.19": struct(
|
||||
hash = "4c3772879a04140298c3abde90962d5567b5e2fc",
|
||||
sha_linux = "18d4a5bb93371fe1d4586db9804f673fff0c510d98713ec25b6bda1a8457230d",
|
||||
sha_mac = "6adb721340cb93b7a3efafbfd1d283842a39bb6f1390630b0806c8af26b66840",
|
||||
sha_mac_arm64 = "429c9e3a79d32380f3dfee52b1001963edaa2e3035fce9f52ca87b08e1a2f26e",
|
||||
sha_win = "0368eefb28f42799ce897020d0d10a4a27e1b69b650575d94deb268e402a3632",
|
||||
),
|
||||
"3.1.18": struct(
|
||||
hash = "49d45744895c7d7e28acd94a385d7ee361653b4a",
|
||||
sha_linux = "6ef373c4ff3cdf33d7beecea47d4eaee7795693f8ca9469f33785cb9c54f40bb",
|
||||
sha_mac = "ad0e645abdb6d3f0b6c6ad0ee70761010a712949c9b0b193aefc78ecbc3f1710",
|
||||
sha_mac_arm64 = "68d0a1ec3e83e0415e24133c59e64206b83686712434c8c2e6792547cf654b1c",
|
||||
sha_win = "96829a228f7c08fabd37833f7361614785aa39aa865beef06890ee8ede58dc66",
|
||||
),
|
||||
"3.1.17": struct(
|
||||
hash = "d27fef2070c86a218965da8b8b5df8b4425aa3bb",
|
||||
sha_linux = "562b3ba75ce77a917317bc697febb38194e85cfe07f4fec308c3b29c621f8f13",
|
||||
sha_mac = "8a2bee8ea434049e40663a6d78d1c3584e5c32196fd85d6a10f3192d2e3aba4e",
|
||||
sha_mac_arm64 = "5f60d3f351d06d862e853a294642d24243d6cb197e34c2f2602d80555c2eb014",
|
||||
sha_win = "90b2ade825e07bb05831090dd64b5f5b01a4169a84a3ddec85fcd60be3b246a5",
|
||||
),
|
||||
"3.1.16": struct(
|
||||
hash = "fb1baf00423818052359cf9126e94bc71c39feb5",
|
||||
sha_linux = "bdce7e58833069a98d7e0b4fd9d6fea7394770ec10339cc95ed9fe52ba39f3a7",
|
||||
sha_mac = "d05f4e997324d7f7d8561436677687d296893d6414f53930184fab272e4c6158",
|
||||
sha_mac_arm64 = "36ab8da30698558a567c5c1c0e130b59f08cf4b29c9c5242f4ea60b449ecff17",
|
||||
sha_win = "e1324c22c914ab7f62fe6d38a550de25b2232a723c80393fa8884a260c07766d",
|
||||
),
|
||||
"3.1.15": struct(
|
||||
hash = "568a46a9fb7e1f1686a6f7216b3dc976f28d2a79",
|
||||
sha_linux = "737db513047d12e95a12f4fbe05314f3af79ac955d1ea43fc83626337e307edc",
|
||||
sha_mac = "f8993371a1ff713203023f0283054a31df5342ca287debc4e16d04d97e069aee",
|
||||
sha_mac_arm64 = "c61a8efa8543a6c44e394a0685e7d4facb4c7dbb210c4c32d311b0002c4dec99",
|
||||
sha_win = "235592467a0be6a537e03fb587aaee230aa2c889f2785cb9754eb44bfbf747ed",
|
||||
),
|
||||
"3.1.14": struct(
|
||||
hash = "ade9d780ff17c88d81aa13860361743e3c1e1396",
|
||||
sha_linux = "e2c43068fb1985592db42183a13f85bbd9518b3747746e0003d70c7d770a0b2f",
|
||||
sha_mac = "567e9548f3fa7c1aa717821af4aaa7849a0f7217cb55eb7f66a06c898808fd96",
|
||||
sha_mac_arm64 = "df8319aba8bc0d0c40ebec3c8f45e507c2a51a57df24826d4cab6f6cd75017ac",
|
||||
sha_win = "6bfec6bf6a01e483a57e91f7223340a425f6ff711cbd32a08ed78002810d7882",
|
||||
),
|
||||
"3.1.13": struct(
|
||||
hash = "bc44364b561cfde15c243a54e3b96ea12d7ea284",
|
||||
sha_linux = "290f04300465cbb7c8e920f9986128b3f287b14b93627b0c6d069d534860c1b4",
|
||||
sha_mac = "72b209a3e5800be155cf5b29bdaceb18aefceeba68f35ac719a483bd27d85705",
|
||||
sha_mac_arm64 = "2bf90ed73454f58b810e09a776a34ddf7395f9ee45580f3a8fea53f74ba7ede2",
|
||||
sha_win = "07fd730289c26f72ae4037fd25f608f6b9d36f1950677229b6c7d392957db3d2",
|
||||
),
|
||||
"3.1.12": struct(
|
||||
hash = "a8c3b314d61e2bb98581d522f858132b2fc21488",
|
||||
sha_linux = "ac8ae46b2fe2fbef07077cdeefc8288d2a73e3189958f32b36f2d17d868275d0",
|
||||
sha_mac = "c33afddd7c8f7a5293cb427ef26eb65f51fa3121d0577568824174227aa37ef3",
|
||||
sha_mac_arm64 = "253feff779385d2499764cd988175446e21db8cbb9952746e96969c2a763924c",
|
||||
sha_win = "04015fb6a1b4ad4d7c16587a7eeaabf19c5b35097f3e28efa029c0c67547067c",
|
||||
),
|
||||
"3.1.11": struct(
|
||||
hash = "8c3a799341c01148692c52fda73bbba5e89c5727",
|
||||
sha_linux = "ba52cfd784362530866c9d554ddc62cfa3f0690f44007c0b3b36e189bb579d5e",
|
||||
sha_mac = "c46548425e0bf4acd3c4275aff6a463c90ff1faf283ae7f5237d8c17bf84d779",
|
||||
sha_mac_arm64 = "c5ae40c468955ed02b86c54061278d2b4075b1230612bae5910f836aa9c200b3",
|
||||
sha_win = "74481a1998236fd9d296f367584934d5ab8bbf174446ceb647f714031671de98",
|
||||
),
|
||||
"3.1.10": struct(
|
||||
hash = "8bd05c7221b4ce34d4bedec40b672d94e681a765",
|
||||
sha_linux = "f5a937383b5c9fa15071a31d679a2ddd5c03bc8952cbbd5bfbf7c0a86c2dae5a",
|
||||
sha_mac = "e73491f2787cbda75e718c3947916b57259164eddd9b2db16b9c876d3deb16a9",
|
||||
sha_mac_arm64 = "d7485ce3b13f183484af5163d7bec79ece9a1fdc5845f8152e36270e6f90cfd9",
|
||||
sha_win = "dd75061405bc902ecd983bd3e4cfd6931a866e1c9de602c4458280cbeb271720",
|
||||
),
|
||||
"3.1.9": struct(
|
||||
hash = "edabe25af34554d19c046078f853999b074259ca",
|
||||
sha_linux = "89fa75c981e47ad19942b8236d2604b2666dfd516a08626aaa1bfb0d657c87bf",
|
||||
sha_mac = "6c7f59dd84d1484f1dfa041d71cc79fc97db8d15834b6220e5868bd9bd373a24",
|
||||
sha_mac_arm64 = "13a258de0daaa3c09a53e21a67414cbf5fa5706f955767fe791a059ed5eb90bf",
|
||||
sha_win = "0857b03919b948558f9a57d15cf2b220852cc070359c386da0e6e4831c7ac5e0",
|
||||
),
|
||||
"3.1.8": struct(
|
||||
hash = "8c9e0a76ebed2c5e88a718d43e8b62452def3771",
|
||||
sha_linux = "6b170777eb523e62972ad458e533b1853cd0c4e02f6f2cf4cd68e109499ccd9b",
|
||||
sha_mac = "ede01fe160c3b8443f53f94dbad530e0e7e8197a1b874c7bb9038b187279080c",
|
||||
sha_mac_arm64 = "9ecc8678f948875e7f64defeababc0320f98e103547f395c390c01d76e5a1d64",
|
||||
sha_win = "039d27d4ae43b50d0858dbc4dcf412f572351e98e1056d7fdcdf2aab1740557e",
|
||||
),
|
||||
"3.1.7": struct(
|
||||
hash = "d0e637fe48197587d981f79e8114757731d0c2a9",
|
||||
sha_linux = "d941738a3c755d6d530bab66d38325515b9dbaa588d2db2b8a63b2a8a1961e52",
|
||||
sha_mac = "597aacdb25d422094427014d3a97e8b91ec80df2255a66e0986414bf71aaf37d",
|
||||
sha_mac_arm64 = "a0b2db0269c55e854d1007a59f95b8e5f14d32309e76f985ea9afe481b2bd6e6",
|
||||
sha_win = "cb44339db27b694862efb37539d41eaff7253c93c0882cf7d9aaf4afeaa82912",
|
||||
),
|
||||
"3.1.6": struct(
|
||||
hash = "8791c3e936141cbc2dd72d76290ea9b2726d39f3",
|
||||
sha_linux = "f43dfe707dff18fa7a08dbfe2fa3f8d46afb65ccba9bbe554465d83d5d80e388",
|
||||
sha_mac = "13a01080ff042560b9a9b1b2c9fc5f8c154710bc41db8bbd907a9e53c286afd0",
|
||||
sha_mac_arm64 = "7ae97e85593b037c345b539e7f8b8952b82c001be982219060c83f0834bb6827",
|
||||
sha_win = "e7005c0a5439e532cb64f34ba90405792288a1ed8845cdafcedd3de5af6fd3f2",
|
||||
),
|
||||
"3.1.5": struct(
|
||||
hash = "2dee36c7163f7394ab9341854ef5281501dd97d0",
|
||||
sha_linux = "6641703b7da1805aa5a8488d231ae7fedfe27f1a5a33e7d05a2ee5902ab84180",
|
||||
sha_mac = "9dba57f09702a7eed53f3f71cdd8a4ed1202ca5a5f4449249c2d98a285b26f75",
|
||||
sha_mac_arm64 = "0093b4d47c9eb9c8bab5b3048c68855255b5e5a8bfd78f4183424009489327e6",
|
||||
sha_win = "849edc42b494f670df4763dbc8ebbb5464ac28787482668c3f6e27588a77cb3a",
|
||||
),
|
||||
"3.1.4": struct(
|
||||
hash = "39e60dda6945cfcd6487725bdb1361ae7975173f",
|
||||
sha_linux = "4a57c0d60eeb4e021de61c8497f0b595a0a9db0235f1640a528de752409f4fcf",
|
||||
sha_mac = "f28a9a4f42f67de1d5c4d8a288f29e5082bbf4fcb172e0c6e248695163372478",
|
||||
sha_mac_arm64 = "be35043edad7a7022f7b174e8efc90e2db54ba4fd71288760bea4db082835f56",
|
||||
sha_win = "d97ff247bdfc7e839610cbcd87d30a65018f964d183d5b852b6021d43c5d199a",
|
||||
),
|
||||
"3.1.3": struct(
|
||||
hash = "2ddc66235392b37e5b33477fd86cbe01a14b8aa2",
|
||||
sha_linux = "8b840819eb88f9178c11bad25859ce448a0559e485823a863a6add21380636ca",
|
||||
sha_mac = "0cb3f9bfbcc744233eae9d20036155738409405eacf8a3d4f9beefc5919d809a",
|
||||
sha_mac_arm64 = "ee2772f380419df17d154e00388a16bcddc78c7af035c16a2ee534d6ecf099aa",
|
||||
sha_win = "c0549e1dbaa581ae66934c38beebd4250cd450cc2778e9a602cd9431bc81bc37",
|
||||
),
|
||||
"3.1.2": struct(
|
||||
hash = "6626e25d6d866cf283147ca68d54ac9326fe399f",
|
||||
sha_linux = "4fb53364a2ba1de8978445aa26b2204bfd215b41da5d7df04f231040b197010a",
|
||||
sha_mac = "a8e347accb1ff402d96a128912ac8cda1731611c9f89095fee0ad39a6a18bbc3",
|
||||
sha_mac_arm64 = "4374f5c852d0403b0a3b0e9dc8a3856a340e9d82ecf0f20aa8b36c6179d31fc8",
|
||||
sha_win = "e96f6ab8252fefa42f461676311d4c4e2d96fdc2e876ece07d9d7a49ef31aef0",
|
||||
),
|
||||
"3.1.1": struct(
|
||||
hash = "5ee64de9809592480da01372880ea11debd6c740",
|
||||
sha_linux = "ba94c5ecabacbedc89665a742c37c4c132c739aea46aa66fd744cb72b260c870",
|
||||
sha_mac = "8b5f8cec55af0e6816a08d8d1e8b873f96d0e0504fdd6e8deb2fc024957d1aa7",
|
||||
sha_win = "6cbe976aff6155cf1c48707f0520b5aa6a7770860e9b1964bfca3e5923ce7225",
|
||||
),
|
||||
"3.1.0": struct(
|
||||
hash = "562e3a0af169e6dea5e6dbecac2255d67c2c8b94",
|
||||
sha_linux = "0714344e32e244e6d44d9ea75937633ab1338e417a232fb66d6dcd7d4b704e8c",
|
||||
sha_mac = "f6c1cad729ed799e1df09eacf5aa80cce9861d69ec6d9581c17e4ba8d9b064ce",
|
||||
sha_win = "756c41cbcab4ae6077cca30834d16151392b8c19ab186c13d42d7d05d6d727cc",
|
||||
),
|
||||
"3.0.1": struct(
|
||||
hash = "91b7a67a486d2430e73423a38d950d8a550826ed",
|
||||
sha_linux = "25fd430268596229c4ac38e188d7c2b31f75c2ec8172b1351d763e37c830c6af",
|
||||
sha_mac = "52ec2204115b727cc4de38b5eeae147eead12b299b98e5a88653d12958cae4d4",
|
||||
sha_win = "0e072736b471c9a07cdf534ba4da46b3b6545b63c8a6cbb0ef7d544251e15092",
|
||||
),
|
||||
"3.0.0": struct(
|
||||
hash = "7fbe748230f2ce99abbf975d9ad997699efb3153",
|
||||
sha_linux = "10646b64daea15354f14f89f7e79937f420b77f31bda7c4b174de2474835950f",
|
||||
sha_mac = "ebb17bc91c6a72ca06d17337d27aa1a2be4c9af4c68644c221712123f663b8ab",
|
||||
sha_win = "0d4f2ff5d88a8eef5ed769ee4ffc5d5574143911d2e0079325cdc5206c9e9bb1",
|
||||
),
|
||||
"2.0.34": struct(
|
||||
hash = "d8fc1b92dbc0ce8d740a7adb937c5137ba4755e0",
|
||||
sha_linux = "a6304e3a52c172eb178c6f9817d74aa3ee411e97ef00bcae0884377799c49954",
|
||||
sha_mac = "975ae11000100362baf19d161fec04d82e1f7c9fb7d43c43864ddd65a47f1780",
|
||||
sha_win = "8167a44bb895a0fdc153836bed91bf387be57f2dc1b8f103bf70e68923b61d39",
|
||||
),
|
||||
"2.0.33": struct(
|
||||
hash = "cef8850d57278271766fb2163eebcb07354018e7",
|
||||
sha_linux = "958a0f4b1533e877c1a5ed3c13cb8baabc80e791d45858c2c94ac62325ada953",
|
||||
sha_mac = "8ecb248653d44c3748e23c089cb9f0e3d4eee7cda13fdec27ec0113b896e34c4",
|
||||
sha_mac_arm64 = "1ec6f3d7afa5e10f3af996e26d9c3a66f02ae49e48e512a4b5d6b7165c61290f",
|
||||
sha_win = "6b6b2831f8b338488f787b4a8c34700277bf3988358dbb54426f017155603ac9",
|
||||
),
|
||||
"2.0.32": struct(
|
||||
hash = "74646397e3c5010824ad60d1de86c6bcbe334dff",
|
||||
sha_linux = "236b3954e71d3bb30d347c655b9f47f2a091aa2e61046e1912c8da90152f4ca1",
|
||||
sha_mac = "6a03267574534948e3b041e5d3e31bd757751ef17912eb6e90b96a47da03afb6",
|
||||
sha_win = "2f8fbf0db097d67d0c364946faceec27c569c5c2d7b22068eef8db55645aba36",
|
||||
),
|
||||
"2.0.31": struct(
|
||||
hash = "597724ca3f6cd6e84bea73f1f519a3953b5c273d",
|
||||
sha_linux = "ef70c7733aa0df41cb4c812f5a89bf6b2ed13ca8aa252872396c0be271156d9e",
|
||||
sha_mac = "77e57c3e98758488ef676f8f58a85faa0bd65a1d326a91771ad83d7cb0e373ca",
|
||||
sha_win = "541605b740afccd08a39f5ae815978f699f350d621a1b2dfba0763970b56aee4",
|
||||
),
|
||||
"2.0.30": struct(
|
||||
hash = "c69458f1bbf3ef5b8da4e934de210659cc9bca04",
|
||||
sha_linux = "ee1c8270096a728966ae38af548047d1f64c18318e06ba75952e657136f02537",
|
||||
sha_mac = "574a5819308eba6c8be6a780e26dff415a0e7178d3f44162dd8dca87eb40d4a7",
|
||||
sha_win = "242d244f4f5f5af08e6e6ac9c143aebf1b7bb2a23fd2992350731e59acfee07c",
|
||||
),
|
||||
"2.0.29": struct(
|
||||
hash = "c2369dc425725fff86ba90a9007a4603ddf7941b",
|
||||
sha_linux = "7df4a8f3e25820becadfa7f1fe0d78e764102ec3ee50c474ca1634ed90d48890",
|
||||
sha_mac = "d998521ba95882a27792f0113ea2c972fbb891c240649f4c994f0260c0e1a213",
|
||||
sha_win = "c64aa3f2af6503f6711b2322986a45784e00d7c7fe13ec3f5c4f740472d065a0",
|
||||
),
|
||||
"2.0.28": struct(
|
||||
hash = "866055ea639d64dfedc625d28ec981e47ce37168",
|
||||
sha_linux = "7dca7704eb14e367bb67e9abc9eaf59e75f59b74e32422e04556de10897a9a86",
|
||||
sha_mac = "370f76493e3805e2538290b698a381f04b6d78a77771e48fc0099cf89dad985f",
|
||||
sha_win = "e913c50ea5f196d36971f7cf5b1cf9a9ca27ce0818aba56be3a66e31e95c0e5b",
|
||||
),
|
||||
"2.0.27": struct(
|
||||
hash = "1ac46e3b84955231ab4a4f4cbe0c7ac28c86b8cc",
|
||||
sha_linux = "3e124e278de168cf22e03b93b2f14a65a86777e428cdaab7e5e1c2289eb41605",
|
||||
sha_mac = "388262b9e1042ef9a3a1945d5a23dcd634c8042a225e8fdf80bcc2c1cb7e05cc",
|
||||
sha_win = "762276a332432e717afb988310d21ae10e36facc1e05bfd77042a364fb43cc3c",
|
||||
),
|
||||
"2.0.26": struct(
|
||||
hash = "823d37b15d1ab61bc9ac0665ceef6951d3703842",
|
||||
sha_linux = "996e16d368a99dd4dd12126acbcb8bea9a607b5257cc7b747c4afc2f036fd8cf",
|
||||
sha_mac = "8b2d7e84cc449531e88034beb31da89a0b61ccaeaa1584ffb6da7842c6348fdc",
|
||||
sha_win = "095e772764d7f8c0f8228bda4b8500ae43aac2303567da5cdc9f8623f70a5743",
|
||||
),
|
||||
"2.0.25": struct(
|
||||
hash = "f6f001b08fbb67935379cf13d17fd9bfdbaff791",
|
||||
sha_linux = "06d8e2f3d4f4b35a57de9c15e62a559c941cfba1dd7ec02353d815904d912c3b",
|
||||
sha_mac = "6541bf3a648aae7df84de424ff392dd1513ab5450203c84f72a6a03e321a301b",
|
||||
sha_win = "267fbfa809ec0eb911c1962b1b9768675cb82228e694a5f9ef570232ee71db76",
|
||||
),
|
||||
"2.0.24": struct(
|
||||
hash = "6ab7fc5622a67e6111d07c4ba61c8d3c8fc33ed2",
|
||||
sha_linux = "e5daa0e87f3afd2197e7975297cb0cd4c245edccb964ca5f1f32ee7d985bf440",
|
||||
sha_mac = "e4b7f2a7b71d6ac4610ee7b14743570e0dfba3668dc6b4f984cbe7a135888527",
|
||||
sha_win = "db2aad422a3ca2295be6101b0151eeee55dcea29ba1f31b4594c02ba46591cbe",
|
||||
),
|
||||
"2.0.23": struct(
|
||||
hash = "77b065ace39e6ab21446e13f92897f956c80476a",
|
||||
sha_linux = "7713a9a5572d839aea9eaa84a7c4779d11c6c8818ee64a0f443b62081fae6d47",
|
||||
sha_mac = "b793087462d581e25c8c267fca9d30519619e3272480862a56cc316a32c7afab",
|
||||
sha_win = "b8885cbb41a39e4734861462e05ee58c7ff7562016a842bcee2603f229940e8b",
|
||||
),
|
||||
"2.0.22": struct(
|
||||
hash = "6465a9acb820207acf7da44661a7de52d0a1ae3c",
|
||||
sha_linux = "c079781124e763c53c9fc73781fcee40296ce3314276836bc694f07bd331a859",
|
||||
sha_mac = "ab95574dfc685b0300e37bea36aba413045bbfa2ab06b93eceb881670489eec1",
|
||||
sha_win = "ba142e7e380596cba763e3a414de6511bcb86de48e4b48cf393b1ea449a24aaa",
|
||||
),
|
||||
"2.0.21": struct(
|
||||
hash = "72f4ec97fbc7ec16c15ae68a75b0a257b2835160",
|
||||
sha_linux = "741264f33f96ba4b785ed0b133861ebdfefbaefab76ddcfe7bde6522829d6f70",
|
||||
sha_mac = "b07c0d65ee7e2799170c6f3b2aacebfe070c2e4975088bcd1b3a4140fecd8418",
|
||||
sha_win = "dc3cbf47aa4be52a92526f1790a013734ecbd407f7f36286ed0283c96355999a",
|
||||
),
|
||||
"2.0.20": struct(
|
||||
hash = "e0c15cd14170f407a9eb27fcbad22931dc67feb7",
|
||||
sha_linux = "a196504fd1095836ca3961208338ff9e292be7729ea529bc19800aa7c966d34a",
|
||||
sha_mac = "6cdbf17ed61486b38ea79d3f31d74483e7388d1e7468518dccba3f24e0ddd4c4",
|
||||
sha_win = "4d22a32c219dbe18c55b635d014b9eaf7da60536171b7af37d9a8099fd33794b",
|
||||
),
|
||||
"2.0.19": struct(
|
||||
hash = "9b9ff2dabfb4a7fbacbc004c0bead12a60f9d05c",
|
||||
sha_linux = "bd7c2a38ac88d219a1ab5003ddbf8fdc66a6ba55bc69f99077346edf2753b4ea",
|
||||
sha_mac = "6cc44029c9052855a55938eb6496b5659da4b1ce9cb34502b740af5993a94f93",
|
||||
sha_win = "a1fa8b1c387b9307f9b87c43dc83c0ff1bc04b9f29fbe4f39aff2dd946ca4b70",
|
||||
),
|
||||
"2.0.18": struct(
|
||||
hash = "c2ac7520fad29a7937ed60ab6a95b08eb374c7ba",
|
||||
sha_linux = "e9f777de592f606b10104b2efe5179a7a8f44e3a9dffa1e3aaf73e05eb8893d7",
|
||||
sha_mac = "86b1dd62e424e3788bf132292a694a25ca9b0875d06f50d0f5d424593697452c",
|
||||
sha_win = "49ce07bda6be070251db44a08fcc05cae21ffdbd7522423a0c79bde635e87e28",
|
||||
),
|
||||
"2.0.17": struct(
|
||||
hash = "f5c45e60392b82f603e3a8039c62db294fab02d2",
|
||||
sha_linux = "b40a4874057e4cace600f8ee9787dcbe236e3dc5b2fff5c2ecb0e867e426f99c",
|
||||
sha_mac = "081f61abf7d5ac0ec31aaffc5550013d4093ea4ea39520b7a32b7448d2a6ee70",
|
||||
sha_win = "45d06e597e6a1185a76200bd0481495e7298800a4805045d9cdbcce6311c91b2",
|
||||
),
|
||||
"2.0.16": struct(
|
||||
hash = "80d9674f2fafa6b9346d735c42d5c52b8cc8aa8e",
|
||||
sha_linux = "e527638b224d9a30dc7e5fa4b9bd2eb2ab76ad306739ba8cacf5a5e333933a2a",
|
||||
sha_mac = "061020eb0e3ee0611dc5a0008ccc7778168a4f838d49ca41c0aad8c52c1a01c9",
|
||||
sha_win = "99364ed0388f928e0594f790662bf3a30c2894b0eff81797e1b64f62128561cb",
|
||||
),
|
||||
"2.0.15": struct(
|
||||
hash = "89202930a98fe7f9ed59b574469a9471b0bda7dd",
|
||||
sha_linux = "7ff49fc63adf29970f6e7af1df445d7f554bdbbb2606db1cb5d3567ce69df1db",
|
||||
sha_mac = "e35cced1514ad0da40584f8dd6f76aabf847ce0fa82c6dc8dd9442fb74ed6d0d",
|
||||
sha_win = "31d5f8107c87833cea57edc57613bba4b36b16152772f744c5ad204594b4e666",
|
||||
),
|
||||
"2.0.14": struct(
|
||||
hash = "fc5562126762ab26c4757147a3b4c24e85a7289e",
|
||||
sha_linux = "e466cd47ddd4bf0acd645412fdf08eda6d232484e48e5a2643e08062a7a4cf56",
|
||||
sha_mac = "1c554c08459b7025638ca4eddba0d35babe8c26b202a70a74e9442d577896211",
|
||||
sha_win = "428bc6094671937af96f26d803871fc5cd83d4d2b1c1df45fa6873a9bc5cac51",
|
||||
),
|
||||
"2.0.13": struct(
|
||||
hash = "ce0e4a4d1cab395ee5082a60ebb4f3891a94b256",
|
||||
sha_linux = "8986ed886e111c661099c5147126b8a379a4040aab6a1f572fe01f0f9b99a343",
|
||||
sha_mac = "88c91332c8c76fed14ebf0edc9a08f586012f54f04ad61e5b1b6d02bf96bdeab",
|
||||
sha_win = "9fb3b945b7bd56e34d17ec04de4cce475f26c49d161aee9d9c0b8b1434591f88",
|
||||
),
|
||||
}
|
@@ -1 +0,0 @@
|
||||
build --incompatible_enable_cc_toolchain_resolution
|
@@ -1,4 +0,0 @@
|
||||
bazel-bin
|
||||
bazel-out
|
||||
bazel-test_external
|
||||
bazel-testlogs
|
@@ -1,6 +0,0 @@
|
||||
bazel_dep(name = "rules_cc", version = "0.1.1")
|
||||
bazel_dep(name = "emsdk")
|
||||
local_path_override(
|
||||
module_name = "emsdk",
|
||||
path = "..",
|
||||
)
|
3696
emsdk-cache/emsdk-main/bazel/test_external/MODULE.bazel.lock
generated
3696
emsdk-cache/emsdk-main/bazel/test_external/MODULE.bazel.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,2 +0,0 @@
|
||||
// This file prevents customJSFunctionToTestClosure from being minified by the Closure compiler.
|
||||
Module.customJSFunctionToTestClosure = function() {}
|
@@ -1,3 +0,0 @@
|
||||
Module.customJSFunctionToTestClosure = function(firstParam, secondParam) {
|
||||
console.log("This function adds two numbers to get", firstParam + secondParam);
|
||||
}
|
@@ -1,16 +0,0 @@
|
||||
#include <emscripten/bind.h>
|
||||
|
||||
using namespace emscripten;
|
||||
|
||||
class HelloClass {
|
||||
public:
|
||||
static std::string SayHello(const std::string &name) {
|
||||
return "Yo! " + name;
|
||||
};
|
||||
};
|
||||
|
||||
EMSCRIPTEN_BINDINGS(Hello) {
|
||||
emscripten::class_<HelloClass>("HelloClass")
|
||||
.constructor<>()
|
||||
.class_function("SayHello", &HelloClass::SayHello);
|
||||
}
|
@@ -1,6 +0,0 @@
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
std::cout << "hello world!" << std::endl;
|
||||
return 0;
|
||||
}
|
@@ -1,61 +0,0 @@
|
||||
load("@emsdk//emscripten_toolchain:wasm_rules.bzl", "wasm_cc_binary")
|
||||
|
||||
_TEST_TARGETS = [
|
||||
"long_command_line_file01",
|
||||
"long_command_line_file02",
|
||||
"long_command_line_file03",
|
||||
"long_command_line_file04",
|
||||
"long_command_line_file05",
|
||||
"long_command_line_file06",
|
||||
"long_command_line_file07",
|
||||
"long_command_line_file08",
|
||||
"long_command_line_file09",
|
||||
"long_command_line_file10",
|
||||
"long_command_line_file11",
|
||||
"long_command_line_file12",
|
||||
"long_command_line_file13",
|
||||
"long_command_line_file14",
|
||||
"long_command_line_file15",
|
||||
"long_command_line_file16",
|
||||
"long_command_line_file17",
|
||||
"long_command_line_file18",
|
||||
"long_command_line_file19",
|
||||
"long_command_line_file20",
|
||||
]
|
||||
|
||||
_TEST_TARGET_SUFFIXES = [
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e",
|
||||
"f",
|
||||
"g",
|
||||
"h",
|
||||
"i",
|
||||
"j",
|
||||
]
|
||||
|
||||
[cc_library(
|
||||
name = "{}_{}".format(target, suffix),
|
||||
hdrs = ["include/{}.hh".format(target)],
|
||||
# stripping include prefix to create more flags passed to emcc
|
||||
strip_include_prefix = "include",
|
||||
srcs = ["{}.cc".format(target)],
|
||||
) for target in _TEST_TARGETS for suffix in _TEST_TARGET_SUFFIXES]
|
||||
|
||||
cc_binary(
|
||||
name = "long_command_line",
|
||||
linkshared = True,
|
||||
srcs = ["long_command_line.cc"],
|
||||
deps = [":{}_{}".format(target, suffix) for target in _TEST_TARGETS for suffix in _TEST_TARGET_SUFFIXES],
|
||||
)
|
||||
|
||||
wasm_cc_binary(
|
||||
name = "long_command_line_wasm",
|
||||
cc_target = ":long_command_line",
|
||||
outputs = [
|
||||
"long_command_line.js",
|
||||
"long_command_line.wasm",
|
||||
],
|
||||
)
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f1();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f2();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f3();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f4();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f5();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f6();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f7();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f8();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f9();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f10();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f11();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f12();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f13();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f14();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f15();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f16();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f17();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f18();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f19();
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void f20();
|
@@ -1,43 +0,0 @@
|
||||
#include "long_command_line_file01.hh"
|
||||
#include "long_command_line_file02.hh"
|
||||
#include "long_command_line_file03.hh"
|
||||
#include "long_command_line_file04.hh"
|
||||
#include "long_command_line_file05.hh"
|
||||
#include "long_command_line_file06.hh"
|
||||
#include "long_command_line_file07.hh"
|
||||
#include "long_command_line_file08.hh"
|
||||
#include "long_command_line_file09.hh"
|
||||
#include "long_command_line_file10.hh"
|
||||
#include "long_command_line_file11.hh"
|
||||
#include "long_command_line_file12.hh"
|
||||
#include "long_command_line_file13.hh"
|
||||
#include "long_command_line_file14.hh"
|
||||
#include "long_command_line_file15.hh"
|
||||
#include "long_command_line_file16.hh"
|
||||
#include "long_command_line_file17.hh"
|
||||
#include "long_command_line_file18.hh"
|
||||
#include "long_command_line_file19.hh"
|
||||
#include "long_command_line_file20.hh"
|
||||
|
||||
int main() {
|
||||
f1();
|
||||
f2();
|
||||
f3();
|
||||
f4();
|
||||
f5();
|
||||
f6();
|
||||
f7();
|
||||
f8();
|
||||
f9();
|
||||
f10();
|
||||
f11();
|
||||
f12();
|
||||
f13();
|
||||
f14();
|
||||
f15();
|
||||
f16();
|
||||
f17();
|
||||
f18();
|
||||
f19();
|
||||
f20();
|
||||
}
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file01.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f1() { std::cout << "hello from f1()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file02.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f2() { std::cout << "hello from f2()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file03.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f3() { std::cout << "hello from f3()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file04.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f4() { std::cout << "hello from f4()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file05.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f5() { std::cout << "hello from f5()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file06.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f6() { std::cout << "hello from f6()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file07.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f7() { std::cout << "hello from f7()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file08.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f8() { std::cout << "hello from f8()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file09.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f9() { std::cout << "hello from f9()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file10.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f10() { std::cout << "hello from f10()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file11.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f11() { std::cout << "hello from f11()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file12.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f12() { std::cout << "hello from f12()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file13.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f13() { std::cout << "hello from f13()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file14.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f14() { std::cout << "hello from f14()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file15.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f15() { std::cout << "hello from f15()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file16.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f16() { std::cout << "hello from f16()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file17.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f17() { std::cout << "hello from f17()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file18.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f18() { std::cout << "hello from f18()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file19.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f19() { std::cout << "hello from f19()\n"; }
|
@@ -1,5 +0,0 @@
|
||||
#include "long_command_line_file20.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void f20() { std::cout << "hello from f20()\n"; }
|
@@ -1 +0,0 @@
|
||||
build --incompatible_enable_cc_toolchain_resolution
|
@@ -1,4 +0,0 @@
|
||||
bazel-bin
|
||||
bazel-out
|
||||
bazel-test_secondary_lto_cache
|
||||
bazel-testlogs
|
@@ -1,26 +0,0 @@
|
||||
bazel_dep(name = "rules_cc", version = "0.1.1")
|
||||
bazel_dep(name = "emsdk")
|
||||
local_path_override(
|
||||
module_name = "emsdk",
|
||||
path = "..",
|
||||
)
|
||||
|
||||
emscripten_cache = use_extension(
|
||||
"@emsdk//:emscripten_cache.bzl",
|
||||
"emscripten_cache",
|
||||
)
|
||||
emscripten_cache.configuration(flags = ["--lto"])
|
||||
emscripten_cache.targets(targets = [
|
||||
"crtbegin",
|
||||
"libprintf_long_double-debug",
|
||||
"libstubs-debug",
|
||||
"libnoexit",
|
||||
"libc-debug",
|
||||
"libdlmalloc",
|
||||
"libcompiler_rt",
|
||||
"libc++-noexcept",
|
||||
"libc++-debug-noexcept",
|
||||
"libc++abi-debug-noexcept",
|
||||
"libsockets",
|
||||
"libdlmalloc-debug",
|
||||
])
|
File diff suppressed because it is too large
Load Diff
@@ -1,6 +0,0 @@
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
std::cout << "hello world!" << std::endl;
|
||||
return 0;
|
||||
}
|
@@ -1,131 +0,0 @@
|
||||
FROM ubuntu:jammy AS stage_build
|
||||
|
||||
ARG EMSCRIPTEN_VERSION=tot
|
||||
ENV EMSDK /emsdk
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
RUN echo "## Start building" \
|
||||
&& echo "## Update and install packages" \
|
||||
&& apt-get -qq -y update \
|
||||
&& apt-get -qq install -y --no-install-recommends \
|
||||
binutils \
|
||||
build-essential \
|
||||
ca-certificates \
|
||||
file \
|
||||
git \
|
||||
python3 \
|
||||
python3-pip \
|
||||
&& echo "## Done"
|
||||
|
||||
# Copy the contents of this repository to the container
|
||||
COPY . ${EMSDK}
|
||||
|
||||
RUN echo "## Install Emscripten" \
|
||||
&& cd ${EMSDK} \
|
||||
&& ./emsdk install ${EMSCRIPTEN_VERSION} \
|
||||
&& echo "## Done"
|
||||
|
||||
# This generates configuration that contains all valid paths according to installed SDK
|
||||
# TODO(sbc): We should be able to use just emcc -v here but it doesn't
|
||||
# currently create the sanity file.
|
||||
RUN cd ${EMSDK} \
|
||||
&& echo "## Generate standard configuration" \
|
||||
&& ./emsdk activate ${EMSCRIPTEN_VERSION} \
|
||||
&& chmod 777 ${EMSDK}/upstream/emscripten \
|
||||
&& chmod -R 777 ${EMSDK}/upstream/emscripten/cache \
|
||||
&& echo "int main() { return 0; }" > hello.c \
|
||||
&& ${EMSDK}/upstream/emscripten/emcc -c hello.c \
|
||||
&& cat ${EMSDK}/upstream/emscripten/cache/sanity.txt \
|
||||
&& echo "## Done"
|
||||
|
||||
# Cleanup Emscripten installation and strip some symbols
|
||||
RUN echo "## Aggressive optimization: Remove debug symbols" \
|
||||
&& cd ${EMSDK} && . ./emsdk_env.sh \
|
||||
# Remove debugging symbols from embedded node (extra 7MB)
|
||||
&& strip -s `which node` \
|
||||
# Tests consume ~80MB disc space
|
||||
&& rm -fr ${EMSDK}/upstream/emscripten/tests \
|
||||
# strip out symbols from clang (~extra 50MB disc space)
|
||||
&& find ${EMSDK}/upstream/bin -type f -exec strip -s {} + || true \
|
||||
&& echo "## Done"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# -------------------------------- STAGE DEPLOY --------------------------------
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
FROM ubuntu:jammy AS stage_deploy
|
||||
|
||||
COPY --from=stage_build /emsdk /emsdk
|
||||
|
||||
# These fallback environment variables are intended for situations where the
|
||||
# entrypoint is not utilized (as in a derived image) or overridden (e.g. when
|
||||
# using `--entrypoint /bin/bash` in CLI).
|
||||
# This corresponds to the env variables set during: `source ./emsdk_env.sh`
|
||||
ENV EMSDK=/emsdk \
|
||||
PATH="/emsdk:/emsdk/upstream/emscripten:/emsdk/node/22.16.0_64bit/bin:${PATH}"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Create a 'standard` 1000:1000 user
|
||||
# Thanks to that this image can be executed as non-root user and created files
|
||||
# will not require root access level on host machine Please note that this
|
||||
# solution even if widely spread (i.e. Node.js uses it) is far from perfect as
|
||||
# user 1000:1000 might not exist on host machine, and in this case running any
|
||||
# docker image will cause other random problems (mostly due `$HOME` pointing to
|
||||
# `/`)
|
||||
RUN echo "## Create emscripten user (1000:1000)" \
|
||||
&& groupadd --gid 1000 emscripten \
|
||||
&& useradd --uid 1000 --gid emscripten --shell /bin/bash --create-home emscripten \
|
||||
&& echo "## Done"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
RUN echo "## Update and install packages" \
|
||||
&& apt-get -qq -y update \
|
||||
# Somewhere in here apt sets up tzdata which asks for your time zone and blocks
|
||||
# waiting for the answer which you can't give as docker build doesn't read from
|
||||
# the terminal. The env vars set here avoid the interactive prompt and set the TZ.
|
||||
&& DEBIAN_FRONTEND="noninteractive" TZ="America/San_Francisco" apt-get -qq install -y --no-install-recommends \
|
||||
sudo \
|
||||
libxml2 \
|
||||
ca-certificates \
|
||||
python3 \
|
||||
python3-pip \
|
||||
wget \
|
||||
curl \
|
||||
zip \
|
||||
unzip \
|
||||
git \
|
||||
git-lfs \
|
||||
ssh-client \
|
||||
build-essential \
|
||||
make \
|
||||
ant \
|
||||
libidn12 \
|
||||
cmake \
|
||||
openjdk-11-jre-headless \
|
||||
# Standard Cleanup on Debian images
|
||||
&& apt-get -y clean \
|
||||
&& apt-get -y autoclean \
|
||||
&& apt-get -y autoremove \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& rm -rf /var/cache/debconf/*-old \
|
||||
&& rm -rf /usr/share/doc/* \
|
||||
&& rm -rf /usr/share/man/?? \
|
||||
&& rm -rf /usr/share/man/??_* \
|
||||
&& echo "## Done"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Use commonly used /src as working directory
|
||||
WORKDIR /src
|
||||
|
||||
ENTRYPOINT ["/emsdk/docker/entrypoint.sh"]
|
||||
|
||||
LABEL maintainer="kontakt@trzeci.eu" \
|
||||
org.label-schema.name="emscripten" \
|
||||
org.label-schema.description="The official container with Emscripten SDK" \
|
||||
org.label-schema.url="https://emscripten.org" \
|
||||
org.label-schema.vcs-url="https://github.com/emscripten-core/emsdk" \
|
||||
org.label-schema.docker.dockerfile="/docker/Dockerfile"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
@@ -1,31 +0,0 @@
|
||||
# A Makefile to build, test, tag and publish the Emscripten SDK Docker container.
|
||||
|
||||
# Emscripten version to build: Should match the version that has been already released.
|
||||
# i.e.: 1.39.18
|
||||
version =
|
||||
alias =
|
||||
only_alias =
|
||||
|
||||
image_name ?= emscripten/emsdk
|
||||
|
||||
.TEST:
|
||||
ifndef version
|
||||
$(error argument 'version' is not set. Please call `make version=SOME_VERSION ...`)
|
||||
endif
|
||||
|
||||
build: Dockerfile .TEST
|
||||
cd .. && docker build --progress=plain --network host --build-arg=EMSCRIPTEN_VERSION=${version} -t ${image_name}:${version} -f docker/$< .
|
||||
|
||||
test: test_dockerimage.sh .TEST
|
||||
# test as non-root
|
||||
# test fallback env variables by overriding the entrypoint
|
||||
docker run --rm -u `id -u`:`id -g` -w /emsdk/docker --net=host --entrypoint /bin/bash ${image_name}:${version} $<
|
||||
|
||||
push: .TEST
|
||||
ifndef only_alias
|
||||
docker push ${image_name}:${version}
|
||||
endif
|
||||
ifdef alias
|
||||
docker tag ${image_name}:${version} ${image_name}:${alias}
|
||||
docker push ${image_name}:${alias}
|
||||
endif
|
@@ -1,125 +0,0 @@
|
||||
# Dockerfile for EMSDK
|
||||
|
||||
This Dockerfile builds a self-contained version of Emscripten SDK that enables Emscripten to be used without any
|
||||
other installation on the host system.
|
||||
|
||||
It is published at https://hub.docker.com/r/emscripten/emsdk.
|
||||
|
||||
### Usage
|
||||
|
||||
Simple usage of this container to compile a hello-world
|
||||
```bash
|
||||
# create helloworld.cpp
|
||||
cat << EOF > helloworld.cpp
|
||||
#include <iostream>
|
||||
int main() {
|
||||
std::cout << "Hello World!" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
```
|
||||
|
||||
```bash
|
||||
# compile with docker image
|
||||
docker run \
|
||||
--rm \
|
||||
-v "$(pwd):$(pwd)" \
|
||||
-u $(id -u):$(id -g) \
|
||||
emscripten/emsdk \
|
||||
emcc helloworld.cpp -o helloworld.js
|
||||
|
||||
# execute on host machine
|
||||
node helloworld.js
|
||||
```
|
||||
|
||||
Teardown of compilation command:
|
||||
|
||||
|part|description|
|
||||
|---|---|
|
||||
|`docker run`| A standard command to run a command in a container|
|
||||
|`--rm`|remove a container after execution (optimization)|
|
||||
|`-v "$(pwd):$(pwd)"`|Mounting current folder from the host system into mirrored path on the container<br>TIP: This helps to investigate possible problem as we preserve exactly the same paths like in host. In such case modern editors (like Sublime, Atom, VS Code) let us to CTRL+Click on a problematic file |
|
||||
|`-u $(id -u):$(id -g)`| Run the container as a non-root user with the same UID and GID as local user. Hence all files produced by this are accessible to non-root users|
|
||||
|`emscripten/emsdk`|Get the latest tag of this container|
|
||||
|`emcc helloworld.cpp -o helloworld.js`|Execute `emcc` command with following arguments inside container, effectively compile our source code|
|
||||
|
||||
|
||||
|
||||
### Building Dockerfile
|
||||
|
||||
This image has following optional arguments
|
||||
|
||||
| arg | default value | description |
|
||||
| --- | --- | --- |
|
||||
| `EMSCRIPTEN_VERSION` | `tot`<br/>(special case, tip-of-tree) | One of released version of Emscripten. For example `2.0.0`<br/> Minimal supported version is **1.39.0** |
|
||||
|
||||
**Building**
|
||||
|
||||
This step will build Dockerfile as given tag on local machine
|
||||
```bash
|
||||
# using docker
|
||||
docker build \
|
||||
--network host \
|
||||
--build-arg=EMSCRIPTEN_VERSION=1.39.17 \
|
||||
-t emscripten/emsdk:1.39.17 \
|
||||
-f docker/Dockerfile \
|
||||
.
|
||||
```
|
||||
```bash
|
||||
# using predefined make target
|
||||
make version=1.39.17 build test
|
||||
```
|
||||
|
||||
**Tagging**
|
||||
|
||||
In case of using `docker build` command directly, given `--tag` should match version of released Emscripten (you can see list of non-legacy versions by executing `emsdk list`).
|
||||
|
||||
**Pushing**
|
||||
|
||||
This step will take local image and push to default docker registry. You need to make sure that you logged in docker cli (`docker login`) and you have rights to push to that registry.
|
||||
|
||||
```bash
|
||||
# using docker
|
||||
docker push emscripten/emsdk:1.39.17
|
||||
```
|
||||
```bash
|
||||
# using predefined make target
|
||||
make version=1.39.17 push
|
||||
```
|
||||
|
||||
In case of pushing the most recent version, this version should be also tagged as `latest` and pushed.
|
||||
```bash
|
||||
# using docker cli
|
||||
docker tag emscripten/emsdk:1.39.17 emscripten/emsdk:latest
|
||||
docker push emscripten/emsdk:latest
|
||||
|
||||
```bash
|
||||
# using make
|
||||
make version=1.39.17 alias=latest push
|
||||
```
|
||||
|
||||
### Extending
|
||||
|
||||
If your project uses packages that this image doesn't provide you might want to:
|
||||
* Contribute to this repo: Maybe your dependency is either non-intrusive or could be useful for other people
|
||||
* Create custom image that bases on this image
|
||||
|
||||
1. create own Dockerfile that holds:
|
||||
```dockerfile
|
||||
# Point at any base image that you find suitable to extend.
|
||||
FROM emscripten/emsdk:1.39.17
|
||||
|
||||
# Install required tools that are useful for your project i.e. ninja-build
|
||||
RUN apt update && apt install -y ninja-build
|
||||
```
|
||||
|
||||
2. build it
|
||||
```bash
|
||||
docker build -t extended_emscripten .
|
||||
```
|
||||
|
||||
3. test
|
||||
```bash
|
||||
docker run --rm extended_emscripten ninja --version
|
||||
# 1.10.0
|
||||
```
|
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Set-up PATH and other environment variables
|
||||
EMSDK_QUIET=1 source /emsdk/emsdk_env.sh
|
||||
|
||||
exec "$@"
|
@@ -1,29 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
|
||||
if [ $EUID -eq 0 ]; then
|
||||
sudo -u nobody `which emcc` --version
|
||||
fi
|
||||
|
||||
which emsdk
|
||||
node --version
|
||||
npm --version
|
||||
python3 --version
|
||||
pip3 --version
|
||||
em++ --version
|
||||
emcc --version
|
||||
java -version
|
||||
cmake --version
|
||||
|
||||
exit_code=0
|
||||
|
||||
# test emcc compilation
|
||||
echo 'int main() { return 0; }' | emcc -o /tmp/main.js -xc -
|
||||
node /tmp/main.js || exit_code=$?
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
echo "Node exited with non-zero exit code: $exit_code"
|
||||
exit $exit_code
|
||||
fi
|
||||
|
||||
# test embuilder
|
||||
embuilder build zlib --force
|
@@ -1 +0,0 @@
|
||||
@cmd /k call emsdk_env.bat
|
@@ -1,279 +0,0 @@
|
||||
{
|
||||
"aliases": {
|
||||
"latest": "4.0.13",
|
||||
"latest-sdk": "latest",
|
||||
"latest-arm64-linux": "latest",
|
||||
"latest-64bit": "latest",
|
||||
"sdk-latest-64bit": "latest",
|
||||
"latest-upstream": "latest",
|
||||
"latest-clang-upstream": "latest",
|
||||
"latest-releases-upstream": "latest"
|
||||
},
|
||||
"releases": {
|
||||
"4.0.13": "32b8ae819674cb42b8ac2191afeb9571e33ad5e2",
|
||||
"4.0.13-asserts": "17d4746128fd81d192c1685da52332c5221799bb",
|
||||
"4.0.12": "209b886304498eff50dd835850dc5715803401ed",
|
||||
"4.0.12-asserts": "a9e9ee083503b842a14d31db764e31d65afb8910",
|
||||
"4.0.11": "7033fec38817ec01909b044ea0193ddd5057255c",
|
||||
"4.0.11-asserts": "0eacb0d6",
|
||||
"4.0.10": "8103ffedfb0c42d231c6af6859a5a1a832260b43",
|
||||
"4.0.10-asserts": "ccf48a673362f11ddb6c3656405bb6a03b344052",
|
||||
"4.0.9": "cb2a69bce627bd2247624c71fc12907cb8785d2f",
|
||||
"4.0.9-asserts": "27f1e0801c6ec5ea4d9a9e1d573eb1fead3525f1",
|
||||
"4.0.8": "56f86607aeb458086e72f23188789be2ee0e971a",
|
||||
"4.0.8-asserts": "ab275365d4057cf92d698ef99744d66cd8c7cba9",
|
||||
"4.0.7": "ef4e9cedeac3332e4738087567552063f4f250d3",
|
||||
"4.0.7-asserts": "4bef8973dc12f5f38022f323d67c16237bbd2962",
|
||||
"4.0.6": "14767574a5c37ff9526a253a65ddbe0811cb3667",
|
||||
"4.0.6-asserts": "4050eaf1fd8e1c191198ec4ba8c346c4f3da0dc8",
|
||||
"4.0.5": "d7f8ff5e2ca3539c33fae81e98f7c56ef9fa1239",
|
||||
"4.0.5-asserts": "71269375282224b2e662bbe009e2e3ebc40db67f",
|
||||
"4.0.4": "ea71afcf5a172125179a07ff1731de6e81c92222",
|
||||
"4.0.4-asserts": "5121692126f7c96d86a13dc8462e758813e30123",
|
||||
"4.0.3": "de2109f0e5e7278d470da11de526aed16c527722",
|
||||
"4.0.3-asserts": "bae6703fb819bd84fb4dfb5e87b41cf93b6d3f2b",
|
||||
"4.0.2": "cc8eba40de8235f9c33d92463018f87b3edaa09e",
|
||||
"4.0.2-asserts": "dc575ac9a214463b2b3503c11a1a31db665b4414",
|
||||
"4.0.1": "5ff495a591978fdf8a16f2d172be3616f3150d1e",
|
||||
"4.0.1-asserts": "c2e46b78d3dde701187d685f8c175f17425bee68",
|
||||
"4.0.0": "3ebc04a3dab24522a5bf8ced3ce3caea816558f6",
|
||||
"4.0.0-asserts": "912ac2d711bb343205f314564ed287d883a7d888",
|
||||
"3.1.74": "c2655005234810c7c42e02a18e4696554abe0352",
|
||||
"3.1.74-asserts": "88e95307accc1f4b247b86b7a0c0e6beaf07f844",
|
||||
"3.1.73": "b363a836e75a245c548b7a6a021822d8c9e4c6df",
|
||||
"3.1.73-asserts": "86f3e54628089634c6b73039955388296e920291",
|
||||
"3.1.72": "7a360458327cd24c2a7aab428bdbcb5bca8810e4",
|
||||
"3.1.72-asserts": "92d39398c0016e73821548a4cd9df3df1358f6d9",
|
||||
"3.1.71": "7ee0f9488f152e9e9cf0d4d243970e03742f1a5c",
|
||||
"3.1.71-asserts": "15b142643065fe241138c6785cb8e384504f76e8",
|
||||
"3.1.70": "6fa6145af41e835f3d13edf7d308c08e4573357a",
|
||||
"3.1.70-asserts": "11444ec05e2cc64ef42c4f33c6e3a2a7534694f2",
|
||||
"3.1.69": "8fe01288bc35668c13316324336ea00195dfb814",
|
||||
"3.1.69-asserts": "cf6f9d1b4026ec7aec33aceb68077c704b52b068",
|
||||
"3.1.68": "b52d8c9150dc7d4c8e4a7a08c7a9b4006c9abe49",
|
||||
"3.1.68-asserts": "1565c9e5a4547215a1b63013607bf7a1cbb3d9d3",
|
||||
"3.1.67": "4ae62984ea36ef0e5bfcbd0ed9b62f04bee6426a",
|
||||
"3.1.67-asserts": "7cfc00962efe07f2e2ff3383f59519dc5bea4f82",
|
||||
"3.1.66": "243eae09cf5c20c4fde51a620b92f483255c8214",
|
||||
"3.1.66-asserts": "c5d25114210455d19cb9232171824292005a5080",
|
||||
"3.1.65": "fdcf56c75a1d27fdff6525a7e03423595485ca19",
|
||||
"3.1.65-asserts": "3231fb47481b2248c31002cdd7324a9155135ce0",
|
||||
"3.1.64": "fd61bacaf40131f74987e649a135f1dd559aff60",
|
||||
"3.1.64-asserts": "42c1d51ceb8e41e70ce1d8dc1bc534c0f609c196",
|
||||
"3.1.63": "aeb36a44b29e8ca9f4c7efbb4735b69003ac2bb9",
|
||||
"3.1.63-asserts": "b0275806047b42f2f88998c5c8159aec90e195ab",
|
||||
"3.1.62": "d52176ac8e07c47c1773bb2776ebd91e3886c3af",
|
||||
"3.1.62-asserts": "9d9e7deac8b91fbdd8804045595e807f9d774a53",
|
||||
"3.1.61": "28e4a74b579b4157bda5fc34f23c7d3905a8bd6c",
|
||||
"3.1.61-asserts": "7fc912687ba2077b3aeae472b51c238b3d201c46",
|
||||
"3.1.60": "87709b5747de5b1993fe314285528bf4b65c23e1",
|
||||
"3.1.60-asserts": "e2388e8a528890b8f3ff7b9ab4f52dbe2aeb38b9",
|
||||
"3.1.59": "e20ee09a8a740544c4bc6de5d4ba5f81f74b74d6",
|
||||
"3.1.59-asserts": "10ae1e83ccce9f4a363bb2e3090ba8fc32d25851",
|
||||
"3.1.58": "a4d4afb626c5010f6ccda4638b8d77579a63782e",
|
||||
"3.1.58-asserts": "5bc1c7108d4d91db316b24a75593a37c1117c266",
|
||||
"3.1.57": "523b29e1b99a61069a2fa9f9d3cc9be1c4c53d4d",
|
||||
"3.1.57-asserts": "10b736eeeac0dae3fd5bc29c6b3e32f7f7adf941",
|
||||
"3.1.56": "9d106be887796484c4aaffc9dc45f48a8810f336",
|
||||
"3.1.56-asserts": "2b9c4b912b611dc51f9019e11371e3cdd36fa64e",
|
||||
"3.1.55": "f5557e3b7166d05bddb5977e363ec48cd06e9d32",
|
||||
"3.1.55-asserts": "eb23cc30563325fd6dc97fcf85ddf26489ab9110",
|
||||
"3.1.54": "aa1588cd28c250a60457b5ed342557c762f416e3",
|
||||
"3.1.54-asserts": "d525f56cb765ed6884a0c443dbb906b63b148915",
|
||||
"3.1.53": "e5523d57a0e0dcf80f3b101bbc23613fcc3101aa",
|
||||
"3.1.53-asserts": "152cef4e00fc17776576bcc57f53badd21b92509",
|
||||
"3.1.52": "ce2097fb81953331e65543c20b437475f218127c",
|
||||
"3.1.52-asserts": "49e9a37dd6d1d65aa92472d8908cb8b88092dfaf",
|
||||
"3.1.51": "4f416d92fbff66ce79901cfc8263768f1b25dd3e",
|
||||
"3.1.51-asserts": "9035c99beb760aa0ea381bdf11abf440d88bb451",
|
||||
"3.1.50": "2ce4170cef5ce46f337f9fd907b614a8db772c7d",
|
||||
"3.1.50-asserts": "0a6fe6ef5880bf5b035d396f3875fda9b7c4bb60",
|
||||
"3.1.49": "bd0a2e230466dadb36efc71aa7271f17c6c35420",
|
||||
"3.1.49-asserts": "4ea035c5bbd6168dae34c970b5f56d7aa4dcf952",
|
||||
"3.1.48": "694434b6d47c5f6eff2c8fbd9eeb016c977ae9dc",
|
||||
"3.1.48-asserts": "6e2b8a97c6db82089c3a405bc88ea9fb125deb16",
|
||||
"3.1.47": "39ade279e75e6d17dd6b7eb9fba2006e61fe966b",
|
||||
"3.1.47-asserts": "dc49d84ed226a5a30a5117cefc07c781f6c0d16e",
|
||||
"3.1.46": "21644188d5c473e92f1d7df2f9f60c758a78a486",
|
||||
"3.1.46-asserts": "3e09b252d0d5a8e045d2ca92c606bfb9874bddf8",
|
||||
"3.1.45": "2b7c5fb8ffeac3315deb1f82ab7bf8da544f84a1",
|
||||
"3.1.45-asserts": "2aec03dfd8ce68c95316116dafbe30e273f32a81",
|
||||
"3.1.44": "b90507fcf011da61bacfca613569d882f7749552",
|
||||
"3.1.44-asserts": "06d00b0c62e435b743aa37c67b4ab76bc8568c79",
|
||||
"3.1.43": "bf3c159888633d232c0507f4c76cc156a43c32dc",
|
||||
"3.1.43-asserts": "3ec53a819a5958665d6bb0ac895c99546921b6ef",
|
||||
"3.1.42": "9d73bf4bd5b5c9ce6e51be0ed5ce6599fcb28e9e",
|
||||
"3.1.42-asserts": "7a622e0b66ee095aea9766375a2774b68c8bd8ef",
|
||||
"3.1.41": "eb71265ef0ab905620015adbfedacf88c5dbf021",
|
||||
"3.1.41-asserts": "064607aeccaffd93175bb40c072271c0393d71a5",
|
||||
"3.1.40": "c3122846bb040798aab975f61008c37eb19476de",
|
||||
"3.1.40-asserts": "5b5daaaabaf7292736454e4f8a73fa79bd455af4",
|
||||
"3.1.39": "1b56b171b627af0841cf8d4d8c0160c6cb6d855f",
|
||||
"3.1.39-asserts": "5e237cc9d9f6020af9ba908692361aa71744af1d",
|
||||
"3.1.38": "03ecb526947f6a3702a0d083083799fe410d3893",
|
||||
"3.1.38-asserts": "f771c7a0b55bc5d89ecceedfe9521c2c04aa43ae",
|
||||
"3.1.37": "7c905cfc1ca6699f6ccb288ae174902cfbdcf0a2",
|
||||
"3.1.37-asserts": "323607efbcdf84886dab55a18d758fe4c7d71d1e",
|
||||
"3.1.36": "adedc0750c4a89b65bee866edab24298cb8d6677",
|
||||
"3.1.36-asserts": "fdd2824226a8b001df5697146b88be98920fc215",
|
||||
"3.1.35": "671550b5bdceee7bdb21493714f9a815aa5149a9",
|
||||
"3.1.35-asserts": "42481a713ae805eda34f6e3e7170384c426b1d73",
|
||||
"3.1.34": "2fdd6b9e5b67d5b62f84d0501a876513ff118ef1",
|
||||
"3.1.34-asserts": "385382932c18a1312fff88000c4f83c2b9d1bb44",
|
||||
"3.1.33": "49b960bd03b3a9da478a08541ce6eafe792a58a8",
|
||||
"3.1.33-asserts": "e3ca2c6756b75cf6c6daa40276de0f25218e04a7",
|
||||
"3.1.32": "29ad1037cd6b99e5d8a1bd75bc188c1e9a6fda8d",
|
||||
"3.1.32-asserts": "2811c849256ec5b62b4ec32fb8369e5f3c9a54b1",
|
||||
"3.1.31": "1eec24930cb2f56f6d9cd10ffcb031e27ea4157a",
|
||||
"3.1.31-asserts": "48488847a38bb9cfb36e7397bea21ab2bb062680",
|
||||
"3.1.30": "dc1fdcfd3f5b9d29cb1ebdf15e6e845bef9b0cc1",
|
||||
"3.1.30-asserts": "21cca44e843267533c3d0b258b46c37bd142a2d7",
|
||||
"3.1.29": "d949f1b99a477d4b0b54d95413df3688afa69d0a",
|
||||
"3.1.29-asserts": "9d1e32e66e4b5921efc1a45cdc68e8c522c42c32",
|
||||
"3.1.28": "30b9e46ddcea66e91530559379089002d8b692cf",
|
||||
"3.1.28-asserts": "19871a9ea4914d63749b8d4d170e27a8854cb565",
|
||||
"3.1.27": "48ce0b44015d0182fc8c27aa9fbc0a4474b55982",
|
||||
"3.1.27-asserts": "630810e5a312f57d17efbe384ed7e4299f796bc1",
|
||||
"3.1.26": "4f68bb2a505c727bcf58195cf4da20592a6e92c8",
|
||||
"3.1.26-asserts": "4e2ffe94b04dbadfbca1687ab458d306b3414d13",
|
||||
"3.1.25": "ff6babb041d0f31575cc16d15ef82c6222ca99b8",
|
||||
"3.1.25-asserts": "6b19d6a8c30d7b83ba2193625fc12cce9ae0206b",
|
||||
"3.1.24": "54217a0950bb1dafe8808cc6207d378e323f9d74",
|
||||
"3.1.24-asserts": "4c20c7393ca208c740c16a97dbf305ba52fea2bb",
|
||||
"3.1.23": "bfd5e63a44ba4c8568cd8ac87c27b35e40732bf4",
|
||||
"3.1.23-asserts": "77d2c744fe37fe0e22a51329fa23bab4b8ffa656",
|
||||
"3.1.22": "990cee04a21caafc75955d736fb45791a7f2aeee",
|
||||
"3.1.22-asserts": "d94fe69a037e93562d0bbe9d0372ce23f4ab1089",
|
||||
"3.1.21": "a16a8bca2466eb144f7c93fa899c0272c8815dc3",
|
||||
"3.1.21-asserts": "c7a387161b029621eb4d3dd57363b1393b4c50b2",
|
||||
"3.1.20": "d92c8639f406582d70a5dde27855f74ecf602f45",
|
||||
"3.1.20-asserts": "db0fd1cb7316675317d527b6ed4f4cc7005df9ec",
|
||||
"3.1.19": "4c3772879a04140298c3abde90962d5567b5e2fc",
|
||||
"3.1.19-asserts": "83c2ba526ec47139d29e1417ac23d15b37ead98a",
|
||||
"3.1.18": "49d45744895c7d7e28acd94a385d7ee361653b4a",
|
||||
"3.1.18-asserts": "cb7fa1dce4b04e35b78ec43499a7759f24c1e64d",
|
||||
"3.1.17": "d27fef2070c86a218965da8b8b5df8b4425aa3bb",
|
||||
"3.1.17-asserts": "19aab28a81be09863e86aba8ee4e20feaee31f6b",
|
||||
"3.1.16": "fb1baf00423818052359cf9126e94bc71c39feb5",
|
||||
"3.1.16-asserts": "61848bee5b330db5ad5f827352d453b5557757fa",
|
||||
"3.1.15": "568a46a9fb7e1f1686a6f7216b3dc976f28d2a79",
|
||||
"3.1.15-asserts": "a8a770a0a23d2279270bd28004c8c60b02d91fbb",
|
||||
"3.1.14": "ade9d780ff17c88d81aa13860361743e3c1e1396",
|
||||
"3.1.14-asserts": "b55548282b553fc0b922b82d97b80f256bf01d20",
|
||||
"3.1.13": "bc44364b561cfde15c243a54e3b96ea12d7ea284",
|
||||
"3.1.13-asserts": "6b8f75967b5d37fa898d217b560d571694eb5b13",
|
||||
"3.1.12": "a8c3b314d61e2bb98581d522f858132b2fc21488",
|
||||
"3.1.12-asserts": "0ec1936aa3cb809d96abfebcc5356cd0cb15f6b8",
|
||||
"3.1.11": "8c3a799341c01148692c52fda73bbba5e89c5727",
|
||||
"3.1.11-asserts": "4d27b98351e021e9b7d2681a84cbab5a0ddc7a88",
|
||||
"3.1.10": "8bd05c7221b4ce34d4bedec40b672d94e681a765",
|
||||
"3.1.10-asserts": "d9b20effb2d660936fb5be525744e941fd900bc6",
|
||||
"3.1.9": "edabe25af34554d19c046078f853999b074259ca",
|
||||
"3.1.9-asserts": "c751721b1dfa47c03ede0f0da89be453c79b34ef",
|
||||
"3.1.8": "8c9e0a76ebed2c5e88a718d43e8b62452def3771",
|
||||
"3.1.8-asserts": "d33ae3c8d16f04b004b76c1d7c1989d637aa36e0",
|
||||
"3.1.7": "d0e637fe48197587d981f79e8114757731d0c2a9",
|
||||
"3.1.7-asserts": "88f0cab4e7db846e171cbbbbf20cc1a51b8c779f",
|
||||
"3.1.6": "8791c3e936141cbc2dd72d76290ea9b2726d39f3",
|
||||
"3.1.6-asserts": "84fa976d87a29ea1734601b042f3c6809ecb89f0",
|
||||
"3.1.5": "2dee36c7163f7394ab9341854ef5281501dd97d0",
|
||||
"3.1.5-asserts": "e9b96739e70faf11bbb2f63addcef59f2b2c7b48",
|
||||
"3.1.4": "39e60dda6945cfcd6487725bdb1361ae7975173f",
|
||||
"3.1.4-asserts": "05edbd634e300fc79ce0f635251bd5bef375328b",
|
||||
"3.1.3": "2ddc66235392b37e5b33477fd86cbe01a14b8aa2",
|
||||
"3.1.3-asserts": "66aaf7da980346898a84e3e1b70477286e225eec",
|
||||
"3.1.2": "6626e25d6d866cf283147ca68d54ac9326fe399f",
|
||||
"3.1.2-asserts": "b5cb3731eeaf127ae73d5e24b56cf5f0cdbf16a6",
|
||||
"3.1.1": "5ee64de9809592480da01372880ea11debd6c740",
|
||||
"3.1.1-asserts": "9455ce6306d97c0b3854e88e1e2f66d4b8565daf",
|
||||
"3.1.0": "562e3a0af169e6dea5e6dbecac2255d67c2c8b94",
|
||||
"3.1.0-asserts": "1de2db691103282dad6b2037018db6ece54f57c6",
|
||||
"3.0.1": "91b7a67a486d2430e73423a38d950d8a550826ed",
|
||||
"3.0.1-asserts": "2a84a08e92ce8748015dfc3eee40ee35a853fed0",
|
||||
"3.0.0": "7fbe748230f2ce99abbf975d9ad997699efb3153",
|
||||
"3.0.0-asserts": "f1d65c26f502220e278d31e7621e99b673e28093",
|
||||
"2.0.34": "d8fc1b92dbc0ce8d740a7adb937c5137ba4755e0",
|
||||
"2.0.33": "cef8850d57278271766fb2163eebcb07354018e7",
|
||||
"2.0.32": "74646397e3c5010824ad60d1de86c6bcbe334dff",
|
||||
"2.0.31": "597724ca3f6cd6e84bea73f1f519a3953b5c273d",
|
||||
"2.0.31-asserts": "c1065389ccf4a81e3c1af080316afd444788bc46",
|
||||
"2.0.30": "c69458f1bbf3ef5b8da4e934de210659cc9bca04",
|
||||
"2.0.30-asserts": "e13a2d74c5fa5f175ae7cffd4197fe7f78bea304",
|
||||
"2.0.29": "c2369dc425725fff86ba90a9007a4603ddf7941b",
|
||||
"2.0.29-lto": "439b7bd7da11e99065c84a60766e427b03be4206",
|
||||
"2.0.28": "866055ea639d64dfedc625d28ec981e47ce37168",
|
||||
"2.0.28-lto": "ac6ac36f7a02cec857bc1e543e55c686c5bd1256",
|
||||
"2.0.27": "1ac46e3b84955231ab4a4f4cbe0c7ac28c86b8cc",
|
||||
"2.0.27-lto": "79509f70be89d66b8441383de94b3e5a91dedc68",
|
||||
"2.0.26": "823d37b15d1ab61bc9ac0665ceef6951d3703842",
|
||||
"2.0.26-lto": "b92ba43f3ac92ab6f1ce6136a8c5969b68ba6968",
|
||||
"2.0.25": "f6f001b08fbb67935379cf13d17fd9bfdbaff791",
|
||||
"2.0.24": "6ab7fc5622a67e6111d07c4ba61c8d3c8fc33ed2",
|
||||
"2.0.23": "77b065ace39e6ab21446e13f92897f956c80476a",
|
||||
"2.0.23-lto": "3f6dbb899f61fab52e4574beb4f7c8382658aa20",
|
||||
"2.0.22": "6465a9acb820207acf7da44661a7de52d0a1ae3c",
|
||||
"2.0.21": "72f4ec97fbc7ec16c15ae68a75b0a257b2835160",
|
||||
"2.0.20": "e0c15cd14170f407a9eb27fcbad22931dc67feb7",
|
||||
"2.0.20-lto": "d1b26cd17e51c5c705eea69b9545975e3705c058",
|
||||
"2.0.19": "9b9ff2dabfb4a7fbacbc004c0bead12a60f9d05c",
|
||||
"2.0.19-lto": "4487f6c5107e7882ae2bad6d26c34ffdceb713f0",
|
||||
"2.0.18": "c2ac7520fad29a7937ed60ab6a95b08eb374c7ba",
|
||||
"2.0.17": "f5c45e60392b82f603e3a8039c62db294fab02d2",
|
||||
"2.0.16": "80d9674f2fafa6b9346d735c42d5c52b8cc8aa8e",
|
||||
"2.0.15": "89202930a98fe7f9ed59b574469a9471b0bda7dd",
|
||||
"2.0.14": "fc5562126762ab26c4757147a3b4c24e85a7289e",
|
||||
"2.0.13": "ce0e4a4d1cab395ee5082a60ebb4f3891a94b256",
|
||||
"2.0.12": "dcf819a7821f8db0c8f15ac336fea8960ec204f5",
|
||||
"2.0.11": "4764c5c323a474f7ba28ae991b0c9024fccca43c",
|
||||
"2.0.10": "37fc7647c754ac9a28ad588c143b82286de0ef71",
|
||||
"2.0.9": "d8e430f9a9b6e87502f826c39e7684852f59624f",
|
||||
"2.0.8": "e4ed6c79f4db8b175d9bbe55869b697aba9bcf2a",
|
||||
"2.0.7": "d7a29d82b320e471203b69d43aaf03b560eedc54",
|
||||
"2.0.6": "4ba921c8c8fe2e8cae071ca9889d5c27f5debd87",
|
||||
"2.0.5": "461f0f118d8d8e6cfd84e077f3eb010c17a39032",
|
||||
"2.0.4": "eefeb3e623af023844ac477d70d1fd8a668f5110",
|
||||
"2.0.3": "7a7f38ca19da152d4cd6da4776921a0f1e3f3e3f",
|
||||
"2.0.2": "ede25d889a0abe63360d4c5d420087c8753b8bbe",
|
||||
"2.0.1": "13e29bd55185e3c12802bc090b4507901856b2ba",
|
||||
"2.0.0": "5974288502aab433d45f53511e961aaca4079d86",
|
||||
"1.40.1": "536568644fd67d53778f6111fdd5f64ad3f4c539",
|
||||
"1.40.0": "edf24e7233e0def312a08cc8dcec63a461155da1",
|
||||
"1.39.20": "e7e39da9c81faecd9ecf44065cee864d76e4e34d",
|
||||
"1.39.19": "665121d026cafc46c29b30d6d4c45ed73eedbb7e",
|
||||
"1.39.18": "1914a1543f08cd8e41f44c2bb05f7a90d1920275",
|
||||
"1.39.17": "9bc968c0e49b1c795ecddb87391b265911e2adcb",
|
||||
"1.39.16": "ae5001fac3849895a873e422a2a80afc90f3b798",
|
||||
"1.39.15": "3880c744c068986d4ee781a61f7b2e820043e11f",
|
||||
"1.39.14": "574ad04affb82cc36a32dd89b2a87bea4fb30eba",
|
||||
"1.39.13": "7b3cd38017f7c582cfa3ac24a9f12aa6a8dca51f",
|
||||
"1.39.12": "e13b86d4dbd9a986525ef27d4ad8157949b9bc3a",
|
||||
"1.39.11": "6584e2d88570ee55914db92a3bad84f99e5bdd82",
|
||||
"1.39.10": "65d33d604d3fa0ebe03548378b898fc6608e9cb8",
|
||||
"1.39.9": "122396dfad60e1b2a83ccefa74a1425a2e05b5cb",
|
||||
"1.39.8": "9e60f34accb4627d7358223862a7e74291886ab6",
|
||||
"1.39.7": "9a89fff28cc6f75e17976fce1904b280e4beb25d",
|
||||
"1.39.6": "967836071d96d9b7894e492382f5fcb96423fc07",
|
||||
"1.39.5": "b3ddcab6efd749d3ed937fb452ace4e39a825842",
|
||||
"1.39.4": "8bb7b0bbbca74cc58741416cc955011f22ff5ccb",
|
||||
"1.39.3": "b024b71038d1291ed7ec23ecd553bf2c0c8d6da6",
|
||||
"1.39.2": "c630da9163a64e08de3dd948be0a0f7a175d285b",
|
||||
"1.39.1": "40f3caabcef7b52bdde63d3883462414d7a25bec",
|
||||
"1.39.0": "d57bfdd6d43181501bbd3fab502d57c9073ceb49",
|
||||
"1.38.48": "1290d9deb93d67c4649999a8f2c8d9167d38dc04",
|
||||
"1.38.47": "bc367c257409d676e71c5511383228b7aabf1689",
|
||||
"1.38.46": "c89919d252f7cea00d944bdf3bd630cd3c7e7388",
|
||||
"1.38.45": "f3030d9fffcc9e1287cb6b8e72982e94ece31d71",
|
||||
"1.38.44": "e5fd171371c3dcb8806a337f2dfa9b70f598f456",
|
||||
"1.38.43": "737d4a07be76c15124adf3c6ef2c218123f7a67f",
|
||||
"1.38.42": "05f8c01394ddd0838d3cb484ba8ca97a3efc1ac9",
|
||||
"1.38.41": "5c6785a63993ae7a4d5362b32b0be9c85138fb96",
|
||||
"1.38.40": "7b4b328af02eafbc857b8ca1e3d9b12dddc56ef7",
|
||||
"1.38.39": "f42b12c45fd3f4c20de1321402fbc28f8fd21df1",
|
||||
"1.38.38": "80bff2784f8500c1305ca69ba1d9fc84df0e401c",
|
||||
"1.38.37": "0ca6c49e30bc09c3ccefc867df4196a4b4183441",
|
||||
"1.38.36": "d46be49c2aab975333423122239892bd46f52bba",
|
||||
"1.38.35": "98f49919f25e06fa557cbcb1321d4c10e60c87ca",
|
||||
"1.38.34": "048cf9424790cc525a7ea6da340820aae226f3b9",
|
||||
"1.38.33": "3b8cff670e9233a6623563add831647e8689a86b"
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user