# Copyright 2024 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

# Standard Pigweed flags
# ======================
# All Pigweed projects are expected to set these flags. They mostly pre-adopt
# future Bazel settings.
#
# Do not attempt to configure an autodetected (local) toolchain. We vendor all
# our toolchains, and CI VMs may not have any local toolchain to detect.
common --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1

# Required for new toolchain resolution API.
build --incompatible_enable_cc_toolchain_resolution

# Expose exec toolchains for Python.
build --@rules_python//python/config_settings:exec_tools_toolchain=enabled

# Don't propagate flags or defines to the exec config. This will become the
# default one day (https://github.com/bazelbuild/bazel/issues/22457) and will
# improve cache hit rates between builds targeting different platforms. This is
# especially impactful for large host tools like protoc, which will have its
# cache invalidated when your host C++ config changes.
common --experimental_exclude_defines_from_exec_config
common --experimental_exclude_starlark_flags_from_exec_config

# Don't automatically create __init__.py files.
#
# This prevents spurious package name collisions at import time, and should be
# the default (https://github.com/bazelbuild/bazel/issues/7386). It's
# particularly helpful for Pigweed, because we have many potential package name
# collisions due to a profusion of stuttering paths like
# pw_transfer/py/pw_transfer.
common --incompatible_default_to_explicit_init_py

# Don't inherit system PATH. Improves hermeticity and cache hit rates. Should
# be true by default one day (https://github.com/bazelbuild/bazel/issues/7026).
common --incompatible_strict_action_env

# Expose exec toolchains for Python. We use these toolchains in some rule
# implementations (git grep for
# "@rules_python//python:exec_tools_toolchain_type").
build --@rules_python//python/config_settings:exec_tools_toolchain=enabled

# C++ toolchain configuration
# ===========================

# Ignore all warnings in third-party code.
common --per_file_copt=external/.*@-w
common --host_per_file_copt=external/.*@-w

# Picotool needs to build with exceptions and RTTI enabled.
common --per_file_copt=external.*picotool.*@-fexceptions,-frtti
common --host_per_file_copt=external.*picotool.*@-fexceptions,-frtti

# Keep debugging symbols, but don't send them when flashing.
build --strip=never

build --@pico-sdk//bazel/config:PICO_STDIO_USB=True
build --@pico-sdk//bazel/config:PICO_STDIO_UART=True

# Sanitizer configs
# =================
common:asan --@pigweed//pw_toolchain/host_clang:asan
common:tsan --@pigweed//pw_toolchain/host_clang:tsan
common:ubsan --@pigweed//pw_toolchain/host_clang:ubsan

# Presubmit
# =========
# Default targets to build when running:
# bazel build --config=presubmit
build:presubmit -- \
  //... \
  //apps/blinky:blinky \
  //apps/blinky:rp2040_blinky.elf \
  //apps/blinky:rp2040_console \
  //apps/blinky:rp2040_webconsole \
  //apps/blinky:simulator_blinky \
  //apps/blinky:simulator_console \
  //apps/blinky:simulator_webconsole \
  //apps/production:rp2040.elf \
  //apps/production:simulator \
  //tools:console \
  //tools:example_script \
  //tools:toggle_blinky

# UX settings
# ===========
# Error output settings.
common --verbose_failures
test --test_output=errors

# Remote cache
# ============
# Use the remote cache. This will only work for users who have permission to
# access it (including the CI system!).
common:remote_cache --remote_cache=grpcs://remotebuildexecution.googleapis.com
common:remote_cache --google_default_credentials=true
common:remote_cache --remote_instance_name=projects/pigweed-rbe-open/instances/default-instance
common:remote_cache --remote_upload_local_results=false
common:remote_cache --bes_backend="buildeventservice.googleapis.com"
common:remote_cache --bes_timeout=60s
common:remote_cache --bes_results_url="https://source.cloud.google.com/results/invocations/"
common:remote_cache --remote_instance_name=projects/pigweed-rbe-open/instances/default-instance
common:remote_cache --bes_instance_name=pigweed-rbe-open

# Platform configuration
# ======================
common --custom_malloc=//targets:malloc
build --@pigweed//pw_build:default_module_config=//system:module_config

# RP2040 platform configuration
build:rp2040 --platforms=//targets/rp2:rp2040
test:rp2040 --run_under=@pigweed//targets/rp2040/py:unit_test_client

# RP2350 is the same as rp2040 but with a different --platforms setting.
build:rp2350 --config=rp2040
build:rp2350 --platforms=//targets/rp2:rp2350

# User bazelrc file; see
# https://bazel.build/configure/best-practices#bazelrc-file
#
# Note: this should be at the bottom of the file, so that user-specified
# options override anything in this file
# (https://bazel.build/run/bazelrc#imports)
try-import %workspace%/user.bazelrc
