[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"ygxJBfvAqu":3},"# crosvm-verif\n\nVerify core components of crosvm using Aeneas and Lean.\n\n## Build and extraction\n\nRun commands from the repository root. Initialize the pinned source submodules\nafter cloning:\n\n```sh\ngit submodule update --init crosvm aeneas\n```\n\n### Check Lean\n\nLean and Lake must be available at the version specified by `lean-toolchain`.\n\n```sh\n# Check the Lean library and all imported specifications.\nmake verify\n# Equivalent: lake build\n\n# Check one proof file during development, with its imports already built.\nlake env lean Resources/AddressRange/Spec.lean\n```\n\n`make` defaults to verification. It checks the existing Lean translation without\nregenerating it or rebuilding the extractor.\n\n### Regenerate from Rust\n\nExtraction needs compatible Charon and Aeneas binaries. The following target\nbuilds both from the pinned Aeneas submodule using Nix:\n\n```sh\nmake aeneas-bin\n```\n\nBefore extracting, consult the [extraction prerequisites and platform\nnotes](Resources/README.md#extraction-and-checks), including the nested minijail\nsubmodule and the current macOS build workaround.\n\n```sh\n# Extract Rust to LLBC, then generate Lean.\nmake extract\n\n# Force fresh LLBC and Lean after Rust or extraction configuration changes.\nmake -B extract\n```\n\nThe LLBC target currently has no Rust source prerequisites, so ordinary\n`make extract` reuses `llbc/resources.llbc` if it exists. Forced extraction is\nneeded when the Rust input, toolchain, or extraction options change.\n\nThe default binaries are `aeneas-bin/bin/charon` and `aeneas-bin/bin/aeneas`.\nThe Makefile supports `AENEAS_BIN`, `CHARON`, and `AENEAS` overrides and obtains\nthe Rust toolchain path from Charon.\n",1792957692998]