blob: 0d57c54b5590a4107386583fc2cd47e3a1c97eb6 [file]
#!/bin/bash
# Configure IREE for Bazel builds.
#
# Usage: iree-bazel-configure
#
# This script runs configure_bazel.py to detect platform/compiler and
# creates a user.bazelrc with recommended settings.
set -e
# Source shared library.
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/iree-bazel-lib"
iree_bazel_init "iree-bazel-configure"
show_help() {
cat << 'EOF'
iree-bazel-configure - Configure IREE for Bazel builds
USAGE
iree-bazel-configure
IREE_HAL_DRIVER_CUDA=ON iree-bazel-configure
WHAT IT DOES
1. Runs configure_bazel.py to detect platform/compiler
2. Writes HAL driver configuration from environment variables
3. Creates user.bazelrc with recommended settings (if not exists)
GENERATED FILES
configured.bazelrc Platform detection + driver configuration
user.bazelrc Local settings (disk cache, debug config)
ENVIRONMENT VARIABLES
IREE_BAZEL_CACHE_DIR - Bazel disk cache location
Unix default: ~/.cache/bazel-iree
Windows default: c:/bazelcache (avoids path length issues)
HAL Drivers (runtime, matches CMake conventions):
IREE_HAL_DRIVER_CUDA=ON - Enable CUDA driver
IREE_HAL_DRIVER_VULKAN=ON - Enable Vulkan driver
IREE_HAL_DRIVER_HIP=ON - Enable HIP driver
IREE_HAL_DRIVER_METAL=ON - Enable Metal driver
IREE_HAL_DRIVER_AMDGPU=ON - Enable AMDGPU driver
IREE_HAL_DRIVER_LOCAL_SYNC=ON - Enable local-sync (default)
IREE_HAL_DRIVER_LOCAL_TASK=ON - Enable local-task (default)
IREE_HAL_DRIVER_NULL=ON - Enable null driver
Values: ON/YES/TRUE/Y/1 (enabled), OFF/NO/FALSE/N/0 (disabled)
Defaults: local-sync, local-task, vulkan enabled (matches CMake)
Note: Compiler backends are always built in Bazel (plugin architecture).
EXAMPLES
# Configure with defaults
iree-bazel-configure
# Enable CUDA
IREE_HAL_DRIVER_CUDA=ON iree-bazel-configure
# Enable multiple drivers
IREE_HAL_DRIVER_CUDA=ON IREE_HAL_DRIVER_VULKAN=ON iree-bazel-configure
AFTER CONFIGURATION
iree-bazel-build Build IREE targets
iree-bazel-test Run tests with configured drivers
SEE ALSO
iree-bazel-build, iree-bazel-test
EOF
}
# Handle help and agent-md before worktree check.
case "${1:-}" in
-h|--help) show_help; exit 0 ;;
--agent-md|--agent_md) iree_show_agent_md; exit 0 ;;
esac
# Set up worktree (configure doesn't call iree_ensure_configured - it IS the configure).
iree_require_worktree
cd "${IREE_BAZEL_WORKTREE_DIR}"
iree_info "Configuring IREE for Bazel in ${IREE_BAZEL_WORKTREE_DIR}..."
# Run platform detection.
if [[ -f "configure_bazel.py" ]]; then
iree_info "Running configure_bazel.py..."
python3 configure_bazel.py
else
iree_error "configure_bazel.py not found in ${IREE_BAZEL_WORKTREE_DIR}"
exit 1
fi
# Create user.bazelrc if it doesn't exist.
if [[ ! -f "user.bazelrc" ]]; then
iree_info "Creating user.bazelrc..."
# Platform-specific cache directory defaults.
if [[ -n "${IREE_BAZEL_CACHE_DIR:-}" ]]; then
CACHE_DIR="${IREE_BAZEL_CACHE_DIR}"
elif [[ "${OSTYPE}" == "msys" || "${OSTYPE}" == "cygwin" || "${OSTYPE}" == "win32" ]]; then
# Windows: Use shorter path to avoid 260 character limit.
CACHE_DIR="c:/bazelcache"
else
# Unix: Use XDG cache directory.
CACHE_DIR="${HOME}/.cache/bazel-iree"
fi
cat > user.bazelrc << EOF
# Local Bazel configuration.
# This file is not version-controlled.
# Disk cache for faster rebuilds (override with IREE_BAZEL_CACHE_DIR).
build --disk_cache=${CACHE_DIR}
# Garbage collect disk cache to prevent unbounded growth.
# Max size 50GB, GC runs when Bazel is idle for some time.
# TODO(benvanik): disabled until we upgrade bazel version.
#build --experimental_disk_cache_gc_max_size=50G
#build --experimental_disk_cache_gc_idle_delay=120s
# Debug config: no optimizations, with assertions.
build:debug --config=asserts --compilation_mode=opt '--per_file_copt=iree|llvm@-O0' --strip=never
# Enable assertions (optimized but with runtime checks).
build:asserts --compilation_mode=opt '--copt=-UNDEBUG'
EOF
# Add Linux-specific sandbox optimization.
if [[ -d "/dev/shm" ]]; then
cat >> user.bazelrc << 'EOF'
# Linux: use ramdisk for sandbox to reduce I/O with many cores.
build --sandbox_base=/dev/shm
EOF
iree_info "Added /dev/shm sandbox optimization (Linux)"
fi
iree_info "Created user.bazelrc with recommended settings"
else
iree_info "user.bazelrc already exists, skipping"
fi
iree_info "Configuration complete!"
echo ""
echo "Build with: iree-bazel-build [target]"
echo "Test with: iree-bazel-test [target]"