|
| 1 | +This repository contains hyperlight. Hyperlight is a lightweight Virtual Machine Manager (VMM) designed to be embedded within applications. |
| 2 | +It enables safe execution of untrusted code within micro virtual machines with very low latency and minimal overhead. |
| 3 | + |
| 4 | +This project uses just as a runner for building, testing etc. Just should already be installed. Most of the code in the repository is written in Rust, with a few files in C. |
| 5 | + |
| 6 | +## Code Standards |
| 7 | + |
| 8 | +Make sure that code is formatted and linted before committing. You can do this by running the following command: |
| 9 | + |
| 10 | +```bash |
| 11 | +just fmt-apply |
| 12 | +``` |
| 13 | +This will format the code and apply any necessary changes. You can also run the following command to check for any linting errors: |
| 14 | + |
| 15 | +```bash |
| 16 | +just clippy debug |
| 17 | +just clippy release |
| 18 | +``` |
| 19 | + |
| 20 | +If any lints fail you can try to fix them by running the following command for debug failures: |
| 21 | + |
| 22 | +```bash |
| 23 | + cargo clippy --fix --all |
| 24 | +``` |
| 25 | +And the following command for release failures: |
| 26 | + |
| 27 | +```bash |
| 28 | + cargo clippy --fix --all --release |
| 29 | +``` |
| 30 | + |
| 31 | +If this does not work, you should try and fix the errors and then run the commands again. |
| 32 | + |
| 33 | +## Development flow |
| 34 | + |
| 35 | +- build: |
| 36 | + - `just build` - builds the project in debug mode |
| 37 | + - `just build release` - builds the project in release mode |
| 38 | + - `just guests` - builds the guest library and test guests for both debug and release modes |
| 39 | +- test |
| 40 | + - `just test` - runs all tests in debug mode |
| 41 | + - `just test release` - runs all tests in release mode |
| 42 | + |
| 43 | +Note that if any guest code has changed, you will need to run `just guests` to build the guest library, before running the tests, if the test fail make sure to run `just guests` again to build the guest library, before running the tests again. |
| 44 | + |
| 45 | +Before pushing your code, make sure to run the following commands to ensure that everything is working correctly make sure all tests pass by running |
| 46 | +```bash |
| 47 | +just test-like-ci |
| 48 | +just test-like-ci release |
| 49 | +``` |
| 50 | + |
| 51 | +## Key Instructions |
| 52 | + |
| 53 | +Follow best practices and idioms for writing Rust code. |
| 54 | +Maintain the structure and organization of the codebase. Do not introduce new crates or dependencies without discussing them first. |
| 55 | +Make sure to write tests for any new code you add. Follow the existing testing patterns in the codebase. |
| 56 | +Make sure to fully document any new code you add. Use rustdoc comments and follow guidelines for good documentation. |
| 57 | +Make sure that any changes which alter anything documented in the README or the documentation in the docs directory are reflected in the documentation. |
| 58 | + |
| 59 | +## Repository Structure |
| 60 | +- `dev/` - contains development scripts and tools |
| 61 | +- `src/` - contains the source code for the project |
| 62 | +.editorconfig - contains the editor config for the project you should use this to configure your editor to use the same settings as the rest of the projec |
| 63 | +- Justfile - contains the just commands for building, testing and running the project |
| 64 | +- `fuzz` - contains the fuzzing tests for the project |
| 65 | +- `src/hyperlight_common/` - contains the common code shared between the host and guest |
| 66 | +- `src/hyperlight_guest/` - contains the hyperlight-guest library code |
| 67 | +- `src/hyperlight_host/` - contains the hyperlight-host library code |
| 68 | +- `src/hyperlight_guest_capi/` - contains the hyperlight-guest C library code |
| 69 | +- `src/hyperlight_testing/` - contains the shared code for tests |
| 70 | +- `schema/` - contains the flatbuffer schemas for the project |
| 71 | +- `tests/` - contains the test guest code for the project in C and Rust |
0 commit comments