name: 'Setup various CI dependencies'
description: 'Setup Rust target and necessary dependencies for WASI compilation'
inputs:
target:
description: 'rust target being set up'
required: true
emscripten_sdk:
description: 'emsdk version to install'
default: latest
wasi_sdk:
description: 'wasi-sdk version to install'
default: 32
wasmtime:
description: 'wasmtime version to install'
default: v43.0.0
runs:
using: composite
steps:
- uses: dtolnay/rust-toolchain@stable
with:
target: ${{ inputs.target }}
- run: echo "CARGO_BUILD_TARGET=${{ matrix.target }}" >> $GITHUB_ENV
shell: bash
- name: Install GCC (x86_64-unknown-linux-musl)
if: ${{ inputs.target == 'x86_64-unknown-linux-musl' }}
run: |
sudo apt-get update -y
sudo apt-get install -y --no-install-recommends musl-dev musl-tools
shell: bash
- name: Install GCC (i686-unknown-linux-gnu)
if: ${{ inputs.target == 'i686-unknown-linux-gnu' }}
run: |
sudo apt-get update -y
sudo apt-get install -y --no-install-recommends gcc-multilib
shell: bash
- name: Install GCC (aarch64-unknown-linux-gnu)
if: ${{ inputs.target == 'aarch64-unknown-linux-gnu' }}
run: |
sudo apt-get update -y
sudo apt-get install -y --no-install-recommends gcc-aarch64-linux-gnu libc6-dev-arm64-cross
shell: bash
- name: Install GCC (arm-unknown-linux-gnueabi)
if: ${{ inputs.target == 'arm-unknown-linux-gnueabi' }}
run: |
sudo apt-get update -y
sudo apt-get install -y --no-install-recommends gcc-arm-linux-gnueabi libc6-dev-armel-cross
shell: bash
- name: Install GCC (x86_64-pc-windows-gnu)
if: ${{ inputs.target == 'x86_64-pc-windows-gnu' }}
run: |
sudo apt-get update -y
sudo apt-get install -y --no-install-recommends gcc-mingw-w64-x86-64
shell: bash
- name: Install emscripten (wasm32-unknown-emscripten)
if: ${{ inputs.target == 'wasm32-unknown-emscripten' }}
run: |
EM_CONFIG=$HOME/emsdk/.emscripten
echo "EM_CONFIG=$EM_CONFIG" >> $GITHUB_ENV
curl -L -o ~/emsdk-main.tar.gz https://github.com/emscripten-core/emsdk/archive/main.tar.gz
tar -C ~ -xf ~/emsdk-main.tar.gz
mv ~/emsdk-main ~/emsdk
cd ~/emsdk
./emsdk install ${{ inputs.emscripten_sdk }}
./emsdk activate ${{ inputs.emscripten_sdk }}
source ./emsdk_env.sh
echo "EMSDK=$EMSDK" >> $GITHUB_ENV
echo "EMSDK_NODE=$EMSDK_NODE" >> $GITHUB_ENV
echo "CC_wasm32_unknown_emscripten=$EMSDK/upstream/emscripten/emcc" >> $GITHUB_ENV
echo "CXX_wasm32_unknown_emscripten=$EMSDK/upstream/emscripten/em++" >> $GITHUB_ENV
echo "AR_wasm32_unknown_emscripten=$EMSDK/upstream/emscripten/emar" >> $GITHUB_ENV
echo "CARGO_TARGET_WASM32_UNKNOWN_EMSCRIPTEN_LINKER=$EMSDK/upstream/emscripten/emcc" >> $GITHUB_ENV
echo "CARGO_TARGET_WASM32_UNKNOWN_EMSCRIPTEN_RUNNER=$EMSDK_NODE" >> $GITHUB_ENV
shell: bash
- name: Install wasi-sdk/Wasmtime (wasm32-wasip2)
if: ${{ inputs.target == 'wasm32-wasip2' }}
working-directory: ${{ runner.tool_cache }}
run: |
curl -LO https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${{ inputs.wasi_sdk }}/wasi-sdk-${{ inputs.wasi_sdk }}.0-x86_64-linux.tar.gz
tar xf wasi-sdk-${{ inputs.wasi_sdk }}.0-x86_64-linux.tar.gz
WASI_SDK_PATH=`pwd`/wasi-sdk-${{ inputs.wasi_sdk }}.0-x86_64-linux
echo "WASI_SDK_PATH=$WASI_SDK_PATH" >> $GITHUB_ENV
echo "CC_wasm32_wasip2=$WASI_SDK_PATH/bin/clang" >> $GITHUB_ENV
echo "CARGO_TARGET_WASM32_WASIP2_LINKER=$WASI_SDK_PATH/bin/clang" >> $GITHUB_ENV
echo "CARGO_TARGET_WASM32_WASIP2_RUSTFLAGS=-Clink-arg=-Wl,--export=cabi_realloc" >> $GITHUB_ENV
curl -LO https://github.com/bytecodealliance/wasmtime/releases/download/${{ inputs.wasmtime }}/wasmtime-${{ inputs.wasmtime }}-x86_64-linux.tar.xz
tar xf wasmtime-${{ inputs.wasmtime }}-x86_64-linux.tar.xz
echo "CARGO_TARGET_WASM32_WASIP2_RUNNER=`pwd`/wasmtime-${{ inputs.wasmtime }}-x86_64-linux/wasmtime -W exceptions" >> $GITHUB_ENV
shell: bash