# Copyright 2022 Google LLC
#
# 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.

# Force the use of Clang for all builds.
build --action_env=CC=clang
build --action_env=CXX=clang++

# Use the C++17 standard.
build --cxxopt=-std=c++17
# Required by the cc_fuzztest_grammar_library rule, which uses the
# "exec configuration" (https://bazel.build/reference/be/general#cross-compilation-considerations).
# The --cxxopt flag does not apply to the exec configuration, only the 
# --host_cxxopt flag (https://bazel.build/docs/user-manual#host-cxxopt).
build --host_cxxopt=-std=c++17

# Use the builtin crc32 for fast integer hashing.
build --copt=-mcrc32

# To create this file, please run:
#
#  bazel run //bazel:setup_configs > fuzztest.bazelrc
#
try-import %workspace%/fuzztest.bazelrc
