refactored half of the decoder generation phase into its own analysis… #44
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 install . --deps-only | |
opam install sail=0.17.1 | |
sudo apt-get install z3 | |
- 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: 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 'void main() {}' >> test_main.c | |
gcc test_main.c || { echo "Failure: Trying to compile the tool-generated C code failed."; exit 1; } | |
if diff -q riscv_ast.gen.inc ../old_output/riscv_ast.gen.inc > /dev/null 2>&1; then | |
if diff -q riscv_decode.gen.inc ../old_output/riscv_decode.gen.inc > /dev/null 2>&1; then | |
echo "Success: The tool generates compiling C code that is identical to the files committed." | |
else | |
echo "Failure: The tool-generated decoding logic differ from that committed in the repo." | |
exit 1 | |
fi | |
else | |
echo "Failure: The tool-generated ast definition differ from the one committed in the repo." | |
exit 1 | |
fi |