# Copyright 2020 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
#
#    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.

load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")

label_flag(
    name = "cc_engine",
    build_setting_default = "//fuzzing/engines:replay",
    visibility = ["//visibility:public"],
)

string_flag(
    name = "cc_engine_instrumentation",
    build_setting_default = "none",
    values = [
        "none",
        "libfuzzer",
        "honggfuzz",
        "oss-fuzz",
    ],
    visibility = ["//visibility:public"],
)

string_flag(
    name = "cc_engine_sanitizer",
    build_setting_default = "none",
    values = [
        # No sanitizer instrumentation.
        "none",
        # Address sanitizer (ASAN).
        # See https://clang.llvm.org/docs/AddressSanitizer.html
        "asan",
        # Memory sanitizer (MSAN).
        # See https://clang.llvm.org/docs/MemorySanitizer.html
        "msan",
        # MSAN + origin tracking enabled.
        # Useful for debugging crash reproducers, 1.5-2x slower.
        "msan-origin-tracking",
    ],
    visibility = ["//visibility:public"],
)

# If set, define the FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION macro
# during compilation.
#
# See https://llvm.org/docs/LibFuzzer.html#fuzzer-friendly-build-mode
bool_flag(
    name = "cc_fuzzing_build_mode",
    build_setting_default = True,
    visibility = ["//visibility:public"],
)

exports_files([
    "cc_defs.bzl",
    "instrum_opts.bzl",
])
