mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-07 21:28:21 +00:00
Merge remote-tracking branch 'origin/master' into wasix
This commit is contained in:
11
.github/codecov.yml
vendored
11
.github/codecov.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
coverage:
|
|
||||||
status:
|
|
||||||
project:
|
|
||||||
default:
|
|
||||||
target: auto
|
|
||||||
threshold: 1%
|
|
||||||
patch:
|
|
||||||
default:
|
|
||||||
target: auto
|
|
||||||
threshold: 5%
|
|
||||||
base: auto
|
|
||||||
4
.github/pull_request_template.md
vendored
4
.github/pull_request_template.md
vendored
@@ -9,7 +9,3 @@ https://github.com/wasmerio/wasmer/blob/master/CONTRIBUTING.md#pull-requests
|
|||||||
Provide details regarding the change including motivation,
|
Provide details regarding the change including motivation,
|
||||||
links to related issues, and the context of the PR.
|
links to related issues, and the context of the PR.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
# Review
|
|
||||||
|
|
||||||
- [ ] Add a short description of the change to the CHANGELOG.md file
|
|
||||||
|
|||||||
15
.github/workflows/cargo-deny.yaml
vendored
15
.github/workflows/cargo-deny.yaml
vendored
@@ -1,15 +0,0 @@
|
|||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- '**'
|
|
||||||
- '!master'
|
|
||||||
|
|
||||||
name: cargo-deny
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
deny-check:
|
|
||||||
name: cargo-deny
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: EmbarkStudios/cargo-deny-action@v1
|
|
||||||
50
.github/workflows/coverage.yaml
vendored
50
.github/workflows/coverage.yaml
vendored
@@ -1,50 +0,0 @@
|
|||||||
name: Coverage
|
|
||||||
|
|
||||||
env:
|
|
||||||
RUST_BACKTRACE: 1
|
|
||||||
RUSTFLAGS: "-Ccodegen-units=1 -Clink-dead-code -Coverflow-checks=off"
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'master'
|
|
||||||
- 'staging'
|
|
||||||
- 'trying'
|
|
||||||
paths:
|
|
||||||
- 'lib/**'
|
|
||||||
tags:
|
|
||||||
# this is _not_ a regex, see: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet
|
|
||||||
- '[0-9]+.[0-9]+.[0-9]+*'
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- 'lib/**'
|
|
||||||
|
|
||||||
coverage:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Install Rust
|
|
||||||
run: rustup update stable
|
|
||||||
- name: Install LLVM (Linux)
|
|
||||||
run: |
|
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz -L -o llvm.tar.xz
|
|
||||||
mkdir -p /opt/llvm-10
|
|
||||||
tar xf llvm.tar.xz --strip-components=1 -C /opt/llvm-10
|
|
||||||
echo '/opt/llvm-10/bin' >> $GITHUB_PATH
|
|
||||||
echo 'LLVM_SYS_100_PREFIX=/opt/llvm-10' >> $GITHUB_ENV
|
|
||||||
- name: Install cargo-llvm-cov
|
|
||||||
uses: taiki-e/install-action@cargo-llvm-cov
|
|
||||||
- name: Generate code coverage
|
|
||||||
run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
|
|
||||||
env:
|
|
||||||
WAPM_DEV_TOKEN: ${{ secrets.WAPM_DEV_TOKEN }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
- name: Upload coverage to Codecov
|
|
||||||
uses: codecov/codecov-action@v3
|
|
||||||
with:
|
|
||||||
files: lcov.info
|
|
||||||
fail_ci_if_error: true
|
|
||||||
|
|
||||||
2
.github/workflows/documentation.yaml
vendored
2
.github/workflows/documentation.yaml
vendored
@@ -34,4 +34,4 @@ jobs:
|
|||||||
uses: peaceiris/actions-gh-pages@v3
|
uses: peaceiris/actions-gh-pages@v3
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
publish_dir: ./package/docs
|
publish_dir: ./package/docs
|
||||||
43
.github/workflows/lint.yaml
vendored
43
.github/workflows/lint.yaml
vendored
@@ -1,43 +0,0 @@
|
|||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- '**'
|
|
||||||
- '!master'
|
|
||||||
|
|
||||||
name: lint
|
|
||||||
|
|
||||||
env:
|
|
||||||
RUST_BACKTRACE: 1
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lint:
|
|
||||||
name: Code lint
|
|
||||||
runs-on: ubuntu-18.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Set up libstdc++ on Linux
|
|
||||||
run: |
|
|
||||||
sudo apt-get update -y
|
|
||||||
sudo apt-get install -y --allow-downgrades libstdc++6=8.4.0-1ubuntu1~18.04
|
|
||||||
sudo apt-get install --reinstall g++-8
|
|
||||||
- name: Install Rust
|
|
||||||
uses: dtolnay/rust-toolchain@stable
|
|
||||||
with:
|
|
||||||
toolchain: 1.64
|
|
||||||
components: rustfmt, clippy
|
|
||||||
- name: Install LLVM (Linux)
|
|
||||||
run: |
|
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz -L -o /opt/llvm.tar.xz
|
|
||||||
mkdir -p /opt/llvm-12
|
|
||||||
tar xf /opt/llvm.tar.xz --strip-components=1 -C /opt/llvm-12
|
|
||||||
echo '/opt/llvm-12/bin' >> $GITHUB_PATH
|
|
||||||
echo 'LLVM_SYS_120_PREFIX=/opt/llvm-12' >> $GITHUB_ENV
|
|
||||||
- run: make lint
|
|
||||||
env:
|
|
||||||
ENABLE_CRANELIFT: "1"
|
|
||||||
ENABLE_LLVM: "1"
|
|
||||||
ENABLE_SINGLEPASS: "1"
|
|
||||||
- name: Assert no files have changed
|
|
||||||
run: |
|
|
||||||
git status
|
|
||||||
! [[ $(git status -s) ]]
|
|
||||||
48
.github/workflows/test-js.yaml
vendored
48
.github/workflows/test-js.yaml
vendored
@@ -1,48 +0,0 @@
|
|||||||
name: Runtime tests - JS
|
|
||||||
|
|
||||||
env:
|
|
||||||
RUST_BACKTRACE: 1
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'master'
|
|
||||||
- 'staging'
|
|
||||||
- 'trying'
|
|
||||||
paths:
|
|
||||||
- 'lib/api/**'
|
|
||||||
- 'lib/wasi/**'
|
|
||||||
tags:
|
|
||||||
# this is _not_ a regex, see: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet
|
|
||||||
- '[0-9]+.[0-9]+.[0-9]+*'
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- 'lib/api/**'
|
|
||||||
- 'lib/wasi/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
name: Test on NodeJS
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Install Rust
|
|
||||||
uses: dtolnay/rust-toolchain@stable
|
|
||||||
with:
|
|
||||||
toolchain: 1.64
|
|
||||||
|
|
||||||
- name: Install NodeJS
|
|
||||||
uses: actions/setup-node@v2
|
|
||||||
with:
|
|
||||||
node-version: 16
|
|
||||||
|
|
||||||
- name: Install wasm-pack
|
|
||||||
run: |
|
|
||||||
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
|
||||||
|
|
||||||
- name: Compile Wasmer to WebAssembly and test with a JavaScript host
|
|
||||||
run: make test-js
|
|
||||||
303
.github/workflows/test-sys.yaml
vendored
303
.github/workflows/test-sys.yaml
vendored
@@ -1,303 +0,0 @@
|
|||||||
name: Runtime tests
|
|
||||||
|
|
||||||
env:
|
|
||||||
RUST_BACKTRACE: 1
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'master'
|
|
||||||
- 'staging'
|
|
||||||
- 'trying'
|
|
||||||
paths:
|
|
||||||
- 'lib/**'
|
|
||||||
tags:
|
|
||||||
# this is _not_ a regex, see: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet
|
|
||||||
- '[0-9]+.[0-9]+.[0-9]+*'
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- 'lib/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
setup:
|
|
||||||
name: Set up
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
VERSION: ${{ steps.setup.outputs.VERSION }}
|
|
||||||
DOING_RELEASE: ${{ steps.setup.outputs.DOING_RELEASE }}
|
|
||||||
steps:
|
|
||||||
- name: Set up env vars
|
|
||||||
id: setup
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
VERSION=${GITHUB_REF/refs\/tags\//}
|
|
||||||
echo ::set-output name=VERSION::${VERSION}
|
|
||||||
DOING_RELEASE=$(echo $VERSION | grep -c '^[0-9]\+\.[0-9]\+\.[0-9]\+\(-\([a-zA-Z]\+\)\?[0-9]*\)\?$' || true)
|
|
||||||
echo ::set-output name=DOING_RELEASE::${DOING_RELEASE}
|
|
||||||
echo $VERSION
|
|
||||||
echo $DOING_RELEASE
|
|
||||||
|
|
||||||
test:
|
|
||||||
name: Test on ${{ matrix.build }}
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
needs: setup
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- build: linux-x64
|
|
||||||
os: ubuntu-18.04
|
|
||||||
target: x86_64-unknown-linux-gnu
|
|
||||||
llvm_url: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz'
|
|
||||||
run_test: true
|
|
||||||
run_test_capi: true
|
|
||||||
run_integration_tests: true
|
|
||||||
run_build_docs: true
|
|
||||||
use_sccache: true
|
|
||||||
- build: macos-x64
|
|
||||||
os: macos-11
|
|
||||||
target: x86_64-apple-darwin
|
|
||||||
llvm_url: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-apple-darwin.tar.xz'
|
|
||||||
run_test: true
|
|
||||||
run_test_capi: true
|
|
||||||
use_sccache: true
|
|
||||||
run_integration_tests: true
|
|
||||||
run_ios_tests: true
|
|
||||||
run_build_docs: false
|
|
||||||
- build: macos-arm64
|
|
||||||
os: macos-11.0
|
|
||||||
target: aarch64-apple-darwin
|
|
||||||
use_sccache: true
|
|
||||||
run_test: false
|
|
||||||
run_test_capi: false
|
|
||||||
run_build_docs: false
|
|
||||||
- build: windows-x64
|
|
||||||
os: windows-2019
|
|
||||||
#target: x86_64-pc-windows-msvc commented because of bug in rust setup action
|
|
||||||
# llvm_url: 'https://github.com/wasmerio/llvm-custom-builds/releases/download/12.x/windows-amd64.tar.gz'
|
|
||||||
llvm_choco_version: 13.0.0
|
|
||||||
run_integration_tests: true
|
|
||||||
use_sccache: true
|
|
||||||
run_test: true
|
|
||||||
run_test_capi: false # We can't run yet the capi tests on Windows
|
|
||||||
run_build_docs: false
|
|
||||||
- build: linux-musl-x64
|
|
||||||
target: x86_64-unknown-linux-musl
|
|
||||||
os: ubuntu-latest
|
|
||||||
container: alpine:latest
|
|
||||||
run_test: true
|
|
||||||
run_test_capi: false # It can't run the capi tests because of a cc linker issue (`wasm_engine_new` is redefined)
|
|
||||||
run_integration_tests: false
|
|
||||||
run_build_docs: false
|
|
||||||
use_sccache: false
|
|
||||||
container: ${{ matrix.container }}
|
|
||||||
env:
|
|
||||||
SCCACHE_AZURE_BLOB_CONTAINER: wasmerstoragesccacheblob
|
|
||||||
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.SCCACHE_AZURE_CONNECTION_STRING }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- uses: goto-bus-stop/setup-zig@v2
|
|
||||||
with:
|
|
||||||
version: 0.10.0
|
|
||||||
- name: Set up libstdc++ on Linux
|
|
||||||
if: matrix.build == 'linux-x64'
|
|
||||||
run: |
|
|
||||||
sudo apt-get update -y
|
|
||||||
sudo apt-get install -y --allow-downgrades libstdc++6=8.4.0-1ubuntu1~18.04
|
|
||||||
sudo apt-get install --reinstall g++-8
|
|
||||||
- name: Set up base deps on musl
|
|
||||||
if: matrix.build == 'linux-musl-x64'
|
|
||||||
run: |
|
|
||||||
apk add build-base bash musl-dev curl make libtool libffi-dev gcc automake autoconf git openssl-dev g++
|
|
||||||
- name: Install Rust
|
|
||||||
uses: dtolnay/rust-toolchain@stable
|
|
||||||
with:
|
|
||||||
toolchain: 1.64
|
|
||||||
target: ${{ matrix.target }}
|
|
||||||
- uses: Swatinem/rust-cache@v1
|
|
||||||
if: matrix.use_sccache != true
|
|
||||||
- name: Install LLVM (Choco - Windows)
|
|
||||||
if: matrix.llvm_choco_version
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
choco install llvm --version ${{ matrix.llvm_choco_version }} --allow-downgrade
|
|
||||||
cd 'C:\Program Files\LLVM\'
|
|
||||||
LLVM_DIR=$(pwd)
|
|
||||||
echo "LLVM_SYS_120_PREFIX=${LLVM_DIR}" >> $GITHUB_ENV
|
|
||||||
- name: Install LLVM (macOS Apple Silicon)
|
|
||||||
if: matrix.os == 'macos-11.0' && !matrix.llvm_url
|
|
||||||
run: |
|
|
||||||
brew install llvm
|
|
||||||
- name: Install LLVM
|
|
||||||
if: matrix.llvm_url
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
curl --proto '=https' --tlsv1.2 -sSf ${{ matrix.llvm_url }} -L -o llvm.tar.xz
|
|
||||||
LLVM_DIR=$(pwd)/${{ env.LLVM_DIR }}
|
|
||||||
mkdir ${LLVM_DIR}
|
|
||||||
tar xf llvm.tar.xz --strip-components=1 -C ${LLVM_DIR}
|
|
||||||
echo "${LLVM_DIR}/bin" >> $GITHUB_PATH
|
|
||||||
echo "LLVM_SYS_120_PREFIX=${LLVM_DIR}" >> $GITHUB_ENV
|
|
||||||
env:
|
|
||||||
LLVM_DIR: .llvm
|
|
||||||
- name: Set up dependencies for Mac OS
|
|
||||||
run: |
|
|
||||||
brew install automake
|
|
||||||
# using gnu-tar is a workaround for https://github.com/actions/cache/issues/403
|
|
||||||
brew install gnu-tar
|
|
||||||
echo PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH" >> $GITHUB_ENV
|
|
||||||
if: matrix.os == 'macos-latest' || matrix.os == 'macos-11.0'
|
|
||||||
- uses: actions/cache@v2
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
~/.cargo/registry
|
|
||||||
~/.cargo/git
|
|
||||||
key: ${{ matrix.build }}-${{ matrix.target }}-cargo-${{ hashFiles('Cargo.lock') }}-v1
|
|
||||||
- uses: actions/cache@v2
|
|
||||||
if: matrix.use_sccache
|
|
||||||
with:
|
|
||||||
path: ${{ runner.tool_cache }}/cargo-sccache
|
|
||||||
key: ${{ matrix.build }}-${{ matrix.target }}-sccache-bin-${{ env.CARGO_SCCACHE_VERSION }}-v1
|
|
||||||
- name: Install sccache
|
|
||||||
if: matrix.use_sccache
|
|
||||||
run: |
|
|
||||||
if [ ! -f '${{ runner.tool_cache }}/cargo-sccache/bin/sccache' ]; then
|
|
||||||
cargo install sccache --no-default-features --features=dist-client,azure --root '${{ runner.tool_cache }}/cargo-sccache'
|
|
||||||
fi
|
|
||||||
shell: bash
|
|
||||||
- name: Setup Rust target
|
|
||||||
run: |
|
|
||||||
mkdir -p .cargo
|
|
||||||
cat << EOF > .cargo/config.toml
|
|
||||||
[build]
|
|
||||||
target = "${{ matrix.target }}"
|
|
||||||
EOF
|
|
||||||
if: matrix.target
|
|
||||||
- name: Set sccache port
|
|
||||||
if: matrix.use_sccache && matrix.random_sccache_port
|
|
||||||
run: |
|
|
||||||
netstat -aln | awk '
|
|
||||||
$6 == "LISTEN" {
|
|
||||||
if ($4 ~ "[.:][0-9]+$") {
|
|
||||||
n = split($4, a, /[:.]/);
|
|
||||||
port = a[n];
|
|
||||||
p[port] = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
END {
|
|
||||||
for (i = 3000; i < 65000 && p[i]; i++){};
|
|
||||||
if (i == 65000) {exit 1};
|
|
||||||
print "SCCACHE_SERVER_PORT=" i
|
|
||||||
}
|
|
||||||
' >> $GITHUB_ENV
|
|
||||||
# echo "SCCACHE_SERVER_PORT=9000"
|
|
||||||
echo "Setting random sccache port to: $SCCACHE_SERVER_PORT"
|
|
||||||
shell: bash
|
|
||||||
- name: Start sccache
|
|
||||||
if: matrix.use_sccache
|
|
||||||
run: |
|
|
||||||
chmod +x '${{ runner.tool_cache }}/cargo-sccache/bin/sccache'
|
|
||||||
'${{ runner.tool_cache }}/cargo-sccache/bin/sccache' --start-server
|
|
||||||
'${{ runner.tool_cache }}/cargo-sccache/bin/sccache' -s
|
|
||||||
echo 'RUSTC_WRAPPER=${{ runner.tool_cache }}/cargo-sccache/bin/sccache' >> $GITHUB_ENV
|
|
||||||
shell: bash
|
|
||||||
- name: Test integration CLI
|
|
||||||
if: matrix.run_test && matrix.os != 'windows-2019'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
make build-wasmer && make build-capi && make package-capi && make package && export WASMER_DIR=`pwd`/package && make test-integration-cli
|
|
||||||
env:
|
|
||||||
TARGET: ${{ matrix.target }}
|
|
||||||
TARGET_DIR: target/${{ matrix.target }}/release
|
|
||||||
CARGO_TARGET: --target ${{ matrix.target }}
|
|
||||||
WAPM_DEV_TOKEN: ${{ secrets.WAPM_DEV_TOKEN }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
- name: Test integration CLI
|
|
||||||
if: matrix.run_test && matrix.os == 'windows-2019'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
make build-wasmer &&
|
|
||||||
cargo test --package wasmer-integration-tests-cli --test run -- test_wasmer_run_complex_url --exact --nocapture
|
|
||||||
env:
|
|
||||||
TARGET: ${{ matrix.target }}
|
|
||||||
TARGET_DIR: target/${{ matrix.target }}/release
|
|
||||||
CARGO_TARGET: --target x86_64-pc-windows-msvc
|
|
||||||
WAPM_DEV_TOKEN: ${{ secrets.WAPM_DEV_TOKEN }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
# cargo test --package wasmer-integration-tests-cli --test run -- test_wasmer_run_complex_url --exact --nocapture
|
|
||||||
#- name: Test integration CLI
|
|
||||||
# if: matrix.run_test && matrix.os == 'windows-2019'
|
|
||||||
# shell: bash
|
|
||||||
# run: |
|
|
||||||
# make && make build-wasmer && make build-capi && make package-capi && make package
|
|
||||||
# export WASMER_DIR=`pwd`/package
|
|
||||||
# make test-integration-cli
|
|
||||||
# env:
|
|
||||||
# TARGET: x86_64-pc-windows-msvc
|
|
||||||
# TARGET_DIR: target/x86_64-pc-windows-msvc/release
|
|
||||||
# CARGO_TARGET: --target x86_64-pc-windows-msvc
|
|
||||||
- name: Test
|
|
||||||
if: matrix.run_test && matrix.os != 'windows-2019'
|
|
||||||
run: |
|
|
||||||
make
|
|
||||||
env:
|
|
||||||
TARGET: ${{ matrix.target }}
|
|
||||||
TARGET_DIR: target/${{ matrix.target }}/release
|
|
||||||
CARGO_TARGET: --target ${{ matrix.target }}
|
|
||||||
- name: Test
|
|
||||||
if: matrix.run_test && matrix.os != 'windows-2019'
|
|
||||||
run: |
|
|
||||||
make build-capi && make package-capi && export WASMER_DIR=`pwd`/package && make test
|
|
||||||
env:
|
|
||||||
TARGET: ${{ matrix.target }}
|
|
||||||
TARGET_DIR: target/${{ matrix.target }}/release
|
|
||||||
CARGO_TARGET: --target ${{ matrix.target }}
|
|
||||||
- name: Test C API
|
|
||||||
if: matrix.run_test_capi && matrix.os != 'windows-2019'
|
|
||||||
run: |
|
|
||||||
make test-capi
|
|
||||||
env:
|
|
||||||
TARGET: ${{ matrix.target }}
|
|
||||||
TARGET_DIR: target/${{ matrix.target }}/release
|
|
||||||
CARGO_TARGET: --target ${{ matrix.target }}
|
|
||||||
- name: Test
|
|
||||||
if: matrix.run_test && matrix.os == 'windows-2019'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
make build-capi && make package-capi && export WASMER_DIR=`pwd`/package && make test
|
|
||||||
- name: Test C API
|
|
||||||
if: matrix.run_test_capi && matrix.os == 'windows-2019'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
export WASMER_DIR=`pwd`/package && make test-capi
|
|
||||||
- name: Build Doc
|
|
||||||
if: matrix.run_build_docs
|
|
||||||
run: |
|
|
||||||
make package-docs
|
|
||||||
|
|
||||||
audit:
|
|
||||||
name: Audit
|
|
||||||
env:
|
|
||||||
CARGO_AUDIT_VERSION: 0.16.0
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/cache@master
|
|
||||||
with:
|
|
||||||
path: ${{ runner.tool_cache }}/cargo-audit
|
|
||||||
key: cargo-audit-bin-${{ env.CARGO_AUDIT_VERSION }}
|
|
||||||
- run: |
|
|
||||||
echo "'${{ runner.tool_cache }}/cargo-audit/bin'" >> $GITHUB_PATH
|
|
||||||
- run: |
|
|
||||||
cargo install cargo-audit --version ${{ env.CARGO_AUDIT_VERSION }} --root '${{ runner.tool_cache }}/cargo-audit'
|
|
||||||
cargo audit
|
|
||||||
|
|
||||||
test-wasm-build:
|
|
||||||
name: Test wasm build
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- run: |
|
|
||||||
rustup target add wasm32-wasi
|
|
||||||
make build-wasmer-wasm
|
|
||||||
613
.github/workflows/test.yaml
vendored
Normal file
613
.github/workflows/test.yaml
vendored
Normal file
@@ -0,0 +1,613 @@
|
|||||||
|
name: test-sys
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '**'
|
||||||
|
pull_request:
|
||||||
|
types: [ synchronize ]
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
release:
|
||||||
|
description: 'Make release'
|
||||||
|
env:
|
||||||
|
RUST_BACKTRACE: 1
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
setup:
|
||||||
|
name: Set up
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
outputs:
|
||||||
|
VERSION: ${{ steps.setup.outputs.VERSION }}
|
||||||
|
DOING_RELEASE: ${{ steps.setup.outputs.DOING_RELEASE }}
|
||||||
|
steps:
|
||||||
|
- name: Set up env vars
|
||||||
|
id: setup
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
VERSION=${GITHUB_REF/refs\/tags\//}
|
||||||
|
echo ::set-output name=VERSION::${VERSION}
|
||||||
|
DOING_RELEASE=$(echo $VERSION | grep -c '^[0-9]\+\.[0-9]\+\.[0-9]\+\(-\([a-zA-Z]\+\)\?[0-9]*\)\?$' || true)
|
||||||
|
echo ::set-output name=DOING_RELEASE::${DOING_RELEASE}
|
||||||
|
echo $VERSION
|
||||||
|
echo $DOING_RELEASE
|
||||||
|
|
||||||
|
lint:
|
||||||
|
name: Code lint
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Install Rust
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
toolchain: 1.63
|
||||||
|
components: rustfmt, clippy
|
||||||
|
- name: Install libtinfo
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo apt install -y libtinfo5
|
||||||
|
- name: Install LLVM (Linux)
|
||||||
|
run: |
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSf https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz -L -o /opt/llvm.tar.xz
|
||||||
|
mkdir -p /opt/llvm-12
|
||||||
|
tar xf /opt/llvm.tar.xz --strip-components=1 -C /opt/llvm-12
|
||||||
|
echo '/opt/llvm-12/bin' >> $GITHUB_PATH
|
||||||
|
echo 'LLVM_SYS_120_PREFIX=/opt/llvm-12' >> $GITHUB_ENV
|
||||||
|
- name: Cache
|
||||||
|
uses: whywaita/actions-cache-s3@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cargo/*
|
||||||
|
./target/*
|
||||||
|
key: r22-${{ github.repository }}-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}-wasmer-make-lint-linux-x64
|
||||||
|
aws-s3-bucket: wasmer-github-ci-cache
|
||||||
|
aws-access-key-id: ${{ secrets.GOOGLE_CACHE_ID }}
|
||||||
|
aws-secret-access-key: ${{ secrets.GOOGLE_CACHE_SECRET }}
|
||||||
|
aws-region: auto
|
||||||
|
aws-endpoint: https://storage.googleapis.com
|
||||||
|
aws-s3-bucket-endpoint: false
|
||||||
|
aws-s3-force-path-style: true
|
||||||
|
- run: make lint
|
||||||
|
env:
|
||||||
|
ENABLE_CRANELIFT: "1"
|
||||||
|
ENABLE_LLVM: "1"
|
||||||
|
ENABLE_SINGLEPASS: "1"
|
||||||
|
- name: Assert no files have changed
|
||||||
|
run: |
|
||||||
|
git status
|
||||||
|
! [[ $(git status -s) ]]
|
||||||
|
|
||||||
|
cargo_deny:
|
||||||
|
name: cargo-deny
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: EmbarkStudios/cargo-deny-action@v1
|
||||||
|
|
||||||
|
test_nodejs:
|
||||||
|
name: Test on NodeJS
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Install Rust
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
toolchain: 1.63
|
||||||
|
- name: Install NodeJS
|
||||||
|
uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: 16
|
||||||
|
- name: Install wasm-pack
|
||||||
|
run: |
|
||||||
|
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
||||||
|
- name: make test-js
|
||||||
|
run: |
|
||||||
|
make test-js
|
||||||
|
- name: make test-js-core
|
||||||
|
run: |
|
||||||
|
make test-js-core
|
||||||
|
|
||||||
|
test_wasm_build:
|
||||||
|
name: Test wasm build
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: rustup target add wasm32-wasi
|
||||||
|
run: rustup target add wasm32-wasi
|
||||||
|
- name: make build-wasmer-wasm
|
||||||
|
run: make build-wasmer-wasm
|
||||||
|
|
||||||
|
build_linux_aarch64:
|
||||||
|
name: ${{ matrix.build-what.name }} on linux-aarch64
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
build-what: [
|
||||||
|
{
|
||||||
|
key: capi,
|
||||||
|
build-cmd: 'make build-capi',
|
||||||
|
name: 'Build C-API'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: wasmer,
|
||||||
|
build-cmd: 'make build-wasmer && make package-wasmer && make tar-wasmer',
|
||||||
|
name: 'Build wasmer-cli'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
toolchain: 1.61
|
||||||
|
target: aarch64-unknown-linux-gnu
|
||||||
|
- name: Build cross image
|
||||||
|
run: |
|
||||||
|
docker build -t wasmer/aarch64 ${GITHUB_WORKSPACE}/.github/cross-linux-aarch64/
|
||||||
|
env:
|
||||||
|
CROSS_DOCKER_IN_DOCKER: true
|
||||||
|
- name: Build ${{ matrix.build-what.key }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.build-what.build-cmd }}
|
||||||
|
env:
|
||||||
|
CARGO_BINARY: docker run -v /var/run/docker.sock:/var/run/docker.sock -v ${GITHUB_WORKSPACE}:/project -w /project wasmer/aarch64 cross
|
||||||
|
CROSS_DOCKER_IN_DOCKER: true
|
||||||
|
CARGO_TARGET: --target aarch64-unknown-linux-gnu
|
||||||
|
PKG_CONFIG_PATH: /usr/lib/aarch64-linux-gnu/pkgconfig
|
||||||
|
PKG_CONFIG_ALLOW_CROSS: true
|
||||||
|
ENABLE_LLVM: 0
|
||||||
|
|
||||||
|
build:
|
||||||
|
name: ${{ matrix.build-what.name }} on ${{ matrix.metadata.build }}
|
||||||
|
runs-on: ${{ matrix.metadata.os }}
|
||||||
|
needs: setup
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
build-what: [
|
||||||
|
{
|
||||||
|
key: capi,
|
||||||
|
build-cmd: 'make build-capi && make package-capi && make tar-capi',
|
||||||
|
name: 'Build and test C-API'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: wasmer,
|
||||||
|
build-cmd: 'make build-wasmer && make package-wasmer && make tar-wasmer',
|
||||||
|
name: 'Build wasmer-cli'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
metadata: [
|
||||||
|
{
|
||||||
|
build: linux-x64,
|
||||||
|
os: ubuntu-22.04,
|
||||||
|
target: x86_64-unknown-linux-gnu,
|
||||||
|
llvm_url: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
build: linux-musl,
|
||||||
|
target: x86_64-unknown-linux-musl,
|
||||||
|
os: ubuntu-22.04,
|
||||||
|
container: 'alpine:latest'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
build: macos-x64,
|
||||||
|
os: macos-11,
|
||||||
|
target: x86_64-apple-darwin,
|
||||||
|
llvm_url: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-apple-darwin.tar.xz'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
build: macos-arm,
|
||||||
|
os: macos-11,
|
||||||
|
target: aarch64-apple-darwin,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
build: windows-x64,
|
||||||
|
os: windows-2019,
|
||||||
|
target: x86_64-pc-windows-msvc,
|
||||||
|
llvm_choco_version: 13.0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
build: windows-gnu,
|
||||||
|
target: x86_64-pc-windows-gnu,
|
||||||
|
os: ubuntu-22.04,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
container: ${{ matrix.metadata.container }}
|
||||||
|
env:
|
||||||
|
SCCACHE_AZURE_BLOB_CONTAINER: wasmerstoragesccacheblob
|
||||||
|
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.SCCACHE_AZURE_CONNECTION_STRING }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up libstdc++ on Linux
|
||||||
|
if: matrix.metadata.build == 'linux-x64'
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -y
|
||||||
|
sudo apt-get install -y --allow-downgrades libstdc++6
|
||||||
|
sudo apt-get install --reinstall g++
|
||||||
|
- name: Set up base deps on musl
|
||||||
|
if: matrix.metadata.build == 'linux-musl'
|
||||||
|
run: |
|
||||||
|
apk add build-base bash musl-dev curl tar make libtool libffi-dev gcc automake autoconf git openssl-dev g++
|
||||||
|
- name: Set up dependencies for Mac OS
|
||||||
|
run: |
|
||||||
|
brew install automake
|
||||||
|
# using gnu-tar is a workaround for https://github.com/actions/cache/issues/403
|
||||||
|
brew install gnu-tar
|
||||||
|
echo PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH" >> $GITHUB_ENV
|
||||||
|
if: matrix.metadata.os == 'macos-latest' || matrix.metadata.os == 'macos-11.0'
|
||||||
|
- name: Install Rust
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
toolchain: 1.63
|
||||||
|
target: ${{ matrix.metadata.target }}
|
||||||
|
- name: Install Windows-GNU linker
|
||||||
|
if: ${{ matrix.metadata.build == 'windows-gnu' }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo apt install -y mingw-w64
|
||||||
|
- name: Install Windows-GNU target
|
||||||
|
if: ${{ matrix.metadata.build == 'windows-gnu' }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
rustup target add x86_64-pc-windows-gnu
|
||||||
|
- name: Install Windows 10 SDK with xwin
|
||||||
|
if: ${{ matrix.metadata.build == 'windows-gnu' }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir -p /tmp/xwin
|
||||||
|
mkdir -p /tmp/xwindownload
|
||||||
|
mkdir -p /tmp/xwincache
|
||||||
|
git clone https://github.com/wasmerio/xwin --depth=1 /tmp/xwin
|
||||||
|
cargo build --release --manifest-path=/tmp/xwin/Cargo.toml
|
||||||
|
/tmp/xwin/target/release/xwin --accept-license --cache-dir /tmp/xwincache splat --output /tmp/xwindownload
|
||||||
|
mkdir -p /tmp/winsdk
|
||||||
|
cp /tmp/xwindownload/sdk/lib/10.0.20348/um/x86_64/WS2_32.lib /tmp/winsdk/
|
||||||
|
cp /tmp/xwindownload/sdk/lib/10.0.20348/um/x86_64/KERNEL32.lib /tmp/winsdk/
|
||||||
|
cp /tmp/xwindownload/sdk/lib/10.0.20348/um/x86_64/BCRYPT.lib /tmp/winsdk/
|
||||||
|
cp /tmp/xwindownload/sdk/lib/10.0.20348/um/x86_64/ADVAPI32.lib /tmp/winsdk/
|
||||||
|
cp /tmp/xwindownload/sdk/lib/10.0.20348/um/x86_64/USERENV.lib /tmp/winsdk/
|
||||||
|
echo "WinSDK files:"
|
||||||
|
ls -laH /tmp/winsdk
|
||||||
|
echo ""
|
||||||
|
mkdir -p package
|
||||||
|
mkdir -p package/winsdk
|
||||||
|
cp -r /tmp/winsdk/* package/winsdk
|
||||||
|
- name: Choco install LLVM
|
||||||
|
uses: crazy-max/ghaction-chocolatey@v2
|
||||||
|
if: matrix.metadata.llvm_choco_version
|
||||||
|
with:
|
||||||
|
args: install llvm --version ${{ matrix.metadata.llvm_choco_version }} --allow-downgrade
|
||||||
|
- name: Install LLVM (Choco - Windows)
|
||||||
|
if: matrix.metadata.llvm_choco_version
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd 'C:\Program Files\LLVM\'
|
||||||
|
LLVM_DIR=$(pwd)
|
||||||
|
echo "LLVM_SYS_120_PREFIX=${LLVM_DIR}" >> $GITHUB_ENV
|
||||||
|
- name: Install LLVM (macOS Apple Silicon)
|
||||||
|
if: matrix.metadata.os == 'macos-11.0' && !matrix.metadata.llvm_url
|
||||||
|
run: |
|
||||||
|
brew install llvm
|
||||||
|
- name: Install LLVM
|
||||||
|
if: matrix.metadata.llvm_url
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSf ${{ matrix.metadata.llvm_url }} -L -o llvm.tar.xz
|
||||||
|
LLVM_DIR=$(pwd)/${{ env.LLVM_DIR }}
|
||||||
|
mkdir ${LLVM_DIR}
|
||||||
|
tar xf llvm.tar.xz --strip-components=1 -C ${LLVM_DIR}
|
||||||
|
echo "${LLVM_DIR}/bin" >> $GITHUB_PATH
|
||||||
|
echo "LLVM_SYS_120_PREFIX=${LLVM_DIR}" >> $GITHUB_ENV
|
||||||
|
env:
|
||||||
|
LLVM_DIR: .llvm
|
||||||
|
- name: Setup Rust target
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir -p .cargo
|
||||||
|
cat << EOF > .cargo/config.toml
|
||||||
|
[build]
|
||||||
|
target = "${{ matrix.metadata.target }}"
|
||||||
|
EOF
|
||||||
|
if: matrix.metadata.target
|
||||||
|
- name: which cargo
|
||||||
|
if: ${{ matrix.build-what.key == 'capi' && matrix.metadata.build == 'windows-x64' }}
|
||||||
|
run: which cargo
|
||||||
|
- name: Set cargo env
|
||||||
|
run: echo "CARGO_ROOT_DIR=$(dirname $(dirname $( which cargo )))" >> $GITHUB_ENV
|
||||||
|
- name: List root dir
|
||||||
|
shell: bash
|
||||||
|
if: ${{ matrix.build-what.key == 'capi' && matrix.metadata.build == 'windows-x64' }}
|
||||||
|
run: ls -R $CARGO_ROOT_DIR
|
||||||
|
- name: Cache
|
||||||
|
uses: whywaita/actions-cache-s3@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cargo/*
|
||||||
|
./target/*
|
||||||
|
$CARGO_ROOT_DIR/*
|
||||||
|
key: r22-${{ github.repository }}-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}-wasmer-make-build-wasmer-${{ matrix.build-what.key }}-${{ matrix.metadata.build }}
|
||||||
|
aws-s3-bucket: wasmer-github-ci-cache
|
||||||
|
aws-access-key-id: ${{ secrets.GOOGLE_CACHE_ID }}
|
||||||
|
aws-secret-access-key: ${{ secrets.GOOGLE_CACHE_SECRET }}
|
||||||
|
aws-region: auto
|
||||||
|
aws-endpoint: https://storage.googleapis.com
|
||||||
|
aws-s3-bucket-endpoint: false
|
||||||
|
aws-s3-force-path-style: true
|
||||||
|
- name: Build C-API
|
||||||
|
shell: bash
|
||||||
|
run: ${{ matrix.build-what.build-cmd }}
|
||||||
|
if: ${{ matrix.build-what.key == 'capi' }}
|
||||||
|
env:
|
||||||
|
TARGET: ${{ matrix.metadata.target }}
|
||||||
|
TARGET_DIR: target/${{ matrix.metadata.target }}/release
|
||||||
|
CARGO_TARGET: --target ${{ matrix.metadata.target }}
|
||||||
|
- name: Build Wasmer
|
||||||
|
shell: bash
|
||||||
|
if: ${{ matrix.build-what.key == 'wasmer' && matrix.metadata.build != 'windows-gnu' }}
|
||||||
|
run: ${{ matrix.build-what.build-cmd }}
|
||||||
|
env:
|
||||||
|
TARGET: ${{ matrix.metadata.target }}
|
||||||
|
TARGET_DIR: target/${{ matrix.metadata.target }}/release
|
||||||
|
CARGO_TARGET: --target ${{ matrix.metadata.target }}
|
||||||
|
- name: Test C-API
|
||||||
|
shell: bash
|
||||||
|
if: ${{ matrix.build-what.key == 'capi' && !(matrix.metadata.build == 'linux-musl' || matrix.metadata.build == 'macos-arm' || matrix.metadata.build == 'windows-gnu') }}
|
||||||
|
run: make test-capi-ci
|
||||||
|
env:
|
||||||
|
TARGET: ${{ matrix.metadata.target }}
|
||||||
|
TARGET_DIR: target/${{ matrix.metadata.target }}/release
|
||||||
|
CARGO_TARGET: --target ${{ matrix.metadata.target }}
|
||||||
|
# C-API tests were disabled for linux-musl and macos-arm (we can't run them)
|
||||||
|
- name: Test C-API integration
|
||||||
|
shell: bash
|
||||||
|
if: ${{ matrix.build-what.key == 'capi' && !(matrix.metadata.build == 'linux-musl' || matrix.metadata.build == 'macos-arm' || matrix.metadata.build == 'windows-gnu') }}
|
||||||
|
run: export WASMER_DIR=`pwd`/package && make test-stage-7-capi-integration-tests
|
||||||
|
env:
|
||||||
|
TARGET: ${{ matrix.metadata.target }}
|
||||||
|
TARGET_DIR: target/${{ matrix.metadata.target }}/release
|
||||||
|
CARGO_TARGET: --target ${{ matrix.metadata.target }}
|
||||||
|
- name: Archive production artifacts
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: wasmer-cli-${{ matrix.metadata.build }}
|
||||||
|
path: build-wasmer.tar.gz
|
||||||
|
if-no-files-found: ignore
|
||||||
|
retention-days: 2
|
||||||
|
- name: Archive production artifacts
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: capi-${{ matrix.metadata.build }}
|
||||||
|
path: build-capi.tar.gz
|
||||||
|
if-no-files-found: ignore
|
||||||
|
retention-days: 2
|
||||||
|
|
||||||
|
test:
|
||||||
|
name: ${{ matrix.stage.description }} on ${{ matrix.metadata.build }}
|
||||||
|
runs-on: ${{ matrix.metadata.os }}
|
||||||
|
needs: setup
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
stage: [
|
||||||
|
{
|
||||||
|
description: 'Run wast test suite for all compilers',
|
||||||
|
make: 'test-stage-0-wast',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: 'Unit-test packages on std',
|
||||||
|
make: 'test-stage-1-test-all',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: 'Unit-test cranelift on no-std',
|
||||||
|
make: 'test-stage-2-test-compiler-cranelift-nostd',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: 'Unit-test singlepass on no-std',
|
||||||
|
make: 'test-stage-3-test-compiler-singlepass-nostd',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: 'Unit-test wasmer-cli',
|
||||||
|
make: 'test-stage-4-wasmer-cli',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: 'Unit-test examples',
|
||||||
|
make: 'test-stage-5-test-examples',
|
||||||
|
}
|
||||||
|
]
|
||||||
|
metadata: [
|
||||||
|
# We cannot test on macos-arm since we don't have ARM runners
|
||||||
|
{
|
||||||
|
build: linux-x64,
|
||||||
|
os: ubuntu-22.04,
|
||||||
|
target: x86_64-unknown-linux-gnu,
|
||||||
|
llvm_url: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
build: macos-x64,
|
||||||
|
os: macos-11,
|
||||||
|
target: x86_64-apple-darwin,
|
||||||
|
llvm_url: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-apple-darwin.tar.xz'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
build: windows-x64,
|
||||||
|
os: windows-2019,
|
||||||
|
target: x86_64-pc-windows-msvc,
|
||||||
|
llvm_choco_version: 13.0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
build: linux-musl,
|
||||||
|
target: x86_64-unknown-linux-musl,
|
||||||
|
os: ubuntu-22.04,
|
||||||
|
container: 'alpine:latest'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
container: ${{ matrix.metadata.container }}
|
||||||
|
env:
|
||||||
|
SCCACHE_AZURE_BLOB_CONTAINER: wasmerstoragesccacheblob
|
||||||
|
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.SCCACHE_AZURE_CONNECTION_STRING }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up libstdc++ on Linux
|
||||||
|
if: matrix.metadata.build == 'linux-x64'
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -y
|
||||||
|
sudo apt-get install -y --allow-downgrades libstdc++6
|
||||||
|
sudo apt-get install --reinstall g++
|
||||||
|
- name: Set up base deps on musl
|
||||||
|
if: matrix.metadata.build == 'linux-musl'
|
||||||
|
run: |
|
||||||
|
apk add build-base bash musl-dev curl tar make libtool libffi-dev gcc automake autoconf git openssl-dev g++
|
||||||
|
- name: Set up dependencies for Mac OS
|
||||||
|
run: |
|
||||||
|
brew install automake
|
||||||
|
# using gnu-tar is a workaround for https://github.com/actions/cache/issues/403
|
||||||
|
brew install gnu-tar
|
||||||
|
echo PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH" >> $GITHUB_ENV
|
||||||
|
if: matrix.metadata.os == 'macos-latest' || matrix.metadata.os == 'macos-11.0'
|
||||||
|
- name: Install Rust
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
toolchain: 1.63
|
||||||
|
target: ${{ matrix.metadata.target }}
|
||||||
|
- name: Choco install LLVM
|
||||||
|
uses: crazy-max/ghaction-chocolatey@v2
|
||||||
|
if: matrix.metadata.llvm_choco_version
|
||||||
|
with:
|
||||||
|
args: install llvm --version ${{ matrix.metadata.llvm_choco_version }} --allow-downgrade
|
||||||
|
- name: Install LLVM (Choco - Windows)
|
||||||
|
if: matrix.metadata.llvm_choco_version
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd 'C:\Program Files\LLVM\'
|
||||||
|
LLVM_DIR=$(pwd)
|
||||||
|
echo "LLVM_SYS_120_PREFIX=${LLVM_DIR}" >> $GITHUB_ENV
|
||||||
|
- name: Install LLVM (macOS Apple Silicon)
|
||||||
|
if: matrix.metadata.os == 'macos-11.0' && !matrix.metadata.llvm_url
|
||||||
|
run: |
|
||||||
|
brew install llvm
|
||||||
|
- name: Install LLVM
|
||||||
|
if: matrix.metadata.llvm_url
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSf ${{ matrix.metadata.llvm_url }} -L -o llvm.tar.xz
|
||||||
|
LLVM_DIR=$(pwd)/${{ env.LLVM_DIR }}
|
||||||
|
mkdir ${LLVM_DIR}
|
||||||
|
tar xf llvm.tar.xz --strip-components=1 -C ${LLVM_DIR}
|
||||||
|
echo "${LLVM_DIR}/bin" >> $GITHUB_PATH
|
||||||
|
echo "LLVM_SYS_120_PREFIX=${LLVM_DIR}" >> $GITHUB_ENV
|
||||||
|
env:
|
||||||
|
LLVM_DIR: .llvm
|
||||||
|
- name: Setup Rust target
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir -p .cargo
|
||||||
|
cat << EOF > .cargo/config.toml
|
||||||
|
[build]
|
||||||
|
target = "${{ matrix.metadata.target }}"
|
||||||
|
EOF
|
||||||
|
if: matrix.metadata.target
|
||||||
|
- name: Cache
|
||||||
|
uses: whywaita/actions-cache-s3@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cargo/*
|
||||||
|
./target/*
|
||||||
|
key: r22-${{ github.repository }}-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}-wasmer-make-test-stage-${{ matrix.stage.make }}-${{ matrix.metadata.build }}
|
||||||
|
aws-s3-bucket: wasmer-github-ci-cache
|
||||||
|
aws-access-key-id: ${{ secrets.GOOGLE_CACHE_ID }}
|
||||||
|
aws-secret-access-key: ${{ secrets.GOOGLE_CACHE_SECRET }}
|
||||||
|
aws-region: auto
|
||||||
|
aws-endpoint: https://storage.googleapis.com
|
||||||
|
aws-s3-bucket-endpoint: false
|
||||||
|
aws-s3-force-path-style: true
|
||||||
|
- name: ${{ matrix.stage.description }}
|
||||||
|
run: make ${{ matrix.stage.make }}
|
||||||
|
env:
|
||||||
|
TARGET: ${{ matrix.metadata.target }}
|
||||||
|
TARGET_DIR: target/${{ matrix.metadata.target }}/release
|
||||||
|
CARGO_TARGET: --target ${{ matrix.metadata.target }}
|
||||||
|
|
||||||
|
test_integration_cli:
|
||||||
|
name: CLI integration tests on ${{ matrix.build }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
needs: [build]
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- build: linux-x64
|
||||||
|
os: ubuntu-22.04
|
||||||
|
target: x86_64-unknown-linux-gnu
|
||||||
|
llvm_url: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz'
|
||||||
|
- build: macos-x64
|
||||||
|
os: macos-11
|
||||||
|
target: x86_64-apple-darwin
|
||||||
|
llvm_url: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-apple-darwin.tar.xz'
|
||||||
|
# we only build the integration-test CLI, we don't run tests
|
||||||
|
- build: macos-arm
|
||||||
|
os: macos-11
|
||||||
|
target: aarch64-apple-darwin,
|
||||||
|
- build: linux-musl
|
||||||
|
target: x86_64-unknown-linux-musl
|
||||||
|
os: ubuntu-22.04
|
||||||
|
container: alpine:latest
|
||||||
|
container: ${{ matrix.container }}
|
||||||
|
env:
|
||||||
|
SCCACHE_AZURE_BLOB_CONTAINER: wasmerstoragesccacheblob
|
||||||
|
SCCACHE_AZURE_CONNECTION_STRING: ${{ secrets.SCCACHE_AZURE_CONNECTION_STRING }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: goto-bus-stop/setup-zig@v2
|
||||||
|
with:
|
||||||
|
version: 0.10.0
|
||||||
|
- name: Set up base deps on musl
|
||||||
|
if: matrix.build == 'linux-musl'
|
||||||
|
run: |
|
||||||
|
apk add build-base bash musl-dev curl tar make libtool libffi-dev gcc automake autoconf git openssl-dev g++
|
||||||
|
- uses: actions/download-artifact@v3
|
||||||
|
id: download
|
||||||
|
with:
|
||||||
|
name: capi-${{ matrix.build }}
|
||||||
|
- uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: wasmer-cli-${{ matrix.build }}
|
||||||
|
- name: 'Echo download path'
|
||||||
|
run: echo ${{steps.download.outputs.download-path}}
|
||||||
|
- name: Install Rust
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
toolchain: 1.63
|
||||||
|
target: ${{ matrix.metadata.target }}
|
||||||
|
- name: Cache
|
||||||
|
uses: whywaita/actions-cache-s3@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cargo/*
|
||||||
|
./target/*
|
||||||
|
key: r22-${{ github.repository }}-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}-wasmer-make-test-integration-cli-${{ matrix.build }}
|
||||||
|
aws-s3-bucket: wasmer-github-ci-cache
|
||||||
|
aws-access-key-id: ${{ secrets.GOOGLE_CACHE_ID }}
|
||||||
|
aws-secret-access-key: ${{ secrets.GOOGLE_CACHE_SECRET }}
|
||||||
|
aws-region: auto
|
||||||
|
aws-endpoint: https://storage.googleapis.com
|
||||||
|
aws-s3-bucket-endpoint: false
|
||||||
|
aws-s3-force-path-style: true
|
||||||
|
- name: Unzip Artifacts
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
make untar-capi
|
||||||
|
- name: Unzip Artifacts
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
make untar-wasmer
|
||||||
|
- name: Test integration CLI
|
||||||
|
if: matrix.build != 'macos-arm'
|
||||||
|
shell: bash
|
||||||
|
run: export WASMER_DIR=`pwd`/package && make test-integration-cli-ci
|
||||||
|
env:
|
||||||
|
TARGET: ${{ matrix.target }}
|
||||||
|
TARGET_DIR: target/${{ matrix.target }}/release
|
||||||
|
CARGO_TARGET: --target ${{ matrix.target }}
|
||||||
|
WAPM_DEV_TOKEN: ${{ secrets.WAPM_DEV_TOKEN }}
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -20,3 +20,7 @@ wasmer.toml
|
|||||||
/core
|
/core
|
||||||
/vendor
|
/vendor
|
||||||
out.txt
|
out.txt
|
||||||
|
wapm.toml
|
||||||
|
build-capi.tar.gz
|
||||||
|
build-wasmer.tar.gz
|
||||||
|
lcov.info
|
||||||
173
Makefile
173
Makefile
@@ -38,6 +38,7 @@ SHELL=/usr/bin/env bash
|
|||||||
#####
|
#####
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IS_DARWIN := 0
|
IS_DARWIN := 0
|
||||||
IS_LINUX := 0
|
IS_LINUX := 0
|
||||||
IS_FREEBSD := 0
|
IS_FREEBSD := 0
|
||||||
@@ -362,10 +363,11 @@ check-wasmer:
|
|||||||
check-wasmer-wasm:
|
check-wasmer-wasm:
|
||||||
$(CARGO_BINARY) check --manifest-path lib/cli-compiler/Cargo.toml --target wasm32-wasi --features singlepass,cranelift --bin wasmer-compiler
|
$(CARGO_BINARY) check --manifest-path lib/cli-compiler/Cargo.toml --target wasm32-wasi --features singlepass,cranelift --bin wasmer-compiler
|
||||||
|
|
||||||
check-capi: capi-setup
|
check-capi:
|
||||||
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) check $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml \
|
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) check $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml \
|
||||||
--no-default-features --features wat,compiler,wasi,middlewares $(capi_compiler_features)
|
--no-default-features --features wat,compiler,wasi,middlewares $(capi_compiler_features)
|
||||||
|
|
||||||
|
|
||||||
build-wasmer:
|
build-wasmer:
|
||||||
$(CARGO_BINARY) build $(CARGO_TARGET) --release --manifest-path lib/cli/Cargo.toml $(compiler_features) --features="webc_runner" --bin wasmer
|
$(CARGO_BINARY) build $(CARGO_TARGET) --release --manifest-path lib/cli/Cargo.toml $(compiler_features) --features="webc_runner" --bin wasmer
|
||||||
|
|
||||||
@@ -404,12 +406,7 @@ endif
|
|||||||
build-docs:
|
build-docs:
|
||||||
$(CARGO_BINARY) doc $(CARGO_TARGET) --release $(compiler_features) --document-private-items --no-deps --workspace --exclude wasmer-c-api
|
$(CARGO_BINARY) doc $(CARGO_TARGET) --release $(compiler_features) --document-private-items --no-deps --workspace --exclude wasmer-c-api
|
||||||
|
|
||||||
capi-setup:
|
build-docs-capi:
|
||||||
ifeq ($(IS_WINDOWS), 1)
|
|
||||||
RUSTFLAGS += -C target-feature=+crt-static
|
|
||||||
endif
|
|
||||||
|
|
||||||
build-docs-capi: capi-setup
|
|
||||||
# `wasmer-c-api` lib's name is `wasmer`. To avoid a conflict
|
# `wasmer-c-api` lib's name is `wasmer`. To avoid a conflict
|
||||||
# when generating the documentation, we rename it to its
|
# when generating the documentation, we rename it to its
|
||||||
# crate's name. Then we restore the lib's name.
|
# crate's name. Then we restore the lib's name.
|
||||||
@@ -417,37 +414,37 @@ build-docs-capi: capi-setup
|
|||||||
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) doc $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --no-deps --features wat,compiler,cranelift,wasi
|
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) doc $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --no-deps --features wat,compiler,cranelift,wasi
|
||||||
sed "$(SEDI)" -e 's/name = "wasmer_c_api" # ##lib.name##/name = "wasmer" # ##lib.name##/' lib/c-api/Cargo.toml
|
sed "$(SEDI)" -e 's/name = "wasmer_c_api" # ##lib.name##/name = "wasmer" # ##lib.name##/' lib/c-api/Cargo.toml
|
||||||
|
|
||||||
build-capi: capi-setup
|
build-capi:
|
||||||
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
||||||
--no-default-features --features wat,compiler,wasi,middlewares,webc_runner $(capi_compiler_features)
|
--no-default-features --features wat,compiler,wasi,middlewares,webc_runner $(capi_compiler_features)
|
||||||
|
|
||||||
build-capi-singlepass: capi-setup
|
build-capi-singlepass:
|
||||||
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
||||||
--no-default-features --features wat,compiler,singlepass,wasi,middlewares,webc_runner
|
--no-default-features --features wat,compiler,singlepass,wasi,middlewares,webc_runner
|
||||||
|
|
||||||
build-capi-singlepass-universal: capi-setup
|
build-capi-singlepass-universal:
|
||||||
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
||||||
--no-default-features --features wat,compiler,singlepass,wasi,middlewares,webc_runner
|
--no-default-features --features wat,compiler,singlepass,wasi,middlewares,webc_runner
|
||||||
|
|
||||||
build-capi-cranelift: capi-setup
|
build-capi-cranelift:
|
||||||
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
||||||
--no-default-features --features wat,compiler,cranelift,wasi,middlewares,webc_runner
|
--no-default-features --features wat,compiler,cranelift,wasi,middlewares,webc_runner
|
||||||
|
|
||||||
build-capi-cranelift-universal: capi-setup
|
build-capi-cranelift-universal:
|
||||||
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
||||||
--no-default-features --features wat,compiler,cranelift,wasi,middlewares,webc_runner
|
--no-default-features --features wat,compiler,cranelift,wasi,middlewares,webc_runner
|
||||||
|
|
||||||
build-capi-llvm: capi-setup
|
build-capi-llvm:
|
||||||
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
||||||
--no-default-features --features wat,compiler,llvm,wasi,middlewares,webc_runner
|
--no-default-features --features wat,compiler,llvm,wasi,middlewares,webc_runner
|
||||||
|
|
||||||
build-capi-llvm-universal: capi-setup
|
build-capi-llvm-universal:
|
||||||
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
||||||
--no-default-features --features wat,compiler,llvm,wasi,middlewares,webc_runner
|
--no-default-features --features wat,compiler,llvm,wasi,middlewares,webc_runner
|
||||||
|
|
||||||
# Headless (we include the minimal to be able to run)
|
# Headless (we include the minimal to be able to run)
|
||||||
|
|
||||||
build-capi-headless: capi-setup
|
build-capi-headless:
|
||||||
ifeq ($(CARGO_TARGET),)
|
ifeq ($(CARGO_TARGET),)
|
||||||
RUSTFLAGS="${RUSTFLAGS} -C panic=abort -C link-dead-code -C lto -O -C embed-bitcode=yes" $(CARGO_BINARY) build --target $(HOST_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
RUSTFLAGS="${RUSTFLAGS} -C panic=abort -C link-dead-code -C lto -O -C embed-bitcode=yes" $(CARGO_BINARY) build --target $(HOST_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
||||||
--no-default-features --features compiler-headless,wasi
|
--no-default-features --features compiler-headless,wasi
|
||||||
@@ -456,7 +453,7 @@ else
|
|||||||
--no-default-features --features compiler-headless,wasi
|
--no-default-features --features compiler-headless,wasi
|
||||||
endif
|
endif
|
||||||
|
|
||||||
build-capi-headless-ios: capi-setup
|
build-capi-headless-ios:
|
||||||
RUSTFLAGS="${RUSTFLAGS} -C panic=abort" cargo lipo --manifest-path lib/c-api/Cargo.toml --release \
|
RUSTFLAGS="${RUSTFLAGS} -C panic=abort" cargo lipo --manifest-path lib/c-api/Cargo.toml --release \
|
||||||
--no-default-features --features compiler-headless,wasi
|
--no-default-features --features compiler-headless,wasi
|
||||||
|
|
||||||
@@ -466,18 +463,39 @@ build-capi-headless-ios: capi-setup
|
|||||||
#
|
#
|
||||||
#####
|
#####
|
||||||
|
|
||||||
test: test-compilers test-packages test-examples
|
# test compilers
|
||||||
|
test-stage-0-wast:
|
||||||
test-compilers:
|
|
||||||
$(CARGO_BINARY) test $(CARGO_TARGET) --release --tests $(compiler_features)
|
$(CARGO_BINARY) test $(CARGO_TARGET) --release --tests $(compiler_features)
|
||||||
|
|
||||||
test-packages:
|
# test packages
|
||||||
$(CARGO_BINARY) test $(CARGO_TARGET) --all --release $(exclude_tests)
|
test-stage-1-test-all:
|
||||||
|
$(CARGO_BINARY) test $(CARGO_TARGET) --all --release $(exclude_tests) --exclude wasmer-c-api-test-runner --exclude wasmer-capi-examples-runner
|
||||||
|
test-stage-2-test-compiler-cranelift-nostd:
|
||||||
$(CARGO_BINARY) test $(CARGO_TARGET) --manifest-path lib/compiler-cranelift/Cargo.toml --release --no-default-features --features=std
|
$(CARGO_BINARY) test $(CARGO_TARGET) --manifest-path lib/compiler-cranelift/Cargo.toml --release --no-default-features --features=std
|
||||||
|
test-stage-3-test-compiler-singlepass-nostd:
|
||||||
$(CARGO_BINARY) test $(CARGO_TARGET) --manifest-path lib/compiler-singlepass/Cargo.toml --release --no-default-features --features=std
|
$(CARGO_BINARY) test $(CARGO_TARGET) --manifest-path lib/compiler-singlepass/Cargo.toml --release --no-default-features --features=std
|
||||||
|
test-stage-4-wasmer-cli:
|
||||||
$(CARGO_BINARY) test $(CARGO_TARGET) --manifest-path lib/cli/Cargo.toml $(compiler_features) --release
|
$(CARGO_BINARY) test $(CARGO_TARGET) --manifest-path lib/cli/Cargo.toml $(compiler_features) --release
|
||||||
$(CARGO_BINARY) test $(CARGO_TARGET) --manifest-path lib/vfs/Cargo.toml $(compiler_features) --release
|
$(CARGO_BINARY) test $(CARGO_TARGET) --manifest-path lib/vfs/Cargo.toml $(compiler_features) --release
|
||||||
|
|
||||||
|
# test examples
|
||||||
|
test-stage-5-test-examples:
|
||||||
|
$(CARGO_BINARY) test $(CARGO_TARGET) $(compiler_features) --features wasi --examples
|
||||||
|
test-stage-6-test-examples-release:
|
||||||
|
$(CARGO_BINARY) test $(CARGO_TARGET) --release $(compiler_features) --features wasi --examples
|
||||||
|
|
||||||
|
test-stage-7-capi-integration-tests:
|
||||||
|
$(CARGO_BINARY) test $(CARGO_TARGET) --release --package wasmer-c-api-test-runner
|
||||||
|
$(CARGO_BINARY) test $(CARGO_TARGET) --release --package wasmer-capi-examples-runner
|
||||||
|
|
||||||
|
test: test-compilers test-packages test-examples
|
||||||
|
|
||||||
|
test-compilers: test-stage-0-wast
|
||||||
|
|
||||||
|
test-packages: test-stage-1-test-all test-stage-2-test-compiler-cranelift-nostd test-stage-3-test-compiler-singlepass-nostd test-stage-4-wasmer-cli
|
||||||
|
|
||||||
|
test-examples: test-stage-5-test-examples test-stage-6-test-examples-release
|
||||||
|
|
||||||
test-js: test-js-api test-js-wasi
|
test-js: test-js-api test-js-wasi
|
||||||
|
|
||||||
# TODO: disabled because the no-std / core feature doesn't actually work at the moment.
|
# TODO: disabled because the no-std / core feature doesn't actually work at the moment.
|
||||||
@@ -514,9 +532,13 @@ test-cranelift: $(foreach cranelift_engine,$(filter cranelift-%,$(compilers_engi
|
|||||||
|
|
||||||
test-llvm: $(foreach llvm_engine,$(filter llvm-%,$(compilers_engines)),test-$(llvm_engine))
|
test-llvm: $(foreach llvm_engine,$(filter llvm-%,$(compilers_engines)),test-$(llvm_engine))
|
||||||
|
|
||||||
|
# same as test-capi, but without the build-capi step first
|
||||||
|
test-capi-ci: $(foreach compiler_engine,$(capi_compilers_engines),test-capi-crate-$(compiler_engine) test-capi-integration-$(compiler_engine))
|
||||||
|
|
||||||
# This test requires building the capi with all the available
|
# This test requires building the capi with all the available
|
||||||
# compilers first
|
# compilers first
|
||||||
test-capi: build-capi package-capi $(foreach compiler_engine,$(capi_compilers_engines),test-capi-crate-$(compiler_engine) test-capi-integration-$(compiler_engine))
|
test-capi: build-capi package-capi test-capi-ci
|
||||||
|
|
||||||
|
|
||||||
test-capi-crate-%:
|
test-capi-crate-%:
|
||||||
WASMER_CAPI_CONFIG=$(shell echo $@ | sed -e s/test-capi-crate-//) $(CARGO_BINARY) test $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
WASMER_CAPI_CONFIG=$(shell echo $@ | sed -e s/test-capi-crate-//) $(CARGO_BINARY) test $(CARGO_TARGET) --manifest-path lib/c-api/Cargo.toml --release \
|
||||||
@@ -535,14 +557,14 @@ test-wasi-unit:
|
|||||||
test-wasi:
|
test-wasi:
|
||||||
$(CARGO_BINARY) test $(CARGO_TARGET) --release --tests $(compiler_features) -- wasi::wasitests
|
$(CARGO_BINARY) test $(CARGO_TARGET) --release --tests $(compiler_features) -- wasi::wasitests
|
||||||
|
|
||||||
test-examples:
|
|
||||||
$(CARGO_BINARY) test $(CARGO_TARGET) $(compiler_features) --features wasi --examples
|
|
||||||
$(CARGO_BINARY) test $(CARGO_TARGET) --release $(compiler_features) --features wasi --examples
|
|
||||||
|
|
||||||
test-integration-cli:
|
test-integration-cli:
|
||||||
rustup target add wasm32-wasi
|
rustup target add wasm32-wasi
|
||||||
$(CARGO_BINARY) test $(CARGO_TARGET) --features webc_runner --no-fail-fast -p wasmer-integration-tests-cli -- --nocapture --test-threads=1
|
$(CARGO_BINARY) test $(CARGO_TARGET) --features webc_runner --no-fail-fast -p wasmer-integration-tests-cli -- --nocapture --test-threads=1
|
||||||
|
|
||||||
|
test-integration-cli-ci:
|
||||||
|
rustup target add wasm32-wasi
|
||||||
|
$(CARGO_BINARY) test $(CARGO_TARGET) --features webc_runner -p wasmer-integration-tests-cli -- --nocapture || $(CARGO_BINARY) test $(CARGO_TARGET) --features webc_runner --no-fail-fast -p wasmer-integration-tests-cli -- --nocapture --test-threads=1
|
||||||
|
|
||||||
test-integration-ios:
|
test-integration-ios:
|
||||||
$(CARGO_BINARY) test $(CARGO_TARGET) --features webc_runner -p wasmer-integration-tests-ios
|
$(CARGO_BINARY) test $(CARGO_TARGET) --features webc_runner -p wasmer-integration-tests-ios
|
||||||
|
|
||||||
@@ -569,10 +591,21 @@ endif
|
|||||||
|
|
||||||
package-wasmer:
|
package-wasmer:
|
||||||
mkdir -p "package/bin"
|
mkdir -p "package/bin"
|
||||||
|
ls -R target
|
||||||
ifeq ($(IS_WINDOWS), 1)
|
ifeq ($(IS_WINDOWS), 1)
|
||||||
cp $(TARGET_DIR)/wasmer.exe package/bin/
|
if [ -f "$(TARGET_DIR)/wasmer.exe" ]; then \
|
||||||
|
cp "$(TARGET_DIR)/wasmer.exe" package/bin ;\
|
||||||
|
fi
|
||||||
|
if [ -f "target/$(HOST_TARGET)/release/wasmer.exe" ]; then \
|
||||||
|
cp "target/$(HOST_TARGET)/release/wasmer.exe" package/bin ;\
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
cp $(TARGET_DIR)/wasmer package/bin/
|
if [ -f "$(TARGET_DIR)/wasmer" ]; then \
|
||||||
|
cp $(TARGET_DIR)/wasmer package/bin ;\
|
||||||
|
fi
|
||||||
|
if [ -f "target/$(HOST_TARGET)/release/wasmer" ]; then \
|
||||||
|
cp "target/$(HOST_TARGET)/release/wasmer" package/bin ;\
|
||||||
|
fi
|
||||||
ifeq ($(IS_DARWIN), 1)
|
ifeq ($(IS_DARWIN), 1)
|
||||||
codesign -s - package/bin/wasmer || true
|
codesign -s - package/bin/wasmer || true
|
||||||
endif
|
endif
|
||||||
@@ -585,7 +618,6 @@ package-capi:
|
|||||||
cp lib/c-api/wasmer_wasm.h* package/include
|
cp lib/c-api/wasmer_wasm.h* package/include
|
||||||
cp lib/c-api/tests/wasm-c-api/include/wasm.h* package/include
|
cp lib/c-api/tests/wasm-c-api/include/wasm.h* package/include
|
||||||
cp lib/c-api/README.md package/include/README.md
|
cp lib/c-api/README.md package/include/README.md
|
||||||
|
|
||||||
if [ -f $(TARGET_DIR)/wasmer.dll ]; then \
|
if [ -f $(TARGET_DIR)/wasmer.dll ]; then \
|
||||||
cp $(TARGET_DIR)/wasmer.dll package/lib/wasmer.dll ;\
|
cp $(TARGET_DIR)/wasmer.dll package/lib/wasmer.dll ;\
|
||||||
fi
|
fi
|
||||||
@@ -608,6 +640,28 @@ package-capi:
|
|||||||
cp $(TARGET_DIR)/libwasmer.a package/lib/libwasmer.a ;\
|
cp $(TARGET_DIR)/libwasmer.a package/lib/libwasmer.a ;\
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -f target/$(HOST_TARGET)/release/wasmer.dll ]; then \
|
||||||
|
cp target/$(HOST_TARGET)/release/wasmer.dll package/lib/wasmer.dll ;\
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f target/$(HOST_TARGET)/release/wasmer.dll.lib ]; then \
|
||||||
|
cp target/$(HOST_TARGET)/release/wasmer.dll.lib package/lib/wasmer.dll.lib ;\
|
||||||
|
fi
|
||||||
|
if [ -f target/$(HOST_TARGET)/release/wasmer.lib ]; then \
|
||||||
|
cp target/$(HOST_TARGET)/release/wasmer.lib package/lib/wasmer.lib ;\
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f target/$(HOST_TARGET)/release/libwasmer.dylib ]; then \
|
||||||
|
cp target/$(HOST_TARGET)/release/libwasmer.dylib package/lib/libwasmer.dylib ;\
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f target/$(HOST_TARGET)/release/libwasmer.so ]; then \
|
||||||
|
cp target/$(HOST_TARGET)/release/libwasmer.so package/lib/libwasmer.so ;\
|
||||||
|
fi
|
||||||
|
if [ -f target/$(HOST_TARGET)/release/libwasmer.a ]; then \
|
||||||
|
cp target/$(HOST_TARGET)/release/libwasmer.a package/lib/libwasmer.a ;\
|
||||||
|
fi
|
||||||
|
|
||||||
package-capi-headless: build-capi-headless
|
package-capi-headless: build-capi-headless
|
||||||
mkdir -p "package/include"
|
mkdir -p "package/include"
|
||||||
mkdir -p "package/lib"
|
mkdir -p "package/lib"
|
||||||
@@ -642,32 +696,49 @@ package-docs: build-docs build-docs-capi
|
|||||||
|
|
||||||
package: package-wasmer package-minimal-headless-wasmer package-capi
|
package: package-wasmer package-minimal-headless-wasmer package-capi
|
||||||
|
|
||||||
package-gnu: package-capi-gnu
|
tar-capi:
|
||||||
|
ls -R package
|
||||||
|
tar -C package -zcvf build-capi.tar.gz lib include
|
||||||
|
|
||||||
package-capi-gnu:
|
untar-capi:
|
||||||
mkdir -p "package/include"
|
mkdir -p package
|
||||||
mkdir -p "package/lib"
|
mkdir -p target/release
|
||||||
cp lib/c-api/wasmer.h* package/include
|
mkdir -p target/$(HOST_TARGET)/release
|
||||||
cp lib/c-api/wasmer_wasm.h* package/include
|
tar -C package -xf ./build-capi.tar.gz
|
||||||
cp lib/c-api/tests/wasm-c-api/include/wasm.h* package/include
|
cp package/lib/* target/release
|
||||||
cp lib/c-api/README.md package/include/README.md
|
cp package/lib/* target/$(HOST_TARGET)/release
|
||||||
if [ -f target/x86_64-pc-windows-gnu/release/wasmer.dll ]; then \
|
mkdir -p target/debug
|
||||||
cp target/x86_64-pc-windows-gnu/release/wasmer.dll package/lib/wasmer.dll ;\
|
mkdir -p target/$(HOST_TARGET)/debug
|
||||||
fi
|
tar -C package -xf ./build-capi.tar.gz
|
||||||
|
cp package/lib/* target/debug
|
||||||
|
cp package/lib/* target/$(HOST_TARGET)/debug
|
||||||
|
echo "untar capi"
|
||||||
|
ls -R target
|
||||||
|
echo "package"
|
||||||
|
ls -R package
|
||||||
|
|
||||||
if [ -f target/x86_64-pc-windows-gnu/release/wasmer.dll.lib ]; then \
|
tar-wasmer:
|
||||||
cp target/x86_64-pc-windows-gnu/release/wasmer.dll.lib package/lib/wasmer.dll.lib ;\
|
ls -R package
|
||||||
fi
|
tar -C package -zcvf build-wasmer.tar.gz bin
|
||||||
|
|
||||||
if [ -f target/x86_64-pc-windows-gnu/release/wasmer.lib ]; then \
|
untar-wasmer:
|
||||||
cp target/x86_64-pc-windows-gnu/release/wasmer.lib package/lib/wasmer.lib ;\
|
mkdir -p package
|
||||||
fi
|
mkdir -p target/release
|
||||||
|
mkdir -p target/$(HOST_TARGET)/release
|
||||||
|
tar -C package -xf ./build-wasmer.tar.gz
|
||||||
|
cp package/bin/* target/release
|
||||||
|
cp package/bin/* target/$(HOST_TARGET)/release
|
||||||
|
mkdir -p target/debug
|
||||||
|
mkdir -p target/$(HOST_TARGET)/debug
|
||||||
|
tar -C package -xf ./build-wasmer.tar.gz
|
||||||
|
cp package/bin/* target/debug
|
||||||
|
cp package/bin/* target/$(HOST_TARGET)/debug
|
||||||
|
echo "untar wasmer"
|
||||||
|
ls -R target
|
||||||
|
echo "package"
|
||||||
|
ls -R package
|
||||||
|
|
||||||
if [ -f target/x86_64-pc-windows-gnu/release/libwasmer.a ]; then \
|
distribution-gnu: package-capi
|
||||||
cp target/x86_64-pc-windows-gnu/release/libwasmer.a package/lib/libwasmer.a ;\
|
|
||||||
fi
|
|
||||||
|
|
||||||
distribution-gnu: package-gnu
|
|
||||||
cp LICENSE package/LICENSE
|
cp LICENSE package/LICENSE
|
||||||
cp ATTRIBUTIONS.md package/ATTRIBUTIONS
|
cp ATTRIBUTIONS.md package/ATTRIBUTIONS
|
||||||
mkdir -p dist
|
mkdir -p dist
|
||||||
|
|||||||
@@ -294,11 +294,11 @@ impl Module {
|
|||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
pub unsafe fn deserialize_from_file(
|
pub unsafe fn deserialize_from_file(
|
||||||
store: &impl AsStoreRef,
|
engine: &impl AsEngineRef,
|
||||||
path: impl AsRef<Path>,
|
path: impl AsRef<Path>,
|
||||||
) -> Result<Self, DeserializeError> {
|
) -> Result<Self, DeserializeError> {
|
||||||
let artifact = store
|
let artifact = engine
|
||||||
.as_store_ref()
|
.as_engine_ref()
|
||||||
.engine()
|
.engine()
|
||||||
.deserialize_from_file(path.as_ref())?;
|
.deserialize_from_file(path.as_ref())?;
|
||||||
Ok(Self::from_artifact(artifact))
|
Ok(Self::from_artifact(artifact))
|
||||||
|
|||||||
@@ -347,7 +347,11 @@ fn shared_object_dir() -> PathBuf {
|
|||||||
// We either find `target` or the target triple if cross-compiling.
|
// We either find `target` or the target triple if cross-compiling.
|
||||||
if shared_object_dir.file_name() != Some(OsStr::new("target")) {
|
if shared_object_dir.file_name() != Some(OsStr::new("target")) {
|
||||||
let target = env::var("TARGET").unwrap();
|
let target = env::var("TARGET").unwrap();
|
||||||
assert_eq!(shared_object_dir.file_name(), Some(OsStr::new(&target)));
|
if shared_object_dir.file_name() != Some(OsStr::new("llvm-cov-target")) {
|
||||||
|
assert_eq!(shared_object_dir.file_name(), Some(OsStr::new(&target)));
|
||||||
|
} else {
|
||||||
|
shared_object_dir.set_file_name(&target);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
shared_object_dir.push(env::var("PROFILE").unwrap());
|
shared_object_dir.push(env::var("PROFILE").unwrap());
|
||||||
|
|||||||
@@ -41,4 +41,4 @@ run:
|
|||||||
.SILENT: clean
|
.SILENT: clean
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
$(foreach file,$(ALL),rm -f $(file).o $(file))
|
$(foreach file,$(ALL),rm -f $(file).o $(file))
|
||||||
@@ -445,6 +445,7 @@ mod tests {
|
|||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
use wasmer_inline_c::assert_c;
|
use wasmer_inline_c::assert_c;
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_engine_new() {
|
fn test_engine_new() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
|
|||||||
2
lib/c-api/src/wasm_c_api/externals/global.rs
vendored
2
lib/c-api/src/wasm_c_api/externals/global.rs
vendored
@@ -102,6 +102,7 @@ mod tests {
|
|||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
use wasmer_inline_c::assert_c;
|
use wasmer_inline_c::assert_c;
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_set_host_global_immutable() {
|
fn test_set_host_global_immutable() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
@@ -134,6 +135,7 @@ mod tests {
|
|||||||
.success();
|
.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_set_guest_global_immutable() {
|
fn test_set_guest_global_immutable() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
|
|||||||
1
lib/c-api/src/wasm_c_api/externals/mod.rs
vendored
1
lib/c-api/src/wasm_c_api/externals/mod.rs
vendored
@@ -137,6 +137,7 @@ mod tests {
|
|||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
use wasmer_inline_c::assert_c;
|
use wasmer_inline_c::assert_c;
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_extern_copy() {
|
fn test_extern_copy() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
|
|||||||
@@ -212,6 +212,7 @@ mod tests {
|
|||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
use wasmer_inline_c::assert_c;
|
use wasmer_inline_c::assert_c;
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_instance_new() {
|
fn test_instance_new() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
|
|||||||
@@ -485,6 +485,7 @@ mod tests {
|
|||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
use wasmer_inline_c::assert_c;
|
use wasmer_inline_c::assert_c;
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_module_validate() {
|
fn test_module_validate() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
@@ -512,6 +513,7 @@ mod tests {
|
|||||||
.success();
|
.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_module_new() {
|
fn test_module_new() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
@@ -541,6 +543,7 @@ mod tests {
|
|||||||
.success();
|
.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_module_exports() {
|
fn test_module_exports() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
@@ -649,6 +652,7 @@ mod tests {
|
|||||||
.success();
|
.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_module_imports() {
|
fn test_module_imports() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
@@ -767,6 +771,7 @@ mod tests {
|
|||||||
.success();
|
.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_module_serialize() {
|
fn test_module_serialize() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
@@ -801,6 +806,7 @@ mod tests {
|
|||||||
.success();
|
.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_module_serialize_and_deserialize() {
|
fn test_module_serialize_and_deserialize() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
|
|||||||
@@ -149,6 +149,7 @@ mod tests {
|
|||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
use wasmer_inline_c::assert_c;
|
use wasmer_inline_c::assert_c;
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_trap_message_null_terminated() {
|
fn test_trap_message_null_terminated() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
@@ -181,6 +182,7 @@ mod tests {
|
|||||||
.success();
|
.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_trap_message_not_null_terminated() {
|
fn test_trap_message_not_null_terminated() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
|
|||||||
@@ -540,6 +540,7 @@ mod tests {
|
|||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
use wasmer_inline_c::assert_c;
|
use wasmer_inline_c::assert_c;
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_wasi_get_wasi_version_snapshot0() {
|
fn test_wasi_get_wasi_version_snapshot0() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
@@ -573,6 +574,7 @@ mod tests {
|
|||||||
.success();
|
.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_wasi_get_wasi_version_snapshot1() {
|
fn test_wasi_get_wasi_version_snapshot1() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
@@ -606,6 +608,7 @@ mod tests {
|
|||||||
.success();
|
.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg_attr(coverage, ignore)]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_wasi_get_wasi_version_invalid() {
|
fn test_wasi_get_wasi_version_invalid() {
|
||||||
(assert_c! {
|
(assert_c! {
|
||||||
|
|||||||
@@ -29,4 +29,4 @@ test:
|
|||||||
.SILENT: clean
|
.SILENT: clean
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
$(foreach file,$(ALL),rm -f $(file).o $(file))
|
$(foreach file,$(ALL),rm -f $(file).o $(file))
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
#[cfg(test)]
|
||||||
|
use std::process::Stdio;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
static INCLUDE_REGEX: &str = "#include \"(.*)\"";
|
static INCLUDE_REGEX: &str = "#include \"(.*)\"";
|
||||||
@@ -23,52 +25,7 @@ impl Config {
|
|||||||
if config.wasmer_dir.is_empty() {
|
if config.wasmer_dir.is_empty() {
|
||||||
println!("manifest dir = {manifest_dir}, wasmer root dir = {wasmer_base_dir}");
|
println!("manifest dir = {manifest_dir}, wasmer root dir = {wasmer_base_dir}");
|
||||||
config.wasmer_dir = wasmer_base_dir.clone() + "/package";
|
config.wasmer_dir = wasmer_base_dir.clone() + "/package";
|
||||||
if !std::path::Path::new(&config.wasmer_dir).exists() {
|
assert!(std::path::Path::new(&config.wasmer_dir).exists());
|
||||||
println!("running make build-capi...");
|
|
||||||
// run make build-capi
|
|
||||||
let mut cmd = std::process::Command::new("make");
|
|
||||||
cmd.arg("build-capi");
|
|
||||||
cmd.current_dir(wasmer_base_dir.clone());
|
|
||||||
let result = cmd.output();
|
|
||||||
println!("make build-capi: {result:#?}");
|
|
||||||
|
|
||||||
println!("running make package...");
|
|
||||||
// run make package-capi
|
|
||||||
let mut cmd = std::process::Command::new("make");
|
|
||||||
cmd.arg("package-capi");
|
|
||||||
cmd.current_dir(wasmer_base_dir.clone());
|
|
||||||
let result = cmd.output();
|
|
||||||
make_package();
|
|
||||||
println!("make package: {result:#?}");
|
|
||||||
|
|
||||||
println!("list {}", config.wasmer_dir);
|
|
||||||
match std::fs::read_dir(&config.wasmer_dir) {
|
|
||||||
Ok(o) => {
|
|
||||||
for entry in o {
|
|
||||||
let entry = entry.unwrap();
|
|
||||||
let path = entry.path();
|
|
||||||
println!(" {:?}", path.file_name());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
println!("error in reading config.wasmer_dir: {e}");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
println!("list {}/include", config.wasmer_dir);
|
|
||||||
match std::fs::read_dir(&format!("{}/include", config.wasmer_dir)) {
|
|
||||||
Ok(o) => {
|
|
||||||
for entry in o {
|
|
||||||
let entry = entry.unwrap();
|
|
||||||
let path = entry.path();
|
|
||||||
println!(" {:?}", path.file_name());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
println!("error in reading config.wasmer_dir: {e}");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if config.root_dir.is_empty() {
|
if config.root_dir.is_empty() {
|
||||||
config.root_dir = wasmer_base_dir + "/lib/c-api/tests";
|
config.root_dir = wasmer_base_dir + "/lib/c-api/tests";
|
||||||
@@ -132,41 +89,6 @@ impl Drop for RemoveTestsOnDrop {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn make_package() {
|
|
||||||
let wasmer_root_dir = find_wasmer_base_dir();
|
|
||||||
let _ = std::fs::create_dir_all(&format!("{wasmer_root_dir}/package/lib"));
|
|
||||||
let _ = std::fs::create_dir_all(&format!("{wasmer_root_dir}/package/include"));
|
|
||||||
let _ = std::fs::copy(
|
|
||||||
&format!("{wasmer_root_dir}/lib/c-api/tests/wasm.h"),
|
|
||||||
&format!("{wasmer_root_dir}/package/include/wasm.h"),
|
|
||||||
);
|
|
||||||
let _ = std::fs::copy(
|
|
||||||
&format!("{wasmer_root_dir}/lib/c-api/tests/wasmer.h"),
|
|
||||||
&format!("{wasmer_root_dir}/package/include/wasmer.h"),
|
|
||||||
);
|
|
||||||
#[cfg(target_os = "windows")]
|
|
||||||
let _ = std::fs::copy(
|
|
||||||
&format!("{wasmer_root_dir}/target/release/wasmer.dll"),
|
|
||||||
&format!("{wasmer_root_dir}/package/lib"),
|
|
||||||
);
|
|
||||||
#[cfg(target_os = "windows")]
|
|
||||||
let _ = std::fs::copy(
|
|
||||||
&format!("{wasmer_root_dir}/target/release/wasmer.dll.lib"),
|
|
||||||
&format!("{wasmer_root_dir}/package/lib"),
|
|
||||||
);
|
|
||||||
#[cfg(not(target_os = "windows"))]
|
|
||||||
let _ = std::fs::copy(
|
|
||||||
&format!("{wasmer_root_dir}/target/release/libwasmer.so"),
|
|
||||||
&format!("{wasmer_root_dir}/package/lib"),
|
|
||||||
);
|
|
||||||
#[cfg(not(target_os = "windows"))]
|
|
||||||
let _ = std::fs::copy(
|
|
||||||
&format!("{wasmer_root_dir}/target/release/libwasmer.lib"),
|
|
||||||
&format!("{wasmer_root_dir}/package/lib"),
|
|
||||||
);
|
|
||||||
println!("copying done (make package)");
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub const CAPI_BASE_TESTS: &[&str] = &[
|
pub const CAPI_BASE_TESTS: &[&str] = &[
|
||||||
"wasm-c-api/example/callback",
|
"wasm-c-api/example/callback",
|
||||||
@@ -358,6 +280,9 @@ fn test_ok() {
|
|||||||
println!("compile: {command:#?}");
|
println!("compile: {command:#?}");
|
||||||
// compile
|
// compile
|
||||||
let output = command
|
let output = command
|
||||||
|
.stdout(Stdio::inherit())
|
||||||
|
.stderr(Stdio::inherit())
|
||||||
|
.current_dir(find_wasmer_base_dir())
|
||||||
.output()
|
.output()
|
||||||
.expect(&format!("failed to compile {command:#?}"));
|
.expect(&format!("failed to compile {command:#?}"));
|
||||||
if !output.status.success() {
|
if !output.status.success() {
|
||||||
@@ -397,6 +322,14 @@ fn print_wasmer_root_to_stdout(config: &Config) {
|
|||||||
|
|
||||||
use walkdir::WalkDir;
|
use walkdir::WalkDir;
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"wasmer dir: {}",
|
||||||
|
std::path::Path::new(&config.wasmer_dir)
|
||||||
|
.canonicalize()
|
||||||
|
.unwrap()
|
||||||
|
.display()
|
||||||
|
);
|
||||||
|
|
||||||
for entry in WalkDir::new(&config.wasmer_dir)
|
for entry in WalkDir::new(&config.wasmer_dir)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(Result::ok)
|
.filter_map(Result::ok)
|
||||||
@@ -405,6 +338,14 @@ fn print_wasmer_root_to_stdout(config: &Config) {
|
|||||||
println!("{f_name}");
|
println!("{f_name}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"root dir: {}",
|
||||||
|
std::path::Path::new(&config.root_dir)
|
||||||
|
.canonicalize()
|
||||||
|
.unwrap()
|
||||||
|
.display()
|
||||||
|
);
|
||||||
|
|
||||||
for entry in WalkDir::new(&config.root_dir)
|
for entry in WalkDir::new(&config.root_dir)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(Result::ok)
|
.filter_map(Result::ok)
|
||||||
|
|||||||
4
lib/cache/src/cache.rs
vendored
4
lib/cache/src/cache.rs
vendored
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
use crate::hash::Hash;
|
use crate::hash::Hash;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use wasmer::{Module, Store};
|
use wasmer::{AsEngineRef, Module};
|
||||||
|
|
||||||
/// A generic cache for storing and loading compiled wasm modules.
|
/// A generic cache for storing and loading compiled wasm modules.
|
||||||
pub trait Cache {
|
pub trait Cache {
|
||||||
@@ -19,7 +19,7 @@ pub trait Cache {
|
|||||||
/// This function is unsafe as the cache store could be tampered with.
|
/// This function is unsafe as the cache store could be tampered with.
|
||||||
unsafe fn load(
|
unsafe fn load(
|
||||||
&self,
|
&self,
|
||||||
store: &Store,
|
engine: &impl AsEngineRef,
|
||||||
key: Hash,
|
key: Hash,
|
||||||
) -> Result<Module, Self::DeserializeError>;
|
) -> Result<Module, Self::DeserializeError>;
|
||||||
|
|
||||||
|
|||||||
10
lib/cache/src/filesystem.rs
vendored
10
lib/cache/src/filesystem.rs
vendored
@@ -4,7 +4,7 @@ use crate::hash::Hash;
|
|||||||
use std::fs::{create_dir_all, File};
|
use std::fs::{create_dir_all, File};
|
||||||
use std::io::{self, Write};
|
use std::io::{self, Write};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use wasmer::{DeserializeError, Module, SerializeError, Store};
|
use wasmer::{AsEngineRef, DeserializeError, Module, SerializeError};
|
||||||
|
|
||||||
/// Representation of a directory that contains compiled wasm artifacts.
|
/// Representation of a directory that contains compiled wasm artifacts.
|
||||||
///
|
///
|
||||||
@@ -91,14 +91,18 @@ impl Cache for FileSystemCache {
|
|||||||
type DeserializeError = DeserializeError;
|
type DeserializeError = DeserializeError;
|
||||||
type SerializeError = SerializeError;
|
type SerializeError = SerializeError;
|
||||||
|
|
||||||
unsafe fn load(&self, store: &Store, key: Hash) -> Result<Module, Self::DeserializeError> {
|
unsafe fn load(
|
||||||
|
&self,
|
||||||
|
engine: &impl AsEngineRef,
|
||||||
|
key: Hash,
|
||||||
|
) -> Result<Module, Self::DeserializeError> {
|
||||||
let filename = if let Some(ref ext) = self.ext {
|
let filename = if let Some(ref ext) = self.ext {
|
||||||
format!("{}.{}", key.to_string(), ext)
|
format!("{}.{}", key.to_string(), ext)
|
||||||
} else {
|
} else {
|
||||||
key.to_string()
|
key.to_string()
|
||||||
};
|
};
|
||||||
let path = self.path.join(filename);
|
let path = self.path.join(filename);
|
||||||
let ret = Module::deserialize_from_file(store, path.clone());
|
let ret = Module::deserialize_from_file(engine, path.clone());
|
||||||
if ret.is_err() {
|
if ret.is_err() {
|
||||||
// If an error occurs while deserializing then we can not trust it anymore
|
// If an error occurs while deserializing then we can not trust it anymore
|
||||||
// so delete the cache file
|
// so delete the cache file
|
||||||
|
|||||||
@@ -464,9 +464,9 @@ impl CreateExe {
|
|||||||
|
|
||||||
let file = files
|
let file = files
|
||||||
.iter()
|
.iter()
|
||||||
.find(|f| f.ends_with("libwasmer.a")).cloned()
|
.find(|f| f.ends_with("libwasmer.a") || f.ends_with("wasmer.lib")).cloned()
|
||||||
.ok_or_else(|| {
|
.ok_or_else(|| {
|
||||||
anyhow!("Could not find libwasmer.a for {} target in the provided tarball path (files = {files:#?})", target)
|
anyhow!("Could not find libwasmer.a / wasmer.lib for {} target in the provided tarball path (files = {files:#?})", target)
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
Ok((file, tarball_dir))
|
Ok((file, tarball_dir))
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ pub enum SpawnType {
|
|||||||
/// An implementation of task management
|
/// An implementation of task management
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
pub trait VirtualTaskManager: std::fmt::Debug + Send + Sync + 'static {
|
pub trait VirtualTaskManager: std::fmt::Debug + Send + Sync + 'static {
|
||||||
|
|
||||||
/// Invokes whenever a WASM thread goes idle. In some runtimes (like singlethreaded
|
/// Invokes whenever a WASM thread goes idle. In some runtimes (like singlethreaded
|
||||||
/// execution environments) they will need to do asynchronous work whenever the main
|
/// execution environments) they will need to do asynchronous work whenever the main
|
||||||
/// thread goes idle and this is the place to hook for that.
|
/// thread goes idle and this is the place to hook for that.
|
||||||
|
|||||||
@@ -33,12 +33,10 @@ impl Default for TokioTaskManager {
|
|||||||
|
|
||||||
struct TokioRuntimeGuard<'g> {
|
struct TokioRuntimeGuard<'g> {
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
inner: tokio::runtime::EnterGuard<'g>
|
inner: tokio::runtime::EnterGuard<'g>,
|
||||||
}
|
}
|
||||||
impl<'g> Drop
|
impl<'g> Drop for TokioRuntimeGuard<'g> {
|
||||||
for TokioRuntimeGuard<'g> {
|
fn drop(&mut self) {}
|
||||||
fn drop(&mut self) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl VirtualTaskManager for TokioTaskManager {
|
impl VirtualTaskManager for TokioTaskManager {
|
||||||
@@ -83,7 +81,7 @@ impl VirtualTaskManager for TokioTaskManager {
|
|||||||
#[allow(dyn_drop)]
|
#[allow(dyn_drop)]
|
||||||
fn runtime_enter<'g>(&'g self) -> Box<dyn std::ops::Drop + 'g> {
|
fn runtime_enter<'g>(&'g self) -> Box<dyn std::ops::Drop + 'g> {
|
||||||
Box::new(TokioRuntimeGuard {
|
Box::new(TokioRuntimeGuard {
|
||||||
inner: self.0.enter()
|
inner: self.0.enter(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -173,24 +173,22 @@ pub(crate) fn poll_oneoff_internal(
|
|||||||
.or_insert_with(|| HashMap::<state::PollEventSet, Subscription>::default());
|
.or_insert_with(|| HashMap::<state::PollEventSet, Subscription>::default());
|
||||||
entry.extend(in_events.into_iter());
|
entry.extend(in_events.into_iter());
|
||||||
}
|
}
|
||||||
|
|
||||||
// In order to prevent polling from smashing the CPU we add a minimum
|
// In order to prevent polling from smashing the CPU we add a minimum
|
||||||
// sleep time which is roughly equal the size of a Linux time interval
|
// sleep time which is roughly equal the size of a Linux time interval
|
||||||
// that exponentially builds up when file descriptors are not being triggered
|
// that exponentially builds up when file descriptors are not being triggered
|
||||||
if let Some(sleep_time) = time_to_sleep.clone() {
|
if let Some(sleep_time) = time_to_sleep.clone() {
|
||||||
time_to_sleep = Some(
|
time_to_sleep = Some(match env.poll_backoff {
|
||||||
match env.poll_backoff {
|
a if a < 50 => sleep_time,
|
||||||
a if a < 50 => sleep_time,
|
a if a < 100 => Duration::from_millis(1).max(sleep_time),
|
||||||
a if a < 100 => Duration::from_millis(1).max(sleep_time),
|
a if a < 150 => Duration::from_millis(2).max(sleep_time),
|
||||||
a if a < 150 => Duration::from_millis(2).max(sleep_time),
|
a if a < 200 => Duration::from_millis(5).max(sleep_time),
|
||||||
a if a < 200 => Duration::from_millis(5).max(sleep_time),
|
a if a < 250 => Duration::from_millis(10).max(sleep_time),
|
||||||
a if a < 250 => Duration::from_millis(10).max(sleep_time),
|
a if a < 300 => Duration::from_millis(20).max(sleep_time),
|
||||||
a if a < 300 => Duration::from_millis(20).max(sleep_time),
|
a if a < 350 => Duration::from_millis(50).max(sleep_time),
|
||||||
a if a < 350 => Duration::from_millis(50).max(sleep_time),
|
a if a < 400 => Duration::from_millis(100).max(sleep_time),
|
||||||
a if a < 400 => Duration::from_millis(100).max(sleep_time),
|
_ => Duration::from_millis(200).max(sleep_time),
|
||||||
_ => Duration::from_millis(200).max(sleep_time),
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
drop(env);
|
drop(env);
|
||||||
|
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ def make_release(version):
|
|||||||
proc = subprocess.Popen(['git','checkout', "-b", "release-" + RELEASE_VERSION], stdout = subprocess.PIPE, cwd = temp_dir.name)
|
proc = subprocess.Popen(['git','checkout', "-b", "release-" + RELEASE_VERSION], stdout = subprocess.PIPE, cwd = temp_dir.name)
|
||||||
proc.wait()
|
proc.wait()
|
||||||
|
|
||||||
proc = subprocess.Popen(['git','pull', "origin", "release-" + RELEASE_VERSION], stdout = subprocess.PIPE, cwd = temp_dir.name)
|
proc = subprocess.Popen(['git','pull', "origin", "release-" + RELEASE_VERSION, "--depth", "1"], stdout = subprocess.PIPE, cwd = temp_dir.name)
|
||||||
proc.wait()
|
proc.wait()
|
||||||
|
|
||||||
proc = subprocess.Popen(['git','log', "--oneline"], stdout = subprocess.PIPE, cwd = temp_dir.name)
|
proc = subprocess.Popen(['git','log', "--oneline"], stdout = subprocess.PIPE, cwd = temp_dir.name)
|
||||||
@@ -331,7 +331,7 @@ def make_release(version):
|
|||||||
while not(already_released):
|
while not(already_released):
|
||||||
|
|
||||||
print("git pull origin master...")
|
print("git pull origin master...")
|
||||||
proc = subprocess.Popen(['git','pull', "origin", "master"], stdout = subprocess.PIPE, cwd = temp_dir.name)
|
proc = subprocess.Popen(['git','pull', "origin", "master", "--depth", "1"], stdout = subprocess.PIPE, cwd = temp_dir.name)
|
||||||
proc.wait()
|
proc.wait()
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
for line in proc.stdout:
|
for line in proc.stdout:
|
||||||
|
|||||||
Reference in New Issue
Block a user