-
Notifications
You must be signed in to change notification settings - Fork 458
172 lines (150 loc) · 6.09 KB
/
spike-openocd-tests.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
# Build Spike and run a couple of debug tests.
name: Test OpenOCD against 2 spike configurations
env:
SPIKE_REPO: https://github.com/riscv-software-src/riscv-isa-sim.git
SPIKE_REV: master
RISCV_TESTS_REPO: https://github.com/riscv-software-src/riscv-tests.git
RISCV_TESTS_REV: master
OPENOCD_REPO: https://github.com/riscv/riscv-openocd.git
OPENOCD_REV: riscv
TOOLCHAIN_URL: https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v12.2.0-1/xpack-riscv-none-elf-gcc-12.2.0-1-linux-x64.tar.gz
on:
# Run on merges to master to populate the cache with entities that are
# accessible by every pull request.
push:
branches:
- riscv
paths:
- 'debug/**'
- '.github/workflows/spike-openocd-tests.yml'
pull_request:
types: [synchronize, opened, reopened]
paths:
- 'debug/**'
- '.github/workflows/spike-openocd-tests.yml'
# There is some commented out code below that would be useful in adding this
# workflow to other repos. Ideally we can come up with something that would
# leave this file almost identical between repos, so they can all easily run
# this test suite.
jobs:
test:
name: Test debug (Ubuntu)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Install packages
run: |
sudo apt-get update
sudo apt-get install -y device-tree-compiler build-essential
- name: Get revisions of dependencies
run: |
SPIKE_COMMIT=$( git ls-remote "$SPIKE_REPO" $SPIKE_REV | awk '{ print $1; }' )
OPENOCD_COMMIT=$( git ls-remote "$OPENOCD_REPO" $OPENOCD_REV | awk '{ print $1; }' )
echo "Revison of Spike: $SPIKE_COMMIT"
echo "Revision of OpenOCD: $OPENOCD_COMMIT"
# Save for later use
echo "SPIKE_COMMIT=$SPIKE_COMMIT" >> $GITHUB_ENV
echo "OPENOCD_COMMIT=$OPENOCD_COMMIT" >> $GITHUB_ENV
- name: Get the toolchain from cache (if available)
id: cache-restore-toolchain
uses: actions/cache/restore@v3
with:
path: /opt/riscv/toolchain
key: "toolchain-${{env.TOOLCHAIN_URL}}"
- if: ${{ steps.cache-restore-toolchain.outputs.cache-hit != 'true' }}
name: Download Toolchain (if not cached)
run: |
mkdir -p /opt/riscv/toolchain
wget --progress=dot:giga $TOOLCHAIN_URL -O /tmp/toolchain.tar.gz
- if: ${{ steps.cache-restore-toolchain.outputs.cache-hit != 'true' }}
name: Install Toolchain (if not cached)
run: tar zxf /tmp/toolchain.tar.gz --strip-components=1 -C /opt/riscv/toolchain
- name: Save the toolchain to the cache (if necessary)
id: cache-save-toolchain
uses: actions/cache/save@v3
with:
path: /opt/riscv/toolchain
key: "toolchain-${{env.TOOLCHAIN_URL}}"
- name: Get OpenOCD from cache (if available)
id: cache-restore-openocd
uses: actions/cache/restore@v3
with:
path: /opt/riscv/openocd
key: "openocd-${{env.OPENOCD_COMMIT}}"
- if: ${{ steps.cache-restore-openocd.outputs.cache-hit != 'true' }}
name: Download OpenOCD source (if not cached)
run: |
git clone "$OPENOCD_REPO"
cd riscv-openocd
git checkout "$OPENOCD_COMMIT"
git submodule update --init --recursive
- if: ${{ steps.cache-restore-openocd.outputs.cache-hit != 'true' }}
name: Build OpenOCD (if not cached)
run: |
cd riscv-openocd
./bootstrap
./configure --prefix=/opt/riscv/openocd
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
make install
- if: ${{ steps.cache-restore-openocd.outputs.cache-hit != 'true' }}
name: Save OpenOCD to cache (if built)
id: cache-save-openocd
uses: actions/cache/save@v3
with:
path: /opt/riscv/openocd
key: "openocd-${{env.OPENOCD_COMMIT}}"
- name: Get spike from cache (if available)
id: cache-restore-spike
uses: actions/cache/restore@v3
with:
path: /opt/riscv/spike
key: "spike-${{env.SPIKE_COMMIT}}"
- if: ${{ steps.cache-restore-spike.outputs.cache-hit != 'true' }}
name: Download Spike source (if not cached)
run: |
git clone "$SPIKE_REPO"
cd riscv-isa-sim
git checkout "$SPIKE_COMMIT"
git submodule update --init --recursive
- if: ${{ steps.cache-restore-spike.outputs.cache-hit != 'true' }}
name: Build Spike (if not cached)
run: |
cd riscv-isa-sim
mkdir build && cd build
../configure --prefix=/opt/riscv/spike
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
make install
- if: ${{ steps.cache-restore-spike.outputs.cache-hit != 'true' }}
name: Save spike to cache (if built)
id: cache-save-spike
uses: actions/cache/save@v3
with:
path: /opt/riscv/spike
key: "spike-${{env.SPIKE_COMMIT}}"
- name: Run Spike32 Tests
id: spike32-tests
run: |
cd debug
./gdbserver.py targets/RISC-V/spike32.py --print-failures \
--gcc /opt/riscv/toolchain/bin/riscv-none-elf-gcc \
--gdb /opt/riscv/toolchain/bin/riscv-none-elf-gdb \
--sim_cmd /opt/riscv/spike/bin/spike \
--server_cmd /opt/riscv/openocd/bin/openocd
- name: Run Spike64-2 Tests
if: success() || steps.spike32-tests.conclusion == 'failure'
run: |
cd debug
./gdbserver.py targets/RISC-V/spike64-2.py --print-failures \
--gcc /opt/riscv/toolchain/bin/riscv-none-elf-gcc \
--gdb /opt/riscv/toolchain/bin/riscv-none-elf-gdb \
--sim_cmd /opt/riscv/spike/bin/spike \
--server_cmd /opt/riscv/openocd/bin/openocd
- name: Archive test logs
# Proceed even if there was a failed test
if: ${{ success() || failure() }}
uses: actions/upload-artifact@v3
with:
name: test-logs
path: riscv-tests/debug/logs