Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions .github/workflows/extra-builds.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
name: Test extra build flows

on: [push, pull_request]
on:
# always test main
push:
branches:
- main
# test PRs
pull_request:
# allow triggering tests, ignores skip check
workflow_dispatch:

jobs:
pre_job:
Expand All @@ -11,11 +19,11 @@ jobs:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
# don't run on documentation changes
paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
# cancel previous builds if a new commit is pushed
cancel_others: 'true'
# only run on push *or* pull_request, not both
concurrent_skipping: 'same_content_newer'
# but never cancel main
cancel_others: ${{ github.ref != 'refs/heads/main' }}

vs-prep:
name: Prepare Visual Studio build
Expand Down
44 changes: 24 additions & 20 deletions .github/workflows/test-build.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
name: Build and run tests

on: [push, pull_request]
on:
# always test main
push:
branches:
- main
# test PRs
pull_request:
# allow triggering tests, ignores skip check
workflow_dispatch:

jobs:
pre_job:
Expand All @@ -11,11 +19,12 @@ jobs:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
# don't run on documentation changes
paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
# cancel previous builds if a new commit is pushed
cancel_others: 'true'
# only run on push *or* pull_request, not both
concurrent_skipping: 'same_content_newer'
# but never cancel main
cancel_others: ${{ github.ref != 'refs/heads/main' }}

pre_docs_job:
runs-on: ubuntu-latest
outputs:
Expand All @@ -24,23 +33,23 @@ jobs:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
# don't run on readme changes
paths_ignore: '["**/README.md"]'
# cancel previous builds if a new commit is pushed
cancel_others: 'true'
# only run on push *or* pull_request, not both
concurrent_skipping: 'same_content_newer'
# but never cancel main
cancel_others: ${{ github.ref != 'refs/heads/main' }}

build-yosys:
name: Reusable build
runs-on: ${{ matrix.os }}
# pre_job is a subset of pre_docs_job, so we can always build for pre_docs_job
needs: pre_docs_job
if: needs.pre_docs_job.outputs.should_skip != 'true'
env:
CC: clang
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
sanitizer: [undefined, address]
fail-fast: false
steps:
- name: Checkout Yosys
Expand All @@ -58,7 +67,6 @@ jobs:
mkdir build
cd build
make -f ../Makefile config-$CC
echo 'SANITIZER = ${{ matrix.sanitizer }}' >> Makefile.conf
make -f ../Makefile -j$procs ENABLE_LTO=1

- name: Log yosys-config output
Expand All @@ -74,7 +82,7 @@ jobs:
- name: Store build artifact
uses: actions/upload-artifact@v4
with:
name: build-${{ matrix.os }}-${{ matrix.sanitizer }}
name: build-${{ matrix.os }}
path: build.tar
retention-days: 1

Expand All @@ -85,12 +93,9 @@ jobs:
if: needs.pre_job.outputs.should_skip != 'true'
env:
CC: clang
ASAN_OPTIONS: halt_on_error=1
UBSAN_OPTIONS: halt_on_error=1
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
sanitizer: [undefined, address]
fail-fast: false
steps:
- name: Checkout Yosys
Expand All @@ -102,11 +107,12 @@ jobs:
uses: ./.github/actions/setup-build-env

- name: Get iverilog
id: get-iverilog
shell: bash
run: |
git clone https://github.com/steveicarus/iverilog.git
cd iverilog
echo "IVERILOG_GIT=$(git rev-parse HEAD)" >> $GITHUB_ENV
echo "IVERILOG_GIT=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT

- name: Get vcd2fst
shell: bash
Expand All @@ -123,7 +129,7 @@ jobs:
uses: actions/cache@v4
with:
path: .local/
key: ${{ matrix.os }}-${IVERILOG_GIT}
key: ${{ matrix.os }}-${{ steps.get-iverilog.outputs.IVERILOG_GIT }}

- name: Build iverilog
if: steps.cache-iverilog.outputs.cache-hit != 'true'
Expand All @@ -139,7 +145,7 @@ jobs:
- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: build-${{ matrix.os }}-${{ matrix.sanitizer }}
name: build-${{ matrix.os }}

- name: Uncompress build
shell: bash
Expand Down Expand Up @@ -171,7 +177,6 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest]
sanitizer: [undefined]
steps:
- name: Checkout Yosys
uses: actions/checkout@v4
Expand All @@ -184,7 +189,7 @@ jobs:
- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: build-${{ matrix.os }}-${{ matrix.sanitizer }}
name: build-${{ matrix.os }}

- name: Uncompress build
shell: bash
Expand All @@ -209,7 +214,6 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest]
sanitizer: [undefined, address]
fail-fast: false
steps:
- name: Checkout Yosys
Expand All @@ -223,7 +227,7 @@ jobs:
- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: build-${{ matrix.os }}-${{ matrix.sanitizer }}
name: build-${{ matrix.os }}

