blob: 95fc8063c1ee6504f694ce1721f6ec6aa08e1d06 [file] [log] [blame]
#!/bin/bash
# Run IREE tests with Bazel.
#
# Usage: iree-bazel-test [options] [targets...] [bazel-args...]
#
# Examples:
# iree-bazel-test # Run all tests (CPU only)
# iree-bazel-test //compiler/... # Test compiler only
# iree-bazel-test --config=asan # Test with AddressSanitizer
set -e
# Source shared library.
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/iree-bazel-lib"
iree_bazel_init "iree-bazel-test"
# Expand combined short flags (e.g., -nv -> -n -v).
eval "set -- $(iree_expand_combined_flags "$@")"
show_help() {
cat << 'EOF'
iree-bazel-test - Run IREE tests with Bazel
USAGE
iree-bazel-test [options] [targets...] [bazel-args...]
OPTIONS
-n, --dry_run Show the bazel command without executing
-v, --verbose Show the bazel command before executing
-w, --watch Watch mode: rerun tests on file changes
-h, --help Show this help
NOTE: Short flags can be combined: -nv is equivalent to -n -v
NOTE: --keep_going is always enabled for test runs.
ARGUMENTS
targets One or more Bazel targets (at least one required)
bazel-args Additional arguments passed to bazel test
EXAMPLES
# Test all compiler components
iree-bazel-test //compiler/...
# Test a specific test target
iree-bazel-test //runtime/src/iree/base:status_test
# Test multiple targets at once
iree-bazel-test //runtime/src/iree/tokenizer/... //tools/test:iree-tokenize.txt
# Test all tools
iree-bazel-test //tools/...
# Test with AddressSanitizer
iree-bazel-test //compiler/... --config=asan
# Watch and rerun on changes (great for TDD)
iree-bazel-test -w //runtime/src/iree/base:status_test
# Show command without executing (verbose dry-run)
iree-bazel-test -nv //compiler/...
DEFAULT BEHAVIOR
- Runs tests using drivers configured in 'iree-bazel-configure'
- Continues on test failures (--keep_going)
CONFIGURING DRIVERS
Configure drivers ONCE, then test repeatedly:
IREE_HAL_DRIVER_CUDA=ON iree-bazel-configure # Enable CUDA
iree-bazel-test //runtime/... # Tests include CUDA
IREE_HAL_DRIVER_CUDA=OFF iree-bazel-configure # Disable CUDA
iree-bazel-test //runtime/... # CUDA tests skipped
All configuration happens during 'iree-bazel-configure'.
CONFIGURATIONS
--config=localdev Local dev optimizations (disk cache, skymeld)
--config=debug Debug build tests
--config=asan Address Sanitizer
--config=msan Memory Sanitizer
--config=tsan Thread Sanitizer
SEE ALSO
iree-bazel-configure, iree-bazel-build
EOF
}
# Parse arguments.
WATCH_MODE=0
TARGETS=()
BAZEL_ARGS=()
while [[ $# -gt 0 ]]; do
case "${1}" in
-h|--help)
show_help
exit 0
;;
--agent-md|--agent_md)
iree_show_agent_md
exit 0
;;
-n|--dry_run|--dry-run)
IREE_BAZEL_DRY_RUN=1
shift
;;
-v|--verbose)
IREE_BAZEL_VERBOSE=1
shift
;;
-w|--watch)
WATCH_MODE=1
shift
;;
-*)
BAZEL_ARGS+=("${1}")
shift
;;
*)
TARGETS+=("${1}")
shift
;;
esac
done
# Set up worktree (after arg parsing so --help works anywhere).
iree_setup_worktree
# At least one target is required.
if [[ ${#TARGETS[@]} -eq 0 ]]; then
iree_error "Target is required for bazel test"
echo ""
echo "Examples:"
echo " iree-bazel-test //compiler/..."
echo " iree-bazel-test //runtime/src/iree/base:status_test"
echo " iree-bazel-test //tools/..."
exit 1
fi
# Build tag filters based on environment.
TAG_FILTERS="-nodocker"
BUILD_FILTERS=""
# Driver filtering is controlled by configured.bazelrc (written by iree-bazel-configure).
# No runtime env var checks - configuration happens once during configure.
# Build the command with default configs before user args.
iree_bazel_build_default_configs
BAZEL_BIN=$(iree_get_bazel_command "${WATCH_MODE}")
CMD=("${BAZEL_BIN}" test "${IREE_BAZEL_DEFAULT_CONFIGS[@]}" --keep_going
--test_tag_filters="${TAG_FILTERS}"
--build_tag_filters="${BUILD_FILTERS}"
"${TARGETS[@]}"
"${BAZEL_ARGS[@]}")
# Execute or show.
if iree_is_verbose || iree_is_dry_run; then
iree_info "Command: ${CMD[*]}"
fi
if iree_is_dry_run; then
exit 0
fi
iree_info "Testing ${TARGETS[*]}"
iree_info "Tag filters: ${TAG_FILTERS}"
exec "${CMD[@]}"