blob: b983f93220a384f0855196c66c89e146a06223a9 [file]
#!/bin/bash
# Build IREE targets with Bazel.
#
# Usage: iree-bazel-build [options] [targets...] [bazel-args...]
#
# Examples:
# iree-bazel-build # Build all tools
# iree-bazel-build //compiler/... # Build compiler
# iree-bazel-build --config=debug # Debug build
set -e
# Source shared library.
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/iree-bazel-lib"
iree_bazel_init "iree-bazel-build"
# Expand combined short flags (e.g., -nv -> -n -v).
eval "set -- $(iree_expand_combined_flags "$@")"
show_help() {
cat << 'EOF'
iree-bazel-build - Build IREE with Bazel
USAGE
iree-bazel-build [options] [targets...] [bazel-args...]
OPTIONS
-n, --dry_run Show the bazel command without executing
-v, --verbose Show the bazel command before executing
-k, --keep_going Continue building after errors
-w, --watch Watch mode: rebuild on file changes
-h, --help Show this help
NOTE: Short flags can be combined: -nv is equivalent to -n -v
ARGUMENTS
targets One or more Bazel targets (at least one required)
bazel-args Additional arguments passed to bazel build
EXAMPLES
# Build the compiler tool
iree-bazel-build //tools:iree-compile
# Build multiple tools at once
iree-bazel-build //tools:iree-compile //tools:iree-opt
# Build the runtime module executor
iree-bazel-build //tools:iree-run-module
# Build all compiler components
iree-bazel-build //compiler/...
# Debug build
iree-bazel-build //tools:iree-compile --config=debug
# Continue building after errors
iree-bazel-build -k //compiler/...
# Watch and rebuild on changes
iree-bazel-build -w //tools:iree-opt
# Show command without executing (verbose dry-run)
iree-bazel-build -nv //tools:iree-compile
COMMON TARGETS
//tools/... All tools
//compiler/... Compiler components
//runtime/... Runtime components
//tools:iree-compile Main compiler tool
//tools:iree-run-module Module runner
CONFIGURATIONS
--config=localdev Local dev optimizations (disk cache, skymeld)
--config=debug No optimizations, assertions enabled
--config=asserts Optimized with assertions
--config=asan Address Sanitizer
--config=msan Memory Sanitizer
--config=tsan Thread Sanitizer
SEE ALSO
iree-bazel-configure, iree-bazel-test
EOF
}
# Parse arguments.
KEEP_GOING=0
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
;;
-k|--keep_going|--keep-going)
KEEP_GOING=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 build"
echo ""
echo "Examples:"
echo " iree-bazel-build //tools:iree-compile"
echo " iree-bazel-build //tools:iree-compile //tools:iree-opt"
echo " iree-bazel-build //tools:iree-run-module"
echo " iree-bazel-build //compiler/..."
exit 1
fi
# 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}" build "${IREE_BAZEL_DEFAULT_CONFIGS[@]}")
if [[ "${KEEP_GOING}" == "1" ]]; then
CMD+=(--keep_going)
fi
CMD+=("${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 "Building ${TARGETS[*]}"
exec "${CMD[@]}"