Adjust Synlig to recent Yosys changes #6051
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, gcp-custom-runners] | |
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, gcp-custom-runners] | |
container: bitnami/git:2.40.1-debian-11-r4 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
- name: Install dependencies | |
run: | | |
apt-get update -q | |
apt-get install -y git clang-format python3 jq | |
- name: Sources format check | |
run: | | |
./.github/scripts/format_sources.sh | |
if ! git diff --exit-code; then | |
echo | |
echo "Format locally using: ./.github/scripts/format_sources.sh" | |
echo | |
false | |
fi | |
- 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 Synlig Release' | |
artifact-name: 'binaries-release' | |
apt-extra-deps: 'gcc g++' | |
cc: 'gcc' | |
cxx: 'g++' | |
build-binaries-args: 'install install@surelog PREFIX=out' | |
submodules: 'third_party/yosys third_party/surelog' | |
- name: 'Build Plugin' | |
artifact-name: 'binaries-plugin' | |
cc: 'gcc' | |
cxx: 'g++' | |
apt-extra-deps: 'gcc g++' | |
build-binaries-args: 'install-plugin install@surelog PREFIX=out' | |
submodules: 'third_party/yosys third_party/surelog' | |
- name: 'Build Synlig (ASAN)' | |
artifact-name: 'binaries-asan' | |
cc: 'clang-15' | |
cxx: 'clang++-15' | |
apt-extra-deps: 'clang-15' | |
build-binaries-args: 'install@surelog install@asan PREFIX=out' | |
submodules: 'third_party/yosys third_party/surelog' | |
- name: 'Build Package' | |
artifact-name: 'binaries-package' | |
apt-extra-deps: 'gcc g++' | |
cc: 'gcc' | |
cxx: 'g++' | |
build-binaries-args: 'install PREFIX=out' | |
submodules: 'third_party/yosys third_party/surelog' | |
- name: 'Build PySynlig' | |
artifact-name: 'binaries-pysynlig' | |
apt-extra-deps: 'gcc g++' | |
cc: 'gcc' | |
cxx: 'g++' | |
build-binaries-args: 'install@surelog install@pysynlig PREFIX=out' | |
submodules: 'third_party/yosys third_party/surelog third_party/pybind11' | |
name: ${{ matrix.name }} | |
runs-on: [self-hosted, Linux, X64, gcp-custom-runners] | |
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: Set up common configuration | |
run: | | |
./.github/scripts/set-up-common-debian-configuration.sh | |
./.github/scripts/set-up-common-git-configuration.sh | |
- 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 sync | |
git submodule update --depth 1 --init --recursive --checkout \ | |
${{ matrix.submodules }} \ | |
; | |
- 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 -j $(nproc) ${BUILD_BINARIES_ARGS} | |
# By default actions/upload-artifact@v4 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@v4 | |
with: | |
name: ${{ matrix.artifact-name }} | |
path: | | |
${{ matrix.artifact-name }}.tar | |
- name: Upload load graphs | |
if: ${{ !cancelled() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: plots_${{ matrix.artifact-name }} | |
path: | | |
**/plot_*.svg | |
build-tools: | |
name: Build tools | |
runs-on: [self-hosted, Linux, X64, gcp-custom-runners] | |
container: debian:bookworm | |
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 Debian configuration | |
run: | | |
./.github/scripts/set-up-common-debian-configuration.sh | |
./.github/scripts/set-up-common-git-configuration.sh | |
- name: Install dependencies | |
run: | | |
apt-get update -q | |
apt-get install -y \ | |
ant \ | |
bison \ | |
build-essential \ | |
ccache \ | |
cmake \ | |
default-jre \ | |
flex \ | |
git \ | |
gcc \ | |
g++ \ | |
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 \ | |
; | |
- name: Checkout submodules | |
run: | | |
git submodule sync | |
git submodule update --depth 1 --init --recursive --checkout \ | |
third_party/sv2v \ | |
third_party/yosys \ | |
; | |
- name: Build sv2v | |
run: | | |
export PATH=$PWD/install/bin:/usr/local/bin:${PATH} | |
wget -qO- https://get.haskellstack.org/ | sh -s - -f -d /usr/local/bin | |
make install@sv2v -j $(nproc) PREFIX=out | |
- name: Build tools | |
run: | | |
make install@yosys-tools -j $(nproc) PREFIX=out | |
- name: Pack tools | |
run: | | |
tar -cvf tools.tar out | |
- name: Upload binaries | |
uses: actions/upload-artifact@v4 | |
with: | |
name: tools | |
path: | | |
tools.tar | |
- name: Upload load graphs | |
if: ${{ !cancelled() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: plots_build_tools | |
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-tools | |
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: | |
permissions: | |
contents: write | |
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@v4 | |
with: | |
name: binaries-package | |
# See https://github.com/actions/upload-artifact/issues/38 | |
- name: Extract | |
run: | | |
tar -xf binaries-package.tar | |
- name: Prepare tarball | |
run: | | |
mkdir synlig | |
cp out/bin/synlig synlig/ | |
cp -r out/share/synlig synlig/share | |
tar -zcvf release.tar.gz synlig | |
- name: Name 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 | |
# 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 | |
mv release.tar.gz $FULL_TARBALL | |
tar -tvf $FULL_TARBALL | |
- 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 | |
verify-README: | |
name: Verify README Correctness (Installation From Sources) | |
runs-on: [self-hosted, Linux, X64, gcp-custom-runners] | |
container: debian:bookworm | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
PIPX_BIN_DIR: /usr/local/bin | |
steps: | |
- name: Prepare Repository | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 1 | |
- name: Install Prerequisites | |
run: | | |
apt update -qq | |
apt install -y --no-install-recommends pipx git wget | |
pipx install git+https://github.com/antmicro/tuttest#egg=tuttest | |
- name: Install Dependencies | |
run: | | |
set -o pipefail | |
tuttest README.md install-dependencies | bash -eo pipefail - | |
- name: Test Synlig Installation | |
run: | | |
set -o pipefail | |
tuttest README.md make-install | bash -eo pipefail - | |
- name: Test Tools Installation | |
run: | | |
set -o pipefail | |
tuttest README.md get-haskell | bash -eo pipefail - | |
tuttest README.md install-tools | bash -eo pipefail - | |
- name: Test counter.sv Synthesis | |
run: | | |
set -o pipefail | |
tuttest README.md counter.sv > counter.sv | |
tuttest README.md synthesis-example | grep ">" | cut -d ">" -f 2 | synlig | |
- name: Test Parsing Multiple Files | |
run: | | |
set -o pipefail | |
tuttest README.md example-multiple-files | synlig | |
- name: Test Testing Scripts Commands | |
run: | | |
set -o pipefail | |
tuttest README.md formal-verification-help | bash -eo pipefail - | |
tuttest README.md large-designs-help | bash -eo pipefail - | |
tuttest README.md parsing-tests-help | bash -eo pipefail - | |
test-package: | |
name: Verify README Correctness (Download And Run Release) | |
needs: release | |
runs-on: [self-hosted, Linux, X64, gcp-custom-runners] | |
container: debian:bookworm | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
PIPX_BIN_DIR: /usr/local/bin | |
steps: | |
- name: Prepare Repository | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 1 | |
- name: Install Prerequisites | |
run: | | |
apt update -qq | |
apt install -y --no-install-recommends pipx git wget | |
pipx install git+https://github.com/antmicro/tuttest#egg=tuttest | |
- name: Install Dependencies | |
run: | | |
set -o pipefail | |
tuttest README.md install-dependencies-package | bash -eo pipefail - | |
- name: Download Release, Set PATH and Test counter.sv Synthesis | |
run: | | |
set -o pipefail | |
tuttest README.md download-release | bash -eo pipefail - | |
eval $(tuttest README.md path-setup) | |
tuttest README.md counter.sv > counter.sv | |
tuttest README.md synthesis-example | grep ">" | cut -d ">" -f 2 | synlig |