@@ -18,16 +18,21 @@ name: Build
18
18
19
19
on :
20
20
push :
21
+ branches :
22
+ - main
21
23
pull_request :
22
24
workflow_dispatch :
23
25
24
26
concurrency :
25
- group : " build "
27
+ group : ${{ github.workflow }}-${{ github.actor }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
26
28
cancel-in-progress : true
27
29
28
30
jobs :
29
- build :
31
+ check :
32
+ name : " Check RTLMeter"
30
33
runs-on : ubuntu-24.04
34
+ outputs :
35
+ cases : ${{ steps.gatherCases.outputs.cases }}
31
36
steps :
32
37
- name : Checkout
33
38
uses : actions/checkout@v4
50
55
run : ./rtlmeter validate
51
56
- name : Spellcheck
52
57
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 "*"
0 commit comments