- name: Uncompress build
shell: bash
Expand Down
16 changes: 12 additions & 4 deletions .github/workflows/test-compile.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
name: Compiler testing

on: [push, pull_request]
on:
# always test main
push:
branches:
- main
# test PRs
pull_request:
# allow triggering tests, ignores skip check
workflow_dispatch:

jobs:
pre_job:
Expand All @@ -11,11 +19,11 @@ jobs:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
# don't run on documentation changes
paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
# cancel previous builds if a new commit is pushed
cancel_others: 'true'
# only run on push *or* pull_request, not both
concurrent_skipping: 'same_content_newer'
# but never cancel main
cancel_others: ${{ github.ref != 'refs/heads/main' }}

test-compile:
runs-on: ${{ matrix.os }}
Expand Down
109 changes: 109 additions & 0 deletions .github/workflows/test-sanitizers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
name: Check clang sanitizers

on:
# always test main
push:
branches:
- main
# ignore PRs due to time needed
# allow triggering tests, ignores skip check
workflow_dispatch:

jobs:
pre_job:
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
# don't run on documentation changes
paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'

run_san:
name: Build and run tests
runs-on: ${{ matrix.os }}
needs: pre_job
if: needs.pre_job.outputs.should_skip != 'true'
env:
CC: clang
ASAN_OPTIONS: halt_on_error=1
UBSAN_OPTIONS: halt_on_error=1
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
sanitizer: ['undefined,address']
fail-fast: false
steps:
- name: Checkout Yosys
uses: actions/checkout@v4
with:
submodules: true
persist-credentials: false

- name: Setup environment
uses: ./.github/actions/setup-build-env

- name: Get iverilog
id: get-iverilog
shell: bash
run: |
git clone https://github.com/steveicarus/iverilog.git
cd iverilog
echo "IVERILOG_GIT=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT

- name: Get vcd2fst
shell: bash
run: |
git clone https://github.com/mmicko/libwave.git
mkdir -p ${{ github.workspace }}/.local/
cd libwave
cmake . -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/.local
make -j$procs
make install

- name: Cache iverilog
id: cache-iverilog
uses: actions/cache@v4
with:
path: .local/
key: ${{ matrix.os }}-${{ steps.get-iverilog.outputs.IVERILOG_GIT }}

- name: Build iverilog
if: steps.cache-iverilog.outputs.cache-hit != 'true'
shell: bash
run: |
mkdir -p ${{ github.workspace }}/.local/
cd iverilog
autoconf
CC=gcc CXX=g++ ./configure --prefix=${{ github.workspace }}/.local
make -j$procs
make install

- name: Check iverilog
shell: bash
run: |
iverilog -V

- name: Build
shell: bash
run: |
make config-$CC
echo 'SANITIZER = ${{ matrix.sanitizer }}' >> Makefile.conf
make -j$procs ENABLE_LTO=1

- name: Log yosys-config output
run: |
./yosys-config || true

- name: Run tests
shell: bash
run: |
make -j$procs test TARGETS= EXTRA_TARGETS= CONFIG=$CC

- name: Report errors
if: ${{ failure() }}
shell: bash
run: |
find tests/**/*.err -print -exec cat {} \;
16 changes: 12 additions & 4 deletions .github/workflows/test-verific.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
name: Build and run tests with Verific (Linux)

on: [push, pull_request]
on:
# always test main
push:
branches:
- main
# test PRs
pull_request:
# allow triggering tests, ignores skip check
workflow_dispatch:

jobs:
pre-job:
Expand All @@ -11,11 +19,11 @@ jobs:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
# don't run on documentation changes
paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
# cancel previous builds if a new commit is pushed
cancel_others: 'true'
# only run on push *or* pull_request, not both
concurrent_skipping: 'same_content_newer'
# but never cancel main
cancel_others: ${{ github.ref != 'refs/heads/main' }}

test-verific:
needs: pre-job
Expand Down
2 changes: 1 addition & 1 deletion passes/memory/memlib.cc
Original file line number Diff line number Diff line change
Expand Up @@ -878,7 +878,7 @@ struct Parser {
}
}
}
var.clk_en = find_single_cap(pdef.clken, cram.options, portopts, "clken");
var.clk_en = find_single_cap(pdef.clken, cram.options, portopts, "clken") != nullptr;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm morbidly curious why this change is required 🤔 Is something about how find_single_cap is declared interfering with the implicit conversion to bool?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The actual fix is assigning a default value to PortVariant::clk_en, this change was incidental while investigating but it made sense to me to leave it in since it helps with readability.

}
const PortWidthDef *wdef = find_single_cap(pdef.width, cram.options, portopts, "width");
if (wdef) {
Expand Down
2 changes: 1 addition & 1 deletion passes/memory/memlib.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ struct PortVariant {
PortKind kind;
int clk_shared;
ClkPolKind clk_pol;
bool clk_en;
bool clk_en = false;
bool width_tied;
int min_wr_wide_log2;
int max_wr_wide_log2;
Expand Down
Loading