Skip to content

Build LLVM binaries #107

Build LLVM binaries

Build LLVM binaries #107

Workflow file for this run

name: Build LLVM binaries
on:
schedule:
- cron: '0 0 1 * *' # every month to regenerate ccache
workflow_dispatch:
inputs:
ref:
description: "Git REF to use for the build"
required: false
type: string
build_macos_amd64:
description: "Build for MacOS amd64?"
required: false
type: boolean
default: true
build_macos_arm64:
description: "Build for MacOS arm64?"
required: false
type: boolean
default: true
build_linux_amd64:
description: "Build for Linux amd64?"
required: false
type: boolean
default: true
build_linux_arm64:
description: "Build for Linux arm64?"
required: false
type: boolean
default: true
build_windows_amd64:
description: "Build for Windows amd64?"
required: false
type: boolean
default: true
run_regression_tests:
description: "Run regression tests?"
required: false
type: boolean
default: false
run_integration_tests:
description: "Run integration tests?"
required: false
type: boolean
default: false
enable-valgrind:
required: false
default: false
type: boolean
description: 'Enable valgrind for regression tests?'
enable_assertions:
description: "Enable assertions?"
required: false
type: boolean
default: true
jobs:
prepare-matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.prepare-matrix.outputs.matrix }}
steps:
- name: Prepare matrix
id: prepare-matrix
run: |
# Define general matrix parameters
WINDOWS='{"name":"Windows-x86","runner":"windows-2019-github-hosted-64core"}'
MACOS_AMD64='{"name":"MacOS-x86","runner":"macos-12-large"}'
MACOS_ARM64='{"name":"MacOS-arm64","runner":["self-hosted","macOS","ARM64"]}'
LINUX_AMD64='{"name":"Linux-AMD64","runner":"matterlabs-ci-runner-high-performance","image":"ghcr.io/matter-labs/zksync-llvm-runner:latest"}'
LINUX_ARM64='{"name":"Linux-ARM64","runner":"matterlabs-ci-runner-arm","image":"ghcr.io/matter-labs/zksync-llvm-runner:latest"}'
# Disable platforms for non-tag builds if user requested
if [ ${GITHUB_EVENT_NAME} = workflow_dispatch ]; then
[ ${{ github.event.inputs.build_windows_amd64 }} != true ] && WINDOWS=
[ ${{ github.event.inputs.build_macos_amd64 }} != true ] && MACOS_AMD64=
[ ${{ github.event.inputs.build_macos_arm64 }} != true ] && MACOS_ARM64=
[ ${{ github.event.inputs.build_linux_amd64 }} != true ] && LINUX_AMD64=
[ ${{ github.event.inputs.build_linux_arm64 }} != true ] && LINUX_ARM64=
fi
PLATFORMS=(${WINDOWS} ${MACOS_AMD64} ${MACOS_ARM64} ${LINUX_AMD64} ${LINUX_ARM64})
echo "matrix={ \"include\": [ $(IFS=, ; echo "${PLATFORMS[*]}") ] }" | tee -a "${GITHUB_OUTPUT}"
integration-tests:
needs: prepare-matrix
uses: matter-labs/era-compiler-ci/.github/workflows/integration-tests.yaml@abalias-cpr-1396-run-compiler-tester-lit-tests-in-github-action-on-macos
secrets: inherit
if: ${{ inputs.run_integration_tests || github.event_name == 'schedule' }}
with:
ccache-key-type: 'static' # rotate ccache key every month
platforms-matrix: ${{ needs.prepare-matrix.outputs.matrix }}
llvm-ref: ${{ inputs.ref }}
target-machine: 'eravm' # TODO: add it to matrix in the step above
# build:
# needs: prepare-matrix
# strategy:
# fail-fast: false
# matrix: ${{ fromJson(needs.prepare-matrix.outputs.matrix) }}
# runs-on: ${{ matrix.runner }}
# container:
# image: ${{ matrix.image || '' }} # Special workaround to allow matrix builds with optional container
# name: ${{ matrix.name }}
# steps:
# - name: Checkout source
# uses: actions/checkout@v4
# with:
# ref: ${{ inputs.ref }}
# path: "llvm"
# - name: Prepare Windows env
# if: runner.os == 'Windows'
# uses: matter-labs/era-compiler-ci/.github/actions/prepare-msys@v1
# - name: Build LLVM
# uses: matter-labs/era-compiler-ci/.github/actions/build-llvm@v1
# with:
# enable-tests: true
# enable-assertions: ${{ inputs.enable_assertions }}
# clone-llvm: false
# ccache-key-type: 'static'
# save-ccache: ${{ matrix.name == 'Linux x86' }}
# enable-valgrind: ${{ inputs.enable-valgrind }}
# # Required to keep executable permissions for binaries
# - name: Prepare tarball
# run: tar -czf ${{ runner.os }}-${{ runner.arch }}-target-final.tar.gz ./target-llvm/target-final
# - name: Upload LLVM binaries
# uses: actions/upload-artifact@v4
# with:
# name: llvm-bins-${{ runner.os }}-${{ runner.arch }}
# path: ./${{ runner.os }}-${{ runner.arch }}-target-final.tar.gz
# # On Windows, run `llvm-lit` directly with xfail parameter
# # due to different incompatibilities in tests and MSYS2 environment
# - name: Lit tests (Windows)
# if: ${{ (inputs.run_regression_tests || github.event_name == 'schedule') && runner.os == 'Windows' }}
# shell: 'msys2 {0}'
# env:
# LLVM_XFAILS:
# "Object/archive-big-read.test;\
# Object/archive-extract.test;\
# Object/archive-toc.test;\
# TableGen/x86-fold-tables.td;\
# tools/llvm-ar/empty-uid-gid.test;\
# tools/llvm-cov/native_separators.c;\
# tools/llvm-libtool-darwin/deterministic-library.test;\
# tools/llvm-nm/invalid-tapi-files.test;\
# tools/llvm-nm/tapi-files.test;\
# tools/llvm-objcopy/ELF/deterministic-archive.test;\
# tools/llvm-ranlib/D-flag.test;\
# tools/llvm-tapi-diff/v5.test"
# LLD_XFAILS:
# "MachO/double-unwind-info.s;\
# MachO/error-limit.test;\
# MachO/local-private-extern.yaml"
# run: |
# ./target-llvm/build-final/bin/llvm-lit.py -sv ./target-llvm/build-final/test --xfail ${LLVM_XFAILS}
# ./target-llvm/build-final/bin/llvm-lit.py -sv ./target-llvm/build-final/tools/lld/test --xfail ${LLD_XFAILS}
# - name: Lit tests (MacOS/Linux)
# if: ${{ (inputs.run_regression_tests || github.event_name == 'schedule') && runner.os != 'Windows' }}
# run: ninja -C './target-llvm/build-final' verify-llvm -v
# - name: Send Slack notification
# uses: 8398a7/action-slack@v3
# if: failure() && github.event_name == 'schedule'
# with:
# status: ${{ job.status }}
# fields: repo,commit,author,action,eventName,ref,workflow,job,took
# env:
# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}