| name: Create Release |
| |
| # Trigger whenever a tag is created/updated |
| |
| on: |
| push: |
| tags: |
| - "*" |
| branches: |
| - noalpine |
| workflow_dispatch: |
| |
| permissions: |
| contents: write |
| |
| jobs: |
| build: |
| name: build |
| runs-on: ${{ matrix.os }} |
| strategy: |
| matrix: |
| os: [macos-latest, windows-latest] |
| 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: matrix.os == 'windows-latest' |
| |
| - 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: 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: matrix.os != 'windows-latest' |
| |
| - 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 |
| |
| - name: archive-arm64 |
| id: archive-arm64 |
| run: | |
| OSNAME=$(echo ${{ matrix.os }} | sed 's/-latest//') |
| 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' |
| |
| # - 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-linux: |
| name: Linux |
| 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: install packages |
| run: | |
| sudo apt-get install ninja-build clang lld |
| |
| - name: install python dev dependencies |
| run: pip3 install -r requirements-dev.txt |
| |
| - name: download sysroot |
| run: | |
| wget https://wasm.storage.googleapis.com/sysroot_debian_stretch_amd64_v2.tar.xz |
| mkdir sysroot && tar xaf sysroot_debian_stretch_amd64_v2.tar.xz -C sysroot |
| |
| - name: cmake |
| run: | |
| cmake . -G Ninja -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_AR=llvm-ar -DCMAKE_SYSROOT=$(pwd)/sysroot -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIB=ON -DCMAKE_INSTALL_PREFIX=install -DBYN_ENABLE_LTO=ON |
| |
| - name: build |
| run: | |
| ninja install |
| |
| - name: test |
| run: python3 ./check.py |
| |
| - name: archive |
| id: archive |
| run: | |
| VERSION=$GITHUB_REF_NAME |
| ARCH=$(uname -m) |
| PKGNAME="binaryen-$VERSION-$ARCH-linux" |
| TARBALL=$PKGNAME.tar.gz |
| SHASUM=$PKGNAME.tar.gz.sha256 |
| 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 }} |