Skip to content

Add Makefile to hyperfine benchmarks #5839

Add Makefile to hyperfine benchmarks

Add Makefile to hyperfine benchmarks #5839

Workflow file for this run

name: Juvix Compiler CI
"on":
workflow_dispatch:
inputs:
ref:
description: the repository ref to build
required: true
default: main
hyperfine:
description: whether to run hyperfine benchmarks
required: false
default: false
push:
branches:
- main
pull_request:
branches:
- main
types:
- opened
- reopened
- synchronize
- ready_for_review
concurrency:
group: "${{ github.workflow }}-${{ github.head_ref || github.run_id }}"
cancel-in-progress: true
env:
SKIP: ormolu,format-juvix-files,typecheck-juvix-examples
VAMPIRREPO: anoma/vamp-ir
VAMPIRVERSION: v0.1.3
jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: "3.11"
- uses: pre-commit/[email protected]
ormolu:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: mrkkrp/ormolu-action@v11
with:
version: 0.5.3.0
extra-args: >-
--ghc-opt -XDerivingStrategies --ghc-opt -XImportQualifiedPost
--ghc-opt -XMultiParamTypeClasses --ghc-opt -XStandaloneDeriving
--ghc-opt -XTemplateHaskell --ghc-opt -XUnicodeSyntax
build-and-test-linux:
runs-on: ubuntu-22.04
steps:
- name: Checkout our repository
uses: actions/checkout@v3
with:
path: main
submodules: true
- name: Cache LLVM and Clang
id: cache-llvm
uses: actions/cache@v3
with:
path: |
C:/Program Files/LLVM
./llvm
key: "${{ runner.os }}-llvm-13"
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v1
with:
version: "13.0"
cached: "${{ steps.cache-llvm.outputs.cache-hit }}"
- name: Download and extract wasi-sysroot
run: >
curl
https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-15/wasi-sysroot-15.0.tar.gz
-OL
tar xfv wasi-sysroot-15.0.tar.gz
- name: Set WASI_SYSROOT_PATH
run: |
echo "WASI_SYSROOT_PATH=$GITHUB_WORKSPACE/wasi-sysroot" >> $GITHUB_ENV
- name: Add ~/.local/bin to PATH
run: |
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Install the latest Wasmer version
uses: jaxxstorm/[email protected]
with:
repo: wasmerio/wasmer
binaries-location: bin
chmod: 0755
- name: Install libs
run: sudo apt install -y libncurses5
- name: Install VampIR for testing
uses: jaxxstorm/[email protected]
with:
repo: ${{ env.VAMPIRREPO }}
platform: linux
tag: ${{ env.VAMPIRVERSION }}
chmod: 0755
rename-to: vamp-ir
- name: Test VampIR
shell: bash
run: |
vamp-ir --version
- name: Make runtime
run: |
cd main
make runtime
# We use the options:
# - -fhide-source-paths
# - -fwrite-ide-info -hiedir=.hie
# in package.yaml.
#
# If a previously available .hie directory is missing then GHC will rebuild the whole project.
# with reason: HIE file is missing. So we need to cache it.
- name: Cache .hie
id: cache-hie
uses: actions/cache@v3
with:
path: main/.hie
key: ${{ runner.os }}-stack-hie
- name: Stack setup
id: stack
uses: freckle/stack-action@v4
with:
working-directory: main
test: false
- name: Install and test Juvix
id: test
if: ${{ success() }}
run: |
cd main
make install
- name: Upload Juvix binary as artifact
uses: actions/upload-artifact@v3
with:
name: juvix-main-binary
path: |
/home/runner/.local/bin/juvix
hyperfine-benchmarks:
runs-on: ubuntu-22.04
needs: build-and-test-linux
steps:
- name: Checkout our repository
uses: actions/checkout@v3
with:
path: main
submodules: true
- name: Download Juvix binary
uses: actions/download-artifact@v3
with:
name: juvix-main-binary
- name: Test Juvix binary
run: |
juvix --version
# Install all the versions of Juvix we want to benchmark
- name: Install Juvix v0.4.3 for testing
uses: jaxxstorm/[email protected]
with:
repo: anoma/juvix
platform: linux
tag: v0.4.3
chmod: 0755
rename-to: juvix-v0.4.3
- name: Install Juvi v0.5.0 for testing
uses: jaxxstorm/[email protected]
with:
repo: anoma/juvix
platform: linux
tag: v0.5.0
chmod: 0755
rename-to: juvix-v0.5.0
- name: Install Juvix v0.5.1 for testing
uses: jaxxstorm/[email protected]
with:
repo: anoma/juvix
platform: linux
tag: v0.5.1
chmod: 0755
rename-to: juvix-v0.5.1
- name: Install Juvix v0.5.2 for testing
uses: jaxxstorm/[email protected]
with:
repo: anoma/juvix
platform: linux
tag: v0.5.2
chmod: 0755
rename-to: juvix-v0.5.2
- name: Install Juvix v0.5.3 for testing
uses: jaxxstorm/[email protected]
with:
repo: anoma/juvix
platform: linux
tag: v0.5.3
chmod: 0755
rename-to: juvix-v0.5.3
- name: Install Juvix v0.5.4 for testing
uses: jaxxstorm/[email protected]
with:
repo: anoma/juvix
platform: linux
tag: v0.5.4
chmod: 0755
rename-to: juvix-v0.5.4
- name: Run Hyperfine benchmarks
run: |
make hyperfine-benchmarks
- name: Show Hyperfine benchmark results
run: |
cat main/bench/hyperfine/README.md
- name: Upload Hyperfine benchmark results
uses: actions/upload-artifact@v3
with:
name: hyperfine-benchmarks-results
path: |
main/bench/hyperfine/README.md
build-and-test-macos:
runs-on: macos-12
steps:
- name: Checkout our repository
uses: actions/checkout@v3
with:
path: main