-
-
Notifications
You must be signed in to change notification settings - Fork 0
111 lines (88 loc) · 4.95 KB
/
end2end-smoke-test.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
on:
- push
jobs:
smoke-test:
runs-on: ubuntu-latest
steps:
- name: Set up the Ocaml toolchain
run: |
sudo apt-get install bubblewrap
echo "" | bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)"
echo "1" | opam init
opam install dune
- name: Fetch the generator sources
uses: actions/checkout@v4
with:
path: generator
- name: Get the hash of the riscv sail model to fetch
id: sail-riscv-model-get-hash
run: cd generator && echo "h=$(cat sail.hash.txt)" >> "$GITHUB_OUTPUT" && echo "Fetching version $(cat sail.hash.txt) of the riscv sail model"
- name: Fetch the riscv sail model
uses: actions/checkout@v4
with:
repository: riscv/sail-riscv
ref: ${{ steps.sail-riscv-model-get-hash.outputs.h }}
path: sail-riscv/
sparse-checkout: model
- name: Install generator dependencies
run: |
cd generator && source ~/.bash_profile
export OPAMCONFIRMLEVEL=yes
opam update
opam install sail=0.18
sudo apt-get install z3
opam install . --deps-only
- name: Running the generator
run: |
cd generator && source ~/.bash_profile
mv riscv_disasm old_output
dune exec --profile release -- riscv_disasm_from_sail -f sail.filepaths.txt
- name: Installing clang-format to automatically format the source code
run: |
python -m pip install clang-format
- name: Checking the generated code compiles and is identical to the committed generated code
run: |
cd generator/riscv_disasm
touch test_main.c
echo '#include "riscv_decode.gen.inc"' >> test_main.c
echo >> test_main.c
echo '#include "riscv_decode_compressed.gen.inc"' >> test_main.c
echo >> test_main.c
echo '#include "riscv_ast2str.gen.inc"' >> test_main.c
echo >> test_main.c
echo '#include "riscv_insn_mapping.gen.inc"' >> test_main.c
echo >> test_main.c
echo 'void main() {}' >> test_main.c
mv ../old_output/riscv_helpers_ast2str.h riscv_helpers_ast2str.h
mv ../old_output/riscv_helpers_rvconf.h riscv_helpers_rvconf.h
gcc test_main.c || { echo "Failure: Trying to compile the tool-generated C code failed."; exit 1; }
clang-format -i *
if ! diff -q riscv_ast.gen.inc ../old_output/riscv_ast.gen.inc > /dev/null 2>&1; then
echo "Failure: The tool-generated ast definition differ from the one committed in the repo."
exit 1
fi
if ! diff -q riscv_decode.gen.inc ../old_output/riscv_decode.gen.inc > /dev/null 2>&1; then
echo "Failure: The tool-generated decoding logic differ from the one committed in the repo."
exit 1
fi
if ! diff -q riscv_decode_compressed.gen.inc ../old_output/riscv_decode_compressed.gen.inc > /dev/null 2>&1; then
echo "Failure: The tool-generated compressed (16-bit) decoding logic differ from the one committed in the repo."
exit 1
fi
if ! diff -q riscv_ast2str_tbls.gen.inc ../old_output/riscv_ast2str_tbls.gen.inc > /dev/null 2>&1; then
echo "Failure: The tool-generated stringification helpers differ from the one committed in the repo"
exit 1
fi
if ! diff -q riscv_ast2str.gen.inc ../old_output/riscv_ast2str.gen.inc > /dev/null 2>&1; then
echo "Failure: The tool-generated ast stringification logic differ from the one committed in the repo"
exit 1
fi
if ! diff -q riscv_insn_mapping.gen.inc ../old_output/riscv_insn_mapping.gen.inc > /dev/null 2>&1; then
echo "Failure: The tool-generated ast-id->instruction-id mapping logic differ from the one committed in the repo"
exit 1
fi
if ! diff -q riscv_insn.gen.inc ../old_output/riscv_insn.gen.inc > /dev/null 2>&1; then
echo "Failure: The tool-generated instruction ids differ from the one committed in the repo"
exit 1
fi
echo "Success: The tool generates compiling C code that is identical to the files committed."