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

load(
    "//pw_build:pigweed.bzl",
    "pw_cc_library",
)

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_config//:pw_fuzzer_fuzztest_backend": "@com_google_fuzztest//fuzztest",
    },
)

pw_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 = [
        "//pw_containers",
        "//pw_result",
        "//pw_status",
        "//pw_string",
        "@pigweed_config//:pw_fuzzer_fuzztest_backend",
    ],
)

pw_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.

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