| name: Create Release |
| |
| # Trigger whenever a tag is created/updated |
| |
| on: |
| push: |
| tags: |
| - "*" |
| |
| permissions: |
| contents: write |
| |
| jobs: |
| build: |
| name: build |
| runs-on: ${{ matrix.os }} |
| strategy: |
| matrix: |
| os: [macos-latest, windows-latest, windows-11-arm] |
| defaults: |
| run: |
| shell: bash |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| submodules: true |
| |
| - name: install ninja (macos) |
| run: brew install ninja |
| if: matrix.os == 'macos-latest' |
| |
| - name: install ninja (win) |
| run: choco install ninja |
| if: startsWith(matrix.os, 'windows') |
| |
| - name: mkdir |
| run: mkdir -p out |
| |
| - name: cmake (macos) |
| run: | |
| cmake -S . -B out -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=out/install -DCMAKE_OSX_ARCHITECTURES=x86_64 |
| cmake -S . -B out-arm64 -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=out-arm64/install -DCMAKE_OSX_ARCHITECTURES=arm64 |
| if: matrix.os == 'macos-latest' |
| |
| - name: cmake (win) |
| # -G "Visual Studio 15 2017" |
| run: cmake -S . -B out -DCMAKE_INSTALL_PREFIX=out/install |
| if: matrix.os == 'windows-latest' |
| |
| - name: cmake (win arm64) |
| # -G "Visual Studio 15 2017" |
| run: cmake -S . -B out -DCMAKE_INSTALL_PREFIX=out-arm64/install |
| if: matrix.os == 'windows-11-arm' |
| |
| - name: build |
| run: cmake --build out -v --config Release --target install |
| |
| - name: build-arm64 |
| run: cmake --build out-arm64 -v --config Release --target install |
| if: matrix.os == 'macos-latest' |
| |
| - name: strip |
| run: find out*/install/ -type f -perm -u=x -exec strip -x {} + |
| if: ${{ !startsWith(matrix.os, 'windows') }} |
| |
| - name: archive |
| id: archive |
| run: | |
| OSNAME=$(echo ${{ matrix.os }} | sed 's/-latest//') |
| VERSION=$GITHUB_REF_NAME |
| PKGNAME="binaryen-$VERSION-x86_64-$OSNAME" |
| TARBALL=$PKGNAME.tar.gz |
| SHASUM=$PKGNAME.tar.gz.sha256 |
| rm -rf binaryen-$VERSION |
| mv out/install binaryen-$VERSION |
| tar -czf $TARBALL binaryen-$VERSION |
| # on Windows, MSYS2 will strip the carriage return from CMake output |
| cmake -E sha256sum $TARBALL > $SHASUM |
| echo "TARBALL=$TARBALL" >> $GITHUB_OUTPUT |
| echo "SHASUM=$SHASUM" >> $GITHUB_OUTPUT |
| if: matrix.os != 'windows-11-arm' |
| |
| - name: archive-arm64 |
| id: archive-arm64 |
| run: | |
| OSNAME=$(echo ${{ matrix.os }} | sed 's/-latest//' | sed 's/-11-arm//') |
| VERSION=$GITHUB_REF_NAME |
| PKGNAME="binaryen-$VERSION-arm64-$OSNAME" |
| TARBALL=$PKGNAME.tar.gz |
| SHASUM=$PKGNAME.tar.gz.sha256 |
| rm -rf binaryen-$VERSION |
| mv out-arm64/install binaryen-$VERSION |
| tar -czf $TARBALL binaryen-$VERSION |
| # on Windows, MSYS2 will strip the carriage return from CMake output |
| cmake -E sha256sum $TARBALL > $SHASUM |
| echo "TARBALL=$TARBALL" >> $GITHUB_OUTPUT |
| echo "SHASUM=$SHASUM" >> $GITHUB_OUTPUT |
| if: ${{ matrix.os == 'macos-latest' || matrix.os == 'windows-11-arm' }} |
| |
| - name: upload tarball |
| uses: softprops/action-gh-release@v1 |
| with: |
| draft: true |
| files: | |
| ${{ steps.archive.outputs.TARBALL }} |
| ${{ steps.archive.outputs.SHASUM }} |
| ${{ steps.archive-arm64.outputs.TARBALL }} |
| ${{ steps.archive-arm64.outputs.SHASUM }} |
| |
| # Build with gcc 6.3 and run tests on Alpine Linux (inside chroot). |
| # Note: Alpine uses musl libc. |
| build-alpine: |
| name: alpine |
| runs-on: ${{ matrix.os }} |
| strategy: |
| matrix: |
| os: [ubuntu-latest, ubuntu-24.04-arm] |
| steps: |
| - uses: actions/setup-python@v5 |
| with: |
| python-version: '3.x' |
| - uses: actions/checkout@v4 |
| with: |
| submodules: true |
| |
| - name: start docker |
| run: | |
| if [[ "${{ matrix.docker_platform }}" == "ubuntu-24.04-arm" ]]; then |
| platform="--platform=linux/arm64" |
| fi |
| docker run -w /src -dit $platform --name alpine -v $PWD:/src node:lts-alpine |
| echo 'docker exec alpine "$@";' > ./alpine.sh |
| chmod +x ./alpine.sh |
| |
| - name: install packages |
| run: | |
| ./alpine.sh apk update |
| ./alpine.sh apk add build-base cmake git python3 py3-pip clang ninja util-linux |
| |
| - name: avoid d8 tests (jsvu is not compatible with alpine) |
| run: | |
| ./alpine.sh rm -Rf test/lit/d8 |
| |
| - name: install python dev dependencies |
| run: ./alpine.sh pip3 install --break-system-packages -r requirements-dev.txt |
| |
| - name: cmake |
| run: | |
| ./alpine.sh cmake . -G Ninja -DCMAKE_CXX_FLAGS="-static" -DCMAKE_C_FLAGS="-static" -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIB=ON -DBUILD_MIMALLOC=ON -DCMAKE_INSTALL_PREFIX=install |
| |
| - name: build |
| run: | |
| ./alpine.sh ninja install |
| |
| - name: test |
| run: ./alpine.sh python3 ./check.py |
| |
| - name: archive |
| id: archive |
| run: | |
| VERSION=$GITHUB_REF_NAME |
| ARCH=$(./alpine.sh uname -m) |
| PKGNAME="binaryen-$VERSION-$ARCH-linux" |
| TARBALL=$PKGNAME.tar.gz |
| SHASUM=$PKGNAME.tar.gz.sha256 |
| ./alpine.sh find install/ -type f -perm -u=x -exec strip {} + |
| mv install binaryen-$VERSION |
| tar -czf $TARBALL binaryen-$VERSION |
| cmake -E sha256sum $TARBALL > $SHASUM |
| echo "TARBALL=$TARBALL" >> $GITHUB_OUTPUT |
| echo "SHASUM=$SHASUM" >> $GITHUB_OUTPUT |
| |
| - name: upload tarball |
| uses: softprops/action-gh-release@v1 |
| with: |
| draft: true |
| files: | |
| ${{ steps.archive.outputs.TARBALL }} |
| ${{ steps.archive.outputs.SHASUM }} |
| |
| # Build using Emscripten to JavaScript+WebAssembly. |
| build-node: |
| name: node |
| runs-on: ubuntu-latest |
| defaults: |
| run: |
| shell: bash |
| steps: |
| - uses: actions/setup-python@v5 |
| with: |
| python-version: '3.x' |
| - uses: actions/checkout@v1 |
| with: |
| submodules: true |
| - name: install ninja |
| run: sudo apt-get install ninja-build |
| - name: emsdk install |
| run: | |
| mkdir $HOME/emsdk |
| git clone --depth 1 https://github.com/emscripten-core/emsdk.git $HOME/emsdk |
| $HOME/emsdk/emsdk update-tags |
| $HOME/emsdk/emsdk install tot |
| $HOME/emsdk/emsdk activate tot |
| - name: update path |
| run: echo "PATH=$PATH:$HOME/emsdk" >> $GITHUB_ENV |
| |
| # Configure with wasm EH and pthreads for maximal performance. |
| - name: cmake |
| run: | |
| source $HOME/emsdk/emsdk_env.sh |
| emcmake cmake -S . -B out -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=out/install -DEMSCRIPTEN_ENABLE_WASM_EH=ON -DEMSCRIPTEN_ENABLE_PTHREADS=ON |
| |
| # Build wasm-opt for now TODO add other tools as desired |
| - name: build |
| run: ninja -C out wasm-opt |
| |
| # Minimal smoke test: roundtrip a file. |
| # TODO: Add more testing here, but the full test suite is overkill as there |
| # is a 0.5 second cost to each run of wasm-opt.js |
| - name: test |
| run: | |
| node out/bin/wasm-opt.js test/hello_world.wat --print > out/t.wat |
| diff test/hello_world.wat out/t.wat |
| |
| - name: archive |
| id: archive |
| run: | |
| VERSION=$GITHUB_REF_NAME |
| PKGNAME="binaryen-$VERSION-node" |
| TARBALL=$PKGNAME.tar.gz |
| SHASUM=$PKGNAME.tar.gz.sha256 |
| mkdir binaryen-$VERSION |
| cp out/bin/wasm-opt* binaryen-$VERSION/ |
| tar -czf $TARBALL binaryen-$VERSION |
| cmake -E sha256sum $TARBALL > $SHASUM |
| echo "TARBALL=$TARBALL" >> $GITHUB_OUTPUT |
| echo "SHASUM=$SHASUM" >> $GITHUB_OUTPUT |
| |
| - name: upload tarball |
| uses: softprops/action-gh-release@v1 |
| with: |
| draft: true |
| files: | |
| ${{ steps.archive.outputs.TARBALL }} |
| ${{ steps.archive.outputs.SHASUM }} |