119 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/bash
 | |
| # Copyright 2021 The Chromium OS Authors. All rights reserved.
 | |
| # Use of this source code is governed by a BSD-style license that can be
 | |
| # found in the LICENSE file.
 | |
| set -e
 | |
| 
 | |
| cd "$(dirname $0)/.."
 | |
| 
 | |
| HELP="This will run presubmit checks for crosvm.
 | |
| 
 | |
| To run all checks just run
 | |
| 
 | |
|     $ ./tools/presubmit
 | |
| 
 | |
| The checks can be run in parallel for faster execution:
 | |
| 
 | |
|     $ ./tools/presubmit --tmux
 | |
| 
 | |
| This will open a tmux session to run all presubmit builds in parallel. It will
 | |
| create a nested tmux session if you are already using it.
 | |
| 
 | |
| All tests are executed in the local development environment. If your host is not
 | |
| set up for aarch64 builds, it will use './tools/dev_container' to build run
 | |
| those.
 | |
| 
 | |
| There are three levels of presubmit tests that can be run:
 | |
| 
 | |
|     $ ./tools/presubmit --quick
 | |
|     $ ./tools/presubmit
 | |
|     $ ./tools/presubmit --all
 | |
| 
 | |
| The quick mode will only cover x86 and does not require a dev_container. The
 | |
| default mode will add aarch64 tests, and the all mode will test everything that
 | |
| is also tested on Kokoro.
 | |
| "
 | |
| 
 | |
| while [[ $# -gt 0 ]]; do
 | |
|     case "$1" in
 | |
|     -q | --quick)
 | |
|         QUICK=true
 | |
|         shift
 | |
|         ;;
 | |
|     -a | --all)
 | |
|         ALL=true
 | |
|         shift
 | |
|         ;;
 | |
|     --tmux)
 | |
|         RUN_IN_TMUX=true
 | |
|         shift
 | |
|         ;;
 | |
|     -h | --help)
 | |
|         echo "$HELP"
 | |
|         exit 0
 | |
|         shift
 | |
|         ;;
 | |
|     *)
 | |
|         echo "unknown argument $1"
 | |
|         exit 1
 | |
|         ;;
 | |
|     esac
 | |
| done
 | |
| 
 | |
| run_commands_in_tmux() {
 | |
|     local tmux_commands=(
 | |
|         set-option -g default-shell /bin/bash \;
 | |
|         new-session "$1; read -p 'Press enter to close.'" \;
 | |
|     )
 | |
|     for cmd in "${@:2}"; do
 | |
|         tmux_commands+=(
 | |
|             split-window -h "$cmd; read -p 'Press enter to close.'" \;
 | |
|         )
 | |
|     done
 | |
|     tmux_commands+=(
 | |
|         select-layout even-horizontal \;
 | |
|     )
 | |
|     TMUX="" tmux "${tmux_commands[@]}"
 | |
| }
 | |
| 
 | |
| run_commands() {
 | |
|     for cmd in "$@"; do
 | |
|         echo "$ ${cmd}"
 | |
|         bash -c "$cmd"
 | |
|         echo
 | |
|     done
 | |
| }
 | |
| 
 | |
| aarch64_wrapper() {
 | |
|     if ! (rustup target list --installed | grep -q aarch64 &&
 | |
|         dpkg --print-foreign-architectures | grep -q arm64); then
 | |
|         echo "./tools/dev_container"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| commands=(
 | |
|     "./tools/fmt --check && ./tools/clippy"
 | |
|     "./tools/run_tests --target=host"
 | |
| )
 | |
| 
 | |
| if [ "$ALL" == true ]; then
 | |
|     commands+=(
 | |
|         "$(aarch64_wrapper) ./tools/run_tests --target=vm:aarch64"
 | |
|         "$(aarch64_wrapper) ./tools/run_tests --target=vm:aarch64 --arch=armhf"
 | |
|         "./tools/run_tests --target=host --arch=win64 --build-only"
 | |
|         "cargo build --verbose --no-default-features"
 | |
|     )
 | |
| elif [ "$QUICK" != true ]; then
 | |
|     commands+=(
 | |
|         # Test via user-space emulation for faster, but less complete results.
 | |
|         "$(aarch64_wrapper) ./tools/run_tests --target=host --arch=aarch64"
 | |
|         "./tools/run_tests --target=host --arch=win64 --build-only"
 | |
|     )
 | |
| fi
 | |
| 
 | |
| if [ "$RUN_IN_TMUX" = true ]; then
 | |
|     run_commands_in_tmux "${commands[@]}"
 | |
| else
 | |
|     run_commands "${commands[@]}"
 | |
| fi
 |