-
Notifications
You must be signed in to change notification settings - Fork 5
217 lines (207 loc) · 7.91 KB
/
ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
name: bazel-orfs
on:
workflow_dispatch:
push:
branches:
- main
pull_request:
env:
DOCKER_IMAGE: openroad/flow-ubuntu22.04-builder:latest
jobs:
lint:
name: Lint Bazel files
runs-on: ubuntu-22.04
env:
DEBIAN_FRONTEND: "noninteractive"
steps:
- name: Download buildifier
run: |
wget https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-linux-amd64 -O /usr/local/bin/buildifier
chmod +x /usr/local/bin/buildifier
buildifier -version
- name: Checkout bazel-orfs
uses: actions/checkout@v4
- name: Check Bazel files
run: |
buildifier -lint warn -r .
test-make-target:
name: ${{ matrix.STAGE_TARGET }}
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
STAGE_TARGET:
- "//sram:top_mix_grt"
- "tag_array_64x184_generate_abstract"
- "tag_array_64x184_report"
- "lb_32x128_generate_abstract"
- "lb_32x128_test_generate_abstract"
- "L1MetadataArray_generate_abstract"
- "data_2048x8_generate_abstract"
- "regfile_128x65_floorplan"
- "subpackage:L1MetadataArray_generate_abstract"
- "subpackage:tag_array_64x184_generate_abstract"
env:
DEBIAN_FRONTEND: "noninteractive"
steps:
- name: Checkout bazel-orfs
uses: actions/checkout@v4
- name: query target
run: |
bazel query ${{ matrix.STAGE_TARGET }}
bazel query ${{ matrix.STAGE_TARGET }} --output=build
- name: Build report
if: ${{ endsWith(matrix.STAGE_TARGET, '_report') }}
run: |
bazel build --subcommands --verbose_failures --sandbox_debug ${{ matrix.STAGE_TARGET }}
- name: Run target
if: ${{ !endsWith(matrix.STAGE_TARGET, '_report') }}
run: |
if [[ ${{ matrix.STAGE_TARGET }} == "lb_32x128_generate_abstract" ]]; then
# this is a mock area abstract, so it is not executable
bazel build --subcommands --verbose_failures --sandbox_debug ${{ matrix.STAGE_TARGET }}
else
bazel run --subcommands --verbose_failures --sandbox_debug ${{ matrix.STAGE_TARGET }} -- `pwd`/build
fi
test-open-target:
name: open ${{ matrix.STAGE_TARGET }}
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
STAGE_TARGET:
- "//sram:top_mix"
- "tag_array_64x184"
- "L1MetadataArray"
- "subpackage:L1MetadataArray"
- "subpackage:tag_array_64x184"
env:
DEBIAN_FRONTEND: "noninteractive"
steps:
- name: Checkout bazel-orfs
uses: actions/checkout@v4
- name: Run target
run: |
set -ex
rm -rf ./build/
bazel run ${{ matrix.STAGE_TARGET }}_synth -- `pwd`/build OR_ARGS=-exit open_synth
if [[ "${{ matrix.STAGE_TARGET }}" == "L1MetadataArray" || "${{ matrix.STAGE_TARGET }}" == "subpackage:L1MetadataArray" || "${{ matrix.STAGE_TARGET }}" == "//sram:top_mix" ]]; then
macro="true"
fi
if [[ "$macro" == "true" ]]; then
[ $(find build ! -regex '.*/\(objects\|external\|test\)/.*' -regex '.*\.lib' | wc -l) -eq 1 ]
[ $(find build ! -regex '.*/\(objects\|external\|test\)/.*' -regex '.*\.lef' | wc -l) -eq 1 ]
fi
[ $(find build ! -regex '.*/\(objects\|external\|test\)/.*' -regex '.*/1_.*\.log' | wc -l) -gt 1 ]
[ $(find build ! -regex '.*/\(objects\|external\|test\)/.*' -regex '.*/2_.*\.log' | wc -l) -eq 0 ]
rm -rf ./build/
bazel run ${{ matrix.STAGE_TARGET }}_floorplan -- `pwd`/build OR_ARGS=-exit open_floorplan
if [[ "$macro" == "true" ]]; then
[ $(find build ! -regex '.*/\(objects\|external\|test\)/.*' -regex '.*\.lib' | wc -l) -eq 1 ]
[ $(find build ! -regex '.*/\(objects\|external\|test\)/.*' -regex '.*\.lef' | wc -l) -eq 1 ]
fi
[ $(find build ! -regex '.*/\(objects\|external\|test\)/.*' -regex '.*\.odb' | wc -l) -eq 1 ]
[ $(find build ! -regex '.*/\(objects\|external\|test\)/.*' -regex '.*\.sdc' | wc -l) -eq 1 ]
[ $(find build ! -regex '.*/\(objects\|external\|test\)/.*' -regex '.*\.v' | wc -l) -eq 0 ]
[ $(find build ! -regex '.*/\(objects\|external\|test\)/.*' -regex '.*/1_.*\.log' | wc -l) -eq 0 ]
[ $(find build ! -regex '.*/\(objects\|external\|test\)/.*' -regex '.*/2_.*\.log' | wc -l) -gt 1 ]
test-builds:
name: Smoketests
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
env:
DEBIAN_FRONTEND: "noninteractive"
steps:
- name: Checkout bazel-orfs
uses: actions/checkout@v4
- name: Smoketests
run: |
set -ex
bazel build lb_32x128_shared_synth_floorplan wns_report //sram:sdq_17x64_naja_floorplan_deps //sram:naja
grep naja bazel-bin/sram/naja.v
grep -q naja bazel-bin/sram/results/asap7/sdq_17x64/naja/1_synth.v && false || true
(bazel build //sram:sdq_17x64_naja-error_floorplan || true) | grep "syntax error"
# FIXME not implemented yet
# bazel run //sram:sdq_17x64_naja_floorplan_deps $(pwd)/tmp
# grep naja tmp/sram/results/asap7/sdq_17x64/naja/1_synth.v
test-target-local-clean-setup:
name: Local flow - clean setup
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
env:
DEBIAN_FRONTEND: "noninteractive"
steps:
- name: Checkout bazel-orfs
uses: actions/checkout@v4
- name: Build local stage targets - tag_array_64x184
env:
TARGET: tag_array_64x184
run: .github/scripts/build_local_target.sh
- name: Build local stage targets - L1MetadataArray
env:
TARGET: L1MetadataArray
run: .github/scripts/build_local_target.sh
# FIXME switch from strings to labels to fix problems with bazel run vs. _deps environment
# - name: Build local stage targets - //sram:top_mix
# env:
# TARGET: //sram:top_mix
# run: .github/scripts/build_local_target.sh
generate-config:
name: Generate configs
runs-on: ubuntu-22.04
outputs:
docker-tag: ${{ steps.docker-image.outputs.docker-orfs }}
steps:
- name: Checkout bazel-orfs
uses: actions/checkout@v4
- name: Lint Bazel files
run: bazel mod tidy && git diff --exit-code
- name: Extract Docker tag
id: docker-image
run: |
revision=$(python3 .github/scripts/extract_docker_revision.py MODULE.bazel.lock)
echo "docker-orfs=$revision" | tee -a $GITHUB_OUTPUT
test-target-local-preinstalled-orfs:
name: Local flow - preinstalled orfs
runs-on: ubuntu-22.04
needs: generate-config
container:
image: ${{ fromJSON(needs.generate-config.outputs.docker-tag).image }}
defaults:
run:
shell: bash
env:
DEBIAN_FRONTEND: "noninteractive"
FLOW_HOME: /OpenROAD-flow-scripts/flow
steps:
- name: orfs setup
run: |
cd /OpenROAD-flow-scripts
echo "OpenROAD-flow-scripts SHA: "$(git rev-parse HEAD)
source ./env.sh
yosys --version
openroad -version
- name: Install bazelisk as bazel
run: |
wget https://github.com/bazelbuild/bazelisk/releases/download/v1.19.0/bazelisk-linux-amd64 -O /usr/local/bin/bazel
chmod +x /usr/local/bin/bazel
- name: Checkout bazel-orfs
uses: actions/checkout@v4
- name: Build local stage targets - tag_array_64x184
env:
TARGET: tag_array_64x184
run: .github/scripts/build_local_target.sh
- name: Build local stage targets - L1MetadataArray
env:
TARGET: L1MetadataArray
run: .github/scripts/build_local_target.sh