Skip to content

Commit 7109dff

Browse files
committed
Add CI to run cases with Verilator
1 parent 033e7ef commit 7109dff

File tree

2 files changed

+119
-2
lines changed

2 files changed

+119
-2
lines changed

.github/workflows/build.yaml

Lines changed: 102 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,21 @@ name: Build
1818

1919
on:
2020
push:
21+
branches:
22+
- main
2123
pull_request:
2224
workflow_dispatch:
2325

2426
concurrency:
25-
group: "build"
27+
group: ${{ github.workflow }}-${{ github.actor }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
2628
cancel-in-progress: true
2729

2830
jobs:
29-
build:
31+
check:
32+
name: "Check RTLMeter"
3033
runs-on: ubuntu-24.04
34+
outputs:
35+
cases: ${{ steps.gatherCases.outputs.cases }}
3136
steps:
3237
- name: Checkout
3338
uses: actions/checkout@v4
@@ -50,3 +55,98 @@ jobs:
5055
run: ./rtlmeter validate
5156
- name: Spellcheck
5257
run: make spellcheck
58+
- name: Gather cases for run
59+
id: gatherCases
60+
run: |
61+
# Gather all configurations into a JSON list
62+
echo "cases=[" >> cases.json
63+
./rtlmeter show --cases | grep ":" | sed 's/:[^:]*$/",/' | sed 's/^/"/' | sort -u | sed "$ s/,//" >> cases.json
64+
echo "]" >> cases.json
65+
# Remove those that do not fit the runner memory
66+
sed -i "/OpenPiton:16x16/d" cases.json
67+
sed -i "/OpenPiton:32x32/d" cases.json
68+
# Set output variable
69+
cat cases.json
70+
tr "\n" " " < cases.json >> "$GITHUB_OUTPUT"
71+
72+
build-verilator:
73+
name: "Build Verilator"
74+
needs: check # Not really a dependency, but don't bother if 'check' fails
75+
runs-on: ubuntu-24.04
76+
strategy:
77+
matrix:
78+
cxx:
79+
- g++
80+
- clang++
81+
steps:
82+
- name: Install dependencies
83+
run: |
84+
sudo apt update
85+
sudo apt install ccache mold help2man libfl-dev libgoogle-perftools-dev libsystemc-dev
86+
- name: Checkout Verilator
87+
uses: actions/checkout@v4
88+
with:
89+
repository: "verilator/verilator"
90+
path: verilator
91+
- name: Configure
92+
working-directory: verilator
93+
run: |
94+
autoconf
95+
./configure --prefix="$PWD/install" CXX=${{ matrix.cxx }}
96+
- name: Make
97+
working-directory: verilator
98+
run: make -j $(nproc)
99+
- name: Install
100+
working-directory: verilator
101+
run: make install
102+
- name: Tar up installation
103+
working-directory: verilator
104+
run: tar --posix -c -z -f verilator-${{ matrix.cxx }}.tar.gz install
105+
- name: Upload Verilator installation archive
106+
uses: actions/upload-artifact@v4
107+
with:
108+
path: verilator/verilator-${{ matrix.cxx }}.tar.gz
109+
name: verilator-${{ matrix.cxx }}
110+
111+
run-with-verilator:
112+
name: Run
113+
needs:
114+
- check
115+
- build-verilator
116+
runs-on: ubuntu-24.04
117+
strategy:
118+
max-parallel: 8
119+
matrix:
120+
cxx:
121+
- g++
122+
- clang++
123+
case: ${{ fromJson(needs.check.outputs.cases) }}
124+
steps:
125+
- name: Checkout
126+
uses: actions/checkout@v4
127+
with:
128+
path: rtlmeter
129+
- name: Setup venv
130+
working-directory: rtlmeter
131+
run: make venv
132+
- name: Install dependencies
133+
run: |
134+
sudo apt update
135+
sudo apt install ccache mold
136+
- name: Download Verilator installation archive
137+
uses: actions/download-artifact@v4
138+
with:
139+
name: verilator-${{ matrix.cxx }}
140+
- name: Unpack Verilator installation archive
141+
run: |
142+
tar -x -z -f verilator-${{ matrix.cxx }}.tar.gz
143+
ls -la
144+
- name: Run
145+
working-directory: rtlmeter
146+
run: |
147+
export PATH="$PWD/../install/bin:$PATH"
148+
./rtlmeter run --cases="${{ matrix.case }}*" --compileArgs="$(jq -r '.["${{ matrix.case }}"] // empty' ci/compileArgs.json)" --verbose
149+
- name: Report
150+
working-directory: rtlmeter
151+
run: |
152+
./rtlmeter report --steps "*" --metrics "*"

ci/compileArgs.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"NVDLA:default" : "--threads 4",
3+
"OpenPiton:4x4" : "--threads 4",
4+
"OpenPiton:8x8" : "--threads 4",
5+
"OpenTitan:default" : "--threads 4",
6+
"VeeR-EH2:asic" : "--threads 4",
7+
"VeeR-EH2:default" : "--threads 4",
8+
"VeeR-EH2:hiperf" : "--threads 4",
9+
"Vortex:sane" : "--threads 4",
10+
"Vortex:huge" : "--threads 4",
11+
"XiangShan:default-chisel3" : "--threads 4",
12+
"XiangShan:default-chisel6" : "--threads 4",
13+
"XiangShan:mini-chisel3" : "--threads 4",
14+
"XiangShan:mini-chisel6" : "--threads 4",
15+
"XuanTie-C906:default" : "--threads 4",
16+
"XuanTie-C910:default" : "--threads 4"
17+
}

0 commit comments

Comments
 (0)