A copy of crosvm is included in the ChromeOS source tree at chromiumos/platform/crosvm, which is referred to as downstream crosvm.
All crosvm development is happening upstream at crosvm/crosvm. Changes from upstream crosvm are regularly merged with ChromeOS's downstream crosvm.
A crosvm bot will regularly generate automated commits that merge upstream crosvm into downstream. These commits can be found in gerrit.
The crosvm team is submitting these merges through the ChromeOS CQ regularly, which happens roughly once per week, but time can vary depending on CQ health.
Googlers can find more information on the merge process at go/crosvm/playbook
crosvm on ChromeOS is usually built with Portage, so it follows the same general workflow as any cros_workon
package. The full package name is chromeos-base/crosvm
.
The developer guide section on Make your Changes applies to crosvm as well. You can build crosvm with cros_workon_make
:
cros_workon --board=${BOARD} start crosvm cros_workon_make --board=${BOARD} crosvm
Deploy it via cros deploy
:
cros_workon_make --board=${BOARD} --install crosvm cros deploy ${IP} crosvm
Iterative test runs can be done as well:
cros_workon_make --board=${BOARD} --test crosvm
Warning: cros_workon_make
patches the local Cargo.toml file. Please do not submit these changes.
Crosvm has a lot of rust dependencies that are installed into a registry inside cros_sdk. After a repo sync
these can be out of date, causing compilation issues. To make sure all dependencies are up to date, run:
emerge-${BOARD} --update --deep -j$(nproc) crosvm
emerge
and cros_workon_make
workflows can be quite slow to work with, hence a lot of developers prefer to use standard cargo workflows used upstream.
Just make sure to initialize git submodules (git submodules update --init
), which is not done by repo. After that, you can use the workflows as outlined in Building Crosvm outside of cros_sdk.
Note: You can not build or test ChromeOS specific features this way.
All changes to crosvm are made upstream, using the same process outlined in Contributing. It is recommended to use the Building crosvm for Linux setup above to run upstream presubmit checks / formatting tools / etc when submitting changes.
Code submitted upstream is tested on linux, but not on ChromeOS devices. Changes will only be tested on the ChromeOS CQ when they go through the merge process.
You can use the crosland tool to check in which ChromeOS version your changes have been merged into the chromiumos/platform/crosvm repository.
The merge will also contain all BUG=
references that will notify your bugs about when the change is submitted.
For more details on the process, please see go/crosvm-playbook (Google only).
We cannot support Cq-Depend to sychronize changes with other ChromeOS repositories. Please try to make changes in a backwards compatible way to allow them to be submitted independently.
If it cannot be avoided at all, please follow this process:
If you need your changes faster than the usual merge frequency, please follow this process:
Never submit code just to ChromeOS, as it will cause upstream to diverge and result in merge conflicts down the road.