Skip to content

use sysroot, llvm-ar #53

use sysroot, llvm-ar

use sysroot, llvm-ar #53

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
tar xaf sysroot_debian_stretch_amd64_v2.tar.xz
- name: cmake
run: |
cmake . -G Ninja -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_AR=llvm-ar -DCMAKE_SYSROOT=$(pwd)/sysroot_debian_stretch_amd64_v2 -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 }}