Skip to content

New build setup

New build setup #4920

Workflow file for this run

name: 'main'
run-name: ${{ github.event_name == 'workflow_dispatch' && github.ref_name || '' }}
on:
workflow_dispatch:
push:
branches:
- main
pull_request:
concurrency:
group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
GHA_CUSTOM_LINE_PREFIX: "▌"
jobs:
emit-workflow-info:
name: Emit Workflow Info
if: ${{ github.event_name == 'workflow_dispatch' }}
runs-on: [self-hosted, Linux, X64]
container: 'bitnami/git:2.40.1-debian-11-r4'
steps:
- uses: actions/checkout@v3
with:
submodules: false
fetch-depth: 1
style-check:
name: Style check
runs-on: [self-hosted, Linux, X64]
container: bitnami/git:2.40.1-debian-11-r4
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Sort check
run: |
./.github/scripts/sort_passlists.sh
if ! git diff --exit-code; then
echo
echo "Sort locally using: ./.github/scripts/sort_passlists.sh"
echo
false
fi
build-binaries:
strategy:
matrix:
include:
- name: 'Build Binaries'
artifact-name: 'binaries'
cc: 'gcc'
cxx: 'g++'
apt-extra-deps: 'gcc g++'
build-binaries-args: ''
- name: 'Build Binaries (ASAN)'
artifact-name: 'binaries-asan'
cc: 'clang-15'
cxx: 'clang++-15'
apt-extra-deps: 'clang-15'
build-binaries-args: 'ENABLE_ASAN:=1'
name: ${{ matrix.name }}
runs-on: [self-hosted, Linux, X64]
container: debian:bookworm
env:
CC: ${{ matrix.cc }}
CXX: ${{ matrix.cxx }}
BUILD_BINARIES_ARGS: ${{ matrix.build-binaries-args }}
CCACHE_DIR: "${{ github.workspace }}/.cache/"
DEBIAN_FRONTEND: noninteractive
GHA_MACHINE_TYPE: "n2-highmem-8"
steps:
- uses: actions/checkout@v3
with:
submodules: false
fetch-depth: 1
- name: Install dependencies
run: |
apt-get update -q
apt-get install -y \
ant \
bison \
build-essential \
ccache \
cmake \
default-jre \
flex \
git \
google-perftools \
libffi-dev \
libfl-dev \
libgoogle-perftools-dev \
libreadline-dev \
pkg-config \
python3 \
python3-dev \
python3-pip \
python3-orderedmultidict \
swig \
tcl-dev \
tclsh \
uuid \
uuid-dev \
wget \
${{ matrix.apt-extra-deps }} \
;
- name: Checkout submodules
run: |
git submodule update --depth 1 --init --recursive \
third_party/{surelog,yosys} \
;
- name: Setup cache
uses: actions/cache@v2
with:
path: ${{ env.CCACHE_DIR }}
key: cache_${{ matrix.artifact-name }}_${{ github.run_id }}
restore-keys: cache_${{ matrix.artifact-name }}_
- name: Build binaries
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
make -rR -j$(nproc) -Oline -f build_binaries.mk ${BUILD_BINARIES_ARGS} \
install-surelog install-yosys install-plugin
# By default actions/upload-artifact@v2 do not preserve file permissions
# tar directory to workaround this issue
# See https://github.com/actions/upload-artifact/issues/38
tar -cvf ${{ matrix.artifact-name }}.tar out
- name: Upload binaries
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.artifact-name }}
path: |
${{ matrix.artifact-name }}.tar
- name: Upload load graphs
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v2
with:
name: plots
path: |
**/plot_*.svg
build-sv2v:
name: Build sv2v
runs-on: [self-hosted, Linux, X64]
container: ubuntu:jammy
env:
DEBIAN_FRONTEND: noninteractive
GHA_MACHINE_TYPE: "n2-standard-4"
steps:
- uses: actions/checkout@v3
with:
submodules: false
fetch-depth: 1
- name: Set up common Ubuntu configuration
run: ./.github/scripts/set-up-common-ubuntu-configuration.sh
- name: Install dependencies
run: |
apt-get update -q
apt-get install -y \
git \
wget \
;
- name: 'Read submodule revisions'
id: rev
run: |
CACHE_HASH_LENGTH=20
repo_hash="$(git submodule status third_party/sv2v)"
# Skip first character which is ' ' or '+'
repo_hash="${repo_hash:1:$CACHE_HASH_LENGTH}"
printf '::set-output name=%s::%s\n' 'sv2v-submodule-rev' "${repo_hash}"
- name: Try restoring build results from cache
id: cache-restore
uses: actions/cache/restore@v3
with:
path: image/bin/sv2v
key: sv2v@${{ steps.rev.outputs.sv2v-submodule-rev }}
- name: Checkout submodules
if: ${{ steps.cache-restore.outputs.cache-hit != 'true' }}
run: |
git submodule update --depth 1 --init --recursive \
third_party/sv2v \
;
- name: Build binaries
if: ${{ steps.cache-restore.outputs.cache-hit != 'true' }}
run: |
mkdir -p $PWD/image/bin
export PATH=$PWD/install/bin:/usr/local/bin:${PATH}
wget -qO- https://get.haskellstack.org/ | sh -s - -f -d /usr/local/bin
make -j$(nproc) -C $PWD/third_party/sv2v
- name: Upload binaries
uses: actions/upload-artifact@v2
with:
name: sv2v
path: |
image/bin/sv2v
- name: Save build results to cache
if: ${{ steps.cache-restore.outputs.cache-hit != 'true' && ! (failure() || cancelled()) }}
uses: actions/cache/save@v3
with:
path: image/bin/sv2v
key: ${{ steps.cache-restore.outputs.cache-primary-key }}
- name: Upload load graphs
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v2
with:
name: plots
path: |
**/plot_*.svg
tests-parsing:
name: Parsing Tests
uses: ./.github/workflows/parsing-tests.yml
secrets:
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
permissions:
pull-requests: write
needs: build-binaries
tests-formal-verification:
name: Formal Verification Tests
uses: ./.github/workflows/formal-verification.yml
needs:
- build-binaries
- build-sv2v
tests-bsg-micro-designs-diff:
name: Diff generated BSG Micro Designs tests
uses: ./.github/workflows/bsg-test-diff.yml
needs:
- build-binaries
tests-large-designs:
name: Large Designs Tests
uses: ./.github/workflows/large-designs.yml
needs: build-binaries
release:
name: Release Package
needs:
- build-binaries
- tests-parsing
- tests-formal-verification
- tests-large-designs
runs-on: ubuntu-22.04
if: ${{github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')}}
steps:
- uses: actions/checkout@v2
with:
# Download complete repository + tags
fetch-depth: 0
- name: Download artifacts
uses: actions/download-artifact@v2
with:
name: binaries
# See https://github.com/actions/upload-artifact/issues/38
- name: Extract
run: tar -xf binaries.tar
- name: Generate tarball and apply TAG
run: |
GIT_VERSION=${GIT_VERSION:-$(git rev-parse --short "$GITHUB_SHA")}
DATE=$(git show -s --date=short --format=%cd)
FULL_TARBALL=synlig-$GIT_VERSION-$DATE.tar.gz
PLUGIN_TARBALL=synlig-plugin-$GIT_VERSION-$DATE.tar.gz
# Create a tag of form 2021-12-06-ad2466e
TAG="${TAG:-$(git show -s --date=short --format=%cd-%h)}"
git tag "$TAG" || true
echo "TAG=$TAG" >> $GITHUB_ENV
ls -lah out
tar -zcvf $FULL_TARBALL out
tar -zcvf $PLUGIN_TARBALL out/share/yosys/plugins/systemverilog.so install_plugin.sh
- name: Get PR data
uses: 8BitJonny/[email protected]
with:
sha: ${{ github.event.pull_request.head.sha }}
id: release_pr
- name: Deploy release
env:
RELEASE_NAME: >
${{ steps.release_pr.outputs.pr_found == 'true'
&&
format('{0}: #{1}: {2}',
env.TAG,
steps.release_pr.outputs.number,
steps.release_pr.outputs.pr_title)
||
env.TAG }}
RELEASE_BODY: >
${{ steps.release_pr.outputs.pr_found == 'true'
&&
steps.release_pr.outputs.pr_body
||
'' }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: synlig-*.tar.gz
tag: ${{ env.TAG }}
release_name: ${{ env.RELEASE_NAME }}
body: ${{ env.RELEASE_BODY }}
overwrite: true
file_glob: true
install-plugin:
name: Release Package Installation Test
runs-on: [self-hosted, Linux, X64]
container: debian:latest
needs: release
env:
DEBIAN_FRONTEND: noninteractive
GHA_MACHINE_TYPE: "n2-standard-2"
steps:
- name: Install Yosys and dependencies
run: |
apt-get update -q
apt-get upgrade -y
apt-get install -y \
curl \
jq \
libreadline-dev \
wget \
yosys \
yosys-dev \
;
- name: Download and extract UHDM plugin
run: |
curl https://api.github.com/repos/chipsalliance/synlig/releases/latest -L | jq .assets[1] | grep "browser_download_url" | grep -Eo 'https://[^\"]*' | xargs wget -O - | tar -xz
- name: Install it
run: |
./install_plugin.sh
- name: Run Yosys and load SystemVerilog plugin
run: yosys -p "plugin -i systemverilog"
# needed for test linting
upload-event-file:
name: Upload GHA event file
runs-on: ubuntu-latest
steps:
- run: cp "$GITHUB_EVENT_PATH" ./event.json
- name: Upload event file as artifact
uses: actions/upload-artifact@v2
with:
name: event.json
path: event.json