blob: 60118d77076f29a72840f1aff43458a6b4e7f0e5 [file] [log] [blame]
#!/bin/bash
# Configuration-aware query of IREE build graph with Bazel cquery.
#
# Usage: iree-bazel-cquery [options] <query> [bazel-args...]
#
# Examples:
# iree-bazel-cquery 'deps(//tools:iree-compile)'
# iree-bazel-cquery --output=files //tools:iree-compile
# iree-bazel-cquery 'kind(cc_library, //runtime/...)'
set -e
# Source shared library.
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/iree-bazel-lib"
iree_bazel_init "iree-bazel-cquery"
# Expand combined short flags (e.g., -nv -> -n -v).
eval "set -- $(iree_expand_combined_flags "$@")"
show_help() {
cat << 'EOF'
iree-bazel-cquery - Configuration-aware query of IREE build graph
USAGE
iree-bazel-cquery [options] <query> [bazel-args...]
OPTIONS
-n, --dry_run Show the bazel command without executing
-v, --verbose Show the bazel command before executing
-h, --help Show this help
NOTE: Short flags can be combined: -nv is equivalent to -n -v
ARGUMENTS
query Bazel query expression (required)
bazel-args Additional arguments passed to bazel cquery
DESCRIPTION
Unlike iree-bazel-query, cquery evaluates the build graph after
configuration resolution. This means:
- Results reflect actual build configuration (select() resolved)
- Only targets that would actually be built are shown
- Output paths include configuration-specific directory names
- Useful for understanding what will actually be compiled
EXAMPLES
iree-bazel-cquery //tools:iree-compile # Show configured target
iree-bazel-cquery 'deps(//tools:iree-compile)' # Configured dependencies
iree-bazel-cquery 'kind(cc_library, //runtime/...)'
iree-bazel-cquery -n 'deps(//tools:iree-compile)' # Show command only
# Show output files for a target
iree-bazel-cquery --output=files //tools:iree-compile
# Analyze configuration transitions
iree-bazel-cquery 'deps(//tools:iree-compile)' --transitions=full
COMMON QUERY FUNCTIONS
deps(target) All dependencies of target
rdeps(universe, target) Reverse dependencies within universe
kind(rule, pattern) Targets of specific rule type
somepath(from, to) Path between two targets
allpaths(from, to) All paths between targets
config(target, config) Target in specific configuration
OUTPUT OPTIONS
--output=label Target labels only (default)
--output=files Output file paths
--output=starlark Custom output via Starlark
--transitions=full Show configuration transitions
SEE ALSO
iree-bazel-query, iree-bazel-build, iree-bazel-test, iree-bazel-run
https://bazel.build/query/cquery
EOF
}
# Parse arguments.
QUERY=""
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
;;
-*)
BAZEL_ARGS+=("${1}")
shift
;;
*)
if [[ -z "${QUERY}" ]]; then
QUERY="${1}"
else
BAZEL_ARGS+=("${1}")
fi
shift
;;
esac
done
# Query is required.
if [[ -z "${QUERY}" ]]; then
iree_error "Query expression is required"
echo ""
show_help
exit 1
fi
# Set up worktree (after arg parsing so --help works anywhere).
iree_setup_worktree
# Build the command with default configs (affects select() in build graph).
iree_bazel_build_default_configs
BAZEL_BIN=$(iree_get_bazel_command)
CMD=("${BAZEL_BIN}" cquery "${IREE_BAZEL_DEFAULT_CONFIGS[@]}" "${QUERY}" "${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 "Querying: ${QUERY}"
exec "${CMD[@]}"