| # RISC-V Compliance Task Group | 
 |  | 
 | This is a repository for the work of the RISC-V Foundation Compliance Task Group. The repository owners are: | 
 | - Jeremy Bennett (Embecosm) | 
 | - Lee Moore (Imperas) | 
 |  | 
 | Details of the RISC-V Foundation, the work of its task groups, and how to become a member can be found at [riscv.org](https://riscv.org/). | 
 |  | 
 | ## Contribution process | 
 |  | 
 | You are encouraged to contribute to this repository by submitting pull requests and by commenting on pull requests submitted by other people. | 
 |  | 
 | - Where a pull request is non-controversial one of the repository owners will immediately merge it. The repository uses rebase merges to maintain a linear history. | 
 |  | 
 | - Other pull requests will be publicised to the task group for comment and decision at a subsequent meeting of the group. Everyone is encouraged to comment on a pull request. Such pull requests will be merged by when a consensus/decision has been reached by the task group. | 
 |  | 
 | ## Licensing | 
 |  | 
 | In general: | 
 | - code is licensed under the BSD 3-clause license (SPDX license identifier `BSD-3-Clause`); while | 
 | - documentation is licensed under the Creative Commons Attribution 4.0 International license (SPDX license identifier `CC-BY-4.0`). | 
 |  | 
 | The files [`COPYING.BSD`](./COPYING.BSD) and [`COPYING.CC`](./COPYING.CC) in the top level directory contain the complete text of these licenses. | 
 |  | 
 | ## Engineering practice | 
 |  | 
 | - Documentation uses the structured text format _AsciiDoc_.  See [`doc/README.adoc`](doc/README.adoc) for more details. | 
 |  | 
 | - Some directories use `ChangeLog` files to track changes in the code and documentation.  Please honor these, keeping them up to date and including the ChangeLog entry in the _git_ commit message. | 
 |  | 
 | - Please include a comment with the SPDX license identifier in all source files, for example: | 
 | ``` | 
 | // SPDX-License-Identifier: BSD-3-Clause | 
 | ``` | 
 |  | 
 | ## Running the compliance tests | 
 |  | 
 | The only setup required is to define where the toolchain is found, and where the target / device is found. | 
 |  | 
 | For the toolchain, the binaries must be in the search path and the compiler prefix is defined on the make line. The default value for this is | 
 |  | 
 |     RISCV_PREFIX ?= riscv64-unknown-elf- | 
 |  | 
 | The path to the RUN_TARGET is defined within the riscv-target Makefile.include. | 
 |  | 
 | To run the rv32i test suite on riscvOVPsim | 
 |  | 
 |     make RISCV_TARGET=riscvOVPsim RISCV_DEVICE=rv32i | 
 |  | 
 | ### Accessing riscvOVPsim | 
 |  | 
 | As we create the RISCV.org compliance test suite, the Imperas developed _riscvOVPsim_ compliance simulator is included as part of this GitHub repository. For more information please contact info@ovpworld.org or info@imperas.com. | 
 |  | 
 | For more information on riscvOVPsim look here: [riscv-ovpsim/README.md](riscv-ovpsim/README.md) and here: [riscv-ovpsim/doc/riscvOVPsim_User_Guide.pdf](riscv-ovpsim/doc/riscvOVPsim_User_Guide.pdf). | 
 |  | 
 | ### Using the simulators from the Sail RISC-V formal model | 
 |  | 
 | The [Sail RISC-V formal model](https://github.com/rems-project/sail-riscv) generates two | 
 | simulators, in C and OCaml.  They can be used as test targets for this compliance suite. | 
 |  | 
 | For this purpose, the Sail model needs to be checked out and built on | 
 | the machine running the compliance suite.  Follow the build | 
 | instructions described the README for building the RV32 and RV64 | 
 | models.  Once built, please add `$SAIL_RISCV/c_emulator` and | 
 | `$SAIL_RISCV/ocaml_emulator` to your path, where $SAIL_RISCV is the | 
 | top-level directory containing the model. | 
 |  | 
 | To test the compliance of the C simulator for the current RV32 and RV64 tests, use | 
 |  | 
 |     make RISCV_TARGET=sail-riscv-c all_variant | 
 |  | 
 | while the corresponding command for the OCaml simulator is | 
 |  | 
 |     make RISCV_TARGET=sail-riscv-ocaml all_variant | 
 |  | 
 | ### Using the GRIFT simulator | 
 |  | 
 | The [GRIFT](https://github.com/GaloisInc/grift) formal model and simulation tool | 
 | can be used as a test target for this compliance suite. | 
 |  | 
 | GRIFT needs to be cloned and built on the machine running the compliance | 
 | suite. Follow the build instructions described in the README for building the | 
 | GRIFT simulator. Once build, add the generated `grift-sim` executable to your | 
 | path. | 
 |  | 
 | To test the compliance of the GRIFT simulator for the current RV32 and RV64 | 
 | tests, use | 
 |  | 
 |     make RISCV_TARGET=grift all_variant | 
 |  | 
 | Note that the I-MISALIGN_LDST test fails for GRIFT because GRIFT currently | 
 | supports misaligned loads and stores in hardware, while the test is specifically | 
 | written for systems that trap on misaligned loads and stores. |