# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# These options disable the Bazel progress UI, resulting in output closer
# to ninja and similar tools.
common --color=no --curses=yes

# These options ensure that Bazel prints *everything* it is doing as aggressively
# as possible, but only updating once every second.
build --show_timestamps 
build --show_progress_rate_limit=1

# If something goes wrong, show the whole command line for it.
build --verbose_failures

# If one action fails, keep going, so that CI runs show as much actionable information
# as possible.
build --keep_going

# Use the remote Bazel cache for CI.
build --remote_cache=https://storage.googleapis.com/opentitan-bazel-cache
build --remote_timeout=600