# Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("//build/config/features.gni")
import("//build_overrides/webrtc.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")

static_library("webrtc_fuzzer_main") {
  public_configs = [ "../..:common_inherited_config" ]
  sources = [
    "webrtc_fuzzer_main.cc",
  ]
  deps = [
    "../../system_wrappers:field_trial_default",
    "../../system_wrappers:metrics_default",
    "//testing/libfuzzer:libfuzzer_main",
  ]
}

template("webrtc_fuzzer_test") {
  fuzzer_test(target_name) {
    forward_variables_from(invoker, "*")
    deps += [ ":webrtc_fuzzer_main" ]
    if (is_clang) {
      # Suppress warnings from Chrome's Clang plugins.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details
      suppressed_configs = [ "//build/config/clang:find_bad_constructs" ]
    }
  }
}

webrtc_fuzzer_test("h264_depacketizer_fuzzer") {
  sources = [
    "h264_depacketizer_fuzzer.cc",
  ]
  deps = [
    "../../modules/rtp_rtcp",
  ]
}

webrtc_fuzzer_test("vp8_depacketizer_fuzzer") {
  sources = [
    "vp8_depacketizer_fuzzer.cc",
  ]
  deps = [
    "../../modules/rtp_rtcp",
  ]
}

webrtc_fuzzer_test("vp9_depacketizer_fuzzer") {
  sources = [
    "vp9_depacketizer_fuzzer.cc",
  ]
  deps = [
    "../../modules/rtp_rtcp",
  ]
}

webrtc_fuzzer_test("vp8_qp_parser_fuzzer") {
  sources = [
    "vp8_qp_parser_fuzzer.cc",
  ]
  deps = [
    "../../modules/video_coding/",
  ]
}

webrtc_fuzzer_test("producer_fec_fuzzer") {
  sources = [
    "producer_fec_fuzzer.cc",
  ]
  deps = [
    "../../modules/rtp_rtcp/",
  ]
}

webrtc_fuzzer_test("rtcp_receiver_fuzzer") {
  sources = [
    "rtcp_receiver_fuzzer.cc",
  ]
  deps = [
    "../../modules/rtp_rtcp/",
  ]
  seed_corpus = "corpora/rtcp-corpus"
}

webrtc_fuzzer_test("rtp_packet_fuzzer") {
  sources = [
    "rtp_packet_fuzzer.cc",
  ]
  deps = [
    "../../modules/rtp_rtcp/",
  ]
  seed_corpus = "corpora/rtp-corpus"
}

webrtc_fuzzer_test("rtp_header_fuzzer") {
  sources = [
    "rtp_header_fuzzer.cc",
  ]
  deps = [
    "../../modules/rtp_rtcp/",
  ]
}

webrtc_fuzzer_test("congestion_controller_feedback_fuzzer") {
  sources = [
    "congestion_controller_feedback_fuzzer.cc",
  ]
  deps = [
    "../../:rtc_event_log",
    "../../modules/congestion_controller/",
  ]
}

source_set("audio_decoder_fuzzer") {
  public_configs = [ "../..:common_inherited_config" ]
  sources = [
    "audio_decoder_fuzzer.cc",
    "audio_decoder_fuzzer.h",
  ]
}

webrtc_fuzzer_test("audio_decoder_ilbc_fuzzer") {
  sources = [
    "audio_decoder_ilbc_fuzzer.cc",
  ]
  deps = [
    ":audio_decoder_fuzzer",
    "../../modules/audio_coding:ilbc",
  ]
}

webrtc_fuzzer_test("audio_decoder_isac_fuzzer") {
  sources = [
    "audio_decoder_isac_fuzzer.cc",
  ]
  deps = [
    ":audio_decoder_fuzzer",
    "../../modules/audio_coding:isac",
  ]
}

webrtc_fuzzer_test("audio_decoder_isac_incoming_packet_fuzzer") {
  sources = [
    "audio_decoder_isac_incoming_packet_fuzzer.cc",
  ]
  deps = [
    ":audio_decoder_fuzzer",
    "../../modules/audio_coding:isac",
  ]
}

webrtc_fuzzer_test("audio_decoder_isacfix_fuzzer") {
  sources = [
    "audio_decoder_isacfix_fuzzer.cc",
  ]
  deps = [
    ":audio_decoder_fuzzer",
    "../../modules/audio_coding:isac_fix",
  ]
}

webrtc_fuzzer_test("audio_decoder_opus_fuzzer") {
  sources = [
    "audio_decoder_opus_fuzzer.cc",
  ]
  deps = [
    ":audio_decoder_fuzzer",
    "../../modules/audio_coding:webrtc_opus",
  ]
}

webrtc_fuzzer_test("audio_decoder_opus_redundant_fuzzer") {
  sources = [
    "audio_decoder_opus_redundant_fuzzer.cc",
  ]
  deps = [
    ":audio_decoder_fuzzer",
    "../../modules/audio_coding:webrtc_opus",
  ]
}

# TODO(katrielc) Enable in Chromium when CL 2022833002 lands.
# Although the dependency on media compiles in standalone, it is
# flagged by gn check, so breaks when rolled into Chromium.
if (!build_with_chromium) {
  webrtc_fuzzer_test("turn_unwrap_fuzzer") {
    sources = [
      "turn_unwrap_fuzzer.cc",
    ]
    deps = [
      "../../media:media",
    ]
  }

  webrtc_fuzzer_test("sdp_parser_fuzzer") {
    sources = [
      "sdp_parser_fuzzer.cc",
    ]
    deps = [
      "../../api:libjingle_peerconnection",
    ]
    seed_corpus = "corpora/sdp-corpus"
  }

  webrtc_fuzzer_test("stun_parser_fuzzer") {
    sources = [
      "stun_parser_fuzzer.cc",
    ]
    deps = [
      "../../p2p:rtc_p2p",
    ]
    seed_corpus = "corpora/stun-corpus"
    dict = "corpora/stun.tokens"
  }

  webrtc_fuzzer_test("stun_validator_fuzzer") {
    sources = [
      "stun_validator_fuzzer.cc",
    ]
    deps = [
      "../../p2p:rtc_p2p",
    ]
    seed_corpus = "corpora/stun-corpus"
    dict = "corpora/stun.tokens"
  }

  webrtc_fuzzer_test("pseudotcp_parser_fuzzer") {
    sources = [
      "pseudotcp_parser_fuzzer.cc",
    ]
    deps = [
      "../../p2p:rtc_p2p",
    ]
  }
}
