# Copyright 2022 The NativeLink Authors. All rights reserved.
#
# 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
#
#    http://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.

# Use blake3 as digest function instead of the much slower default sha256.
startup --digest_function=blake3
common --enable_platform_specific_config

# Don't use legacy toolchain resolution.
common --incompatible_enable_cc_toolchain_resolution
common --incompatible_enable_proto_toolchain_resolution

# Use '+' instead of the legacy '~' when resolving repo names.
common --incompatible_use_plus_in_repo_names

# Simulate rules_python's initialization with a script and use a statically
# linked musl Python toolchain.
# TODO(aaronmondal): This is a hack. It works for us because have just a few
#                    simple python scripts in the repository and don't have
#                    complex Python dependencies. Implement LRE for Python.
common --@rules_python//python/config_settings:bootstrap_impl=script
common --@rules_python//python/config_settings:py_linux_libc=musl

# Don't leak PATH and LD_LIBRARY_PATH into the build.
build --incompatible_strict_action_env

# Don't use legacy repository rules.
build --incompatible_disable_native_repo_rules

# Use the earliest supported C++ version for protoc.
build --cxxopt=-std=c++14 --host_cxxopt=-std=c++14

build --test_output=errors

build:debug -c dbg

build:self_test --remote_cache=grpc://127.0.0.1:50051

build:self_execute --remote_executor=grpc://127.0.0.1:50052
build:self_execute --remote_default_exec_properties=cpu_count=1
build:self_execute --platform_suffix=self-execute

build --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
build --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect

# TODO(aaronmondal): Extend these flags until we can run with clippy::pedantic.
build --@rules_rust//:clippy_flags=-Dwarnings,-Dclippy::uninlined_format_args,-Dclippy::manual_string_new,-Dclippy::manual_let_else,-Dclippy::single_match_else,-Dclippy::redundant_closure_for_method_calls,-Dclippy::semicolon_if_nothing_returned,-Dclippy::unreadable_literal,-Dclippy::range_plus_one,-Dclippy::inconsistent_struct_constructor,-Dclippy::match_wildcard_for_single_variants,-Dclippy::implicit_clone,-Dclippy::needless_pass_by_value,-Dclippy::explicit_deref_methods,-Dclippy::trivially_copy_pass_by_ref,-Dclippy::unnecessary_wraps,-Dclippy::cast_lossless,-Dclippy::map_unwrap_or,-Dclippy::ref_as_ptr,-Dclippy::inline_always,-Dclippy::redundant_else,-Dclippy::return_self_not_must_use,-Dclippy::match_same_arms,-Dclippy::explicit_iter_loop,-Dclippy::items_after_statements,-Dclippy::explicit_into_iter_loop,-Dclippy::stable_sort_primitive,-Dclippy::ptr_as_ptr,-Dclippy::needless_raw_string_hashes,-Dclippy::default_trait_access,-Dclippy::ignored_unit_patterns,-Dclippy::needless_continue,-Dclippy::wildcard_imports,-Dclippy::doc_markdown,-Dclippy::struct_field_names,-Dclippy::implicit_hasher
build --@rules_rust//:clippy.toml=//:clippy.toml

test --@rules_rust//:rustfmt.toml=//:.rustfmt.toml

# This will make rustfmt and clippy only run on `bazel test`.
test --output_groups=+rustfmt_checks
test --output_groups=+clippy_checks

# Optional nightly toolchain. Mostly useful for running sanitizers.
build:nightly --@rules_rust//rust/toolchain/channel=nightly

# AddressSanitizer to detect memory leaks.
build:asan --config=nightly
build:asan --@rules_rust//:extra_rustc_flags=-Zsanitizer=address

# ThreadSanitizer to detect data races. Tests under tsan shouldn't be cached
# since they tend to produce irreproducible false negatives.
build:tsan --config=nightly -c dbg
build:tsan --@rules_rust//:extra_rustc_flags=-Zsanitizer=thread
build:tsan --cache_test_results=no
build:tsan --run_under=//tools:tsan.sh

# Configuration options for Windows builds.
startup --windows_enable_symlinks
build:windows --cxxopt=/std:c++14 --host_cxxopt=/std:c++14
build:windows --enable_runfiles
build:windows --extra_toolchains=@rust_toolchains//:all  # Doesn't support LRE.

# Generated by the LRE flake module.
try-import %workspace%/lre.bazelrc

# Generated by the darwin flake module.
try-import %workspace%/darwin.bazelrc

# Generated by the NixOS flake module.
try-import %workspace%/nixos.bazelrc

# Generated by the nativelink flake module.
try-import %workspace%/nativelink.bazelrc

# Allow user-side customization.
try-import %workspace%/user.bazelrc
