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

package(default_visibility = ["//visibility:public"])

licenses(["notice"])

################################################################################
# FuzzTest support
#
# Create FuzzTest-style fuzzers by adding a dep on //pw_fuzzer:fuzztest

# Identifies when upstream FuzzTest is being used.
config_setting(
    name = "use_fuzztest",
    testonly = True,
    flag_values = {
        "@pigweed//pw_fuzzer:fuzztest_backend": "@com_google_fuzztest//fuzztest:fuzztest_core",
    },
)

cc_library(
    name = "fuzztest",
    testonly = True,
    hdrs = ["public/pw_fuzzer/fuzztest.h"] + select({
        ":use_fuzztest": ["private/pw_fuzzer/internal/fuzztest.h"],
        "//conditions:default": [],
    }),
    includes = ["public"] + select({
        ":use_fuzztest": ["private"],
        "//conditions:default": [],
    }),
    deps = [
        ":fuzztest_backend",
        "//pw_containers",
        "//pw_result",
        "//pw_status",
        "//pw_string",
    ],
)

label_flag(
    name = "fuzztest_backend",
    build_setting_default = ":fuzztest_stub",
)

cc_library(
    name = "fuzztest_stub",
    testonly = True,
    hdrs = [
        "private_overrides/pw_fuzzer/internal/fuzztest.h",
        "public_overrides/fuzztest/fuzztest.h",
    ],
    includes = [
        "private_overrides",
        "public_overrides",
    ],
    deps = ["//pw_unit_test"],
)

################################################################################
# libFuzzer support
#
# Create libFuzzer-style fuzzers by using the `pw_fuzzer` template from
# fuzzer.gni.

cc_library(
    name = "libfuzzer",
    hdrs = [
        "public/pw_fuzzer/asan_interface.h",
        "public/pw_fuzzer/fuzzed_data_provider.h",
    ],
    includes = ["public"],
)
