attempt #3 to fix CI #52
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 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_ast2str.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; } | |
clang-format -i * | |
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 | |
if diff -q riscv_ast2str.gen.inc ../old_output/riscv_ast2str.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 ast stringification logic differ from the one committed in the repo" | |
else | |
echo "Failure: The tool-generated decoding logic differ from the one 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 |