# Copyright 2016 The PDFium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("../../pdfium.gni")

config("fuzzer_config") {
  configs = [ "../..:pdfium_core_config" ]

  defines = [
    "PNG_PREFIX",
    "PNG_USE_READ_MACROS",
  ]
  include_dirs = [ "../.." ]
}

# All possible "pdfium_fuzzer"s.
fuzzer_list = [
  "pdf_cmap_fuzzer",
  "pdf_codec_a85_fuzzer",
  "pdf_codec_fax_fuzzer",
  "pdf_codec_icc_fuzzer",
  "pdf_codec_jbig2_fuzzer",
  "pdf_codec_rle_fuzzer",
  "pdf_font_fuzzer",
  "pdf_hint_table_fuzzer",
  "pdf_jpx_fuzzer",
  "pdf_psengine_fuzzer",
  "pdf_scanlinecompositor_fuzzer",
  "pdf_streamparser_fuzzer",
  "pdf_xml_fuzzer",
  "pdfium_fuzzer",
]
if (pdf_enable_v8) {
  fuzzer_list += [
    "pdf_cjs_util_fuzzer",
    "pdf_fx_date_helpers_fuzzer",
  ]
  if (pdf_enable_xfa) {
    fuzzer_list += [
      "pdf_bidi_fuzzer",
      "pdf_cfgas_stringformatter_fuzzer",
      "pdf_cfx_barcode_fuzzer",
      "pdf_codec_jpeg_fuzzer",
      "pdf_css_fuzzer",
      "pdf_fm2js_fuzzer",
      "pdf_formcalc_context_fuzzer",
      "pdf_formcalc_fuzzer",
      "pdfium_xfa_fuzzer",
      "pdfium_xfa_lpm_fuzzer",
    ]
    if (pdf_enable_xfa_bmp) {
      fuzzer_list += [ "pdf_codec_bmp_fuzzer" ]
    }
    if (pdf_enable_xfa_gif) {
      fuzzer_list += [
        "pdf_codec_gif_fuzzer",
        "pdf_lzw_fuzzer",
      ]
    }
    if (pdf_enable_xfa_png) {
      fuzzer_list += [ "pdf_codec_png_fuzzer" ]
    }
    if (pdf_enable_xfa_tiff) {
      fuzzer_list += [ "pdf_codec_tiff_fuzzer" ]
    }
  }
}
if (is_clang) {
  # Fuzzers that use FuzzedDataProvider can only be built with Clang.
  fuzzer_list += [ "pdf_nametree_fuzzer" ]
}

group("fuzzers") {
  testonly = true
  deps = []
  foreach(fuzzer, fuzzer_list) {
    deps += [ ":${fuzzer}_src" ]
  }
}

source_set("fuzzer_init") {
  testonly = true
  sources = [ "pdf_fuzzer_init.cc" ]
  include_dirs = [ "../.." ]
  deps = [ "../../:pdfium_public_headers" ]
}

source_set("fuzzer_init_public") {
  testonly = true
  sources = [ "pdf_fuzzer_init_public.cc" ]
  include_dirs = [ "../.." ]
  deps = [
    ":fuzzer_utils",
    "../../:pdfium_public_headers",
  ]
  if (pdf_enable_v8) {
    configs += [ "//v8:external_startup_data" ]
    deps += [
      "../:test_support",
      "//v8",
      "//v8:v8_libplatform",
    ]
    if (pdf_enable_xfa) {
      deps += [ "../../fxjs:gc" ]
    }
  }
}

if (is_component_build) {
  group("fuzzer_impls") {
    deps = []
    foreach(fuzzer, fuzzer_list) {
      deps += [ ":${fuzzer}_impl" ]
    }
  }
}

source_set("fuzzer_helper") {
  testonly = !is_component_build
  sources = [
    "pdfium_fuzzer_helper.cc",
    "pdfium_fuzzer_helper.h",
  ]
  configs += [ ":fuzzer_config" ]
  deps = [
    "../../:pdfium_public_headers",
    "../../third_party:pdfium_base",
  ]
}

source_set("fuzzer_utils") {
  # In component builds, the pdfium target (which is not testonly) depends on
  # the fuzzer sources, which may depend on this target, so add testonly only in
  # non-component builds.
  testonly = !is_component_build
  sources = [
    "pdfium_fuzzer_util.cc",
    "pdfium_fuzzer_util.h",
  ]
  deps = [ "../../:pdfium_public_headers" ]
  include_dirs = [ "../.." ]
}

template("pdfium_fuzzer") {
  if (defined(invoker.public_fuzzer) && invoker.public_fuzzer) {
    init_dep = ":fuzzer_init_public"
  } else {
    init_dep = ":fuzzer_init"
  }
  if (is_component_build) {
    # In component builds, fuzzers are split into "_impl" and "_src" targets.
    # The "_impl" target exports the fuzzer implementation and gets statically
    # linked into the PDFium shared library.  The "_src" target is a thin
    # wrapper that imports the fuzzer from PDFium; this gets linked into the
    # real fuzzer executable.  In static builds, there's only a single "_src"
    # target that contains the implementation and statically links in PDFium.

    impl_name = target_name + "_impl"
    template_target_name = target_name
    source_set("${target_name}_src") {
      testonly = true
      sources = [ "component_fuzzer_template.cc" ]
      deps = [
        "../../:pdfium",
        init_dep,
      ]
      configs += [ ":fuzzer_config" ]
      defines = [ "FUZZER_IMPL=${template_target_name}" ]
    }
  } else {
    impl_name = target_name + "_src"
  }
  source_set(impl_name) {
    sources = invoker.sources
    deps = []
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [
      "//build/config/compiler:no_chromium_code",
      ":fuzzer_config",
    ]
    if (is_component_build) {
      # |export| should be consistent with FPDF_EXPORT In public/fpdfview.h.
      if (is_win) {
        export = "__declspec(dllexport)"
      } else {
        export = "__attribute__((visibility(\"default\")))"
      }
      defines = [ "LLVMFuzzerTestOneInput=${export} ${template_target_name}" ]
      deps += [ "../../:pdfium_public_headers" ]
    } else {
      testonly = true
      deps += [
        "../../:pdfium",
        init_dep,
      ]
    }
  }
}

if (pdf_enable_v8) {
  pdfium_fuzzer("pdf_cjs_util_fuzzer") {
    sources = [ "pdf_cjs_util_fuzzer.cc" ]
    deps = [
      "../../core/fxcrt",
      "../../fxjs",
    ]
  }
  pdfium_fuzzer("pdf_fx_date_helpers_fuzzer") {
    sources = [ "pdf_fx_date_helpers_fuzzer.cc" ]
    deps = [
      "../../core/fxcrt",
      "../../fxjs",
    ]
  }

  if (pdf_enable_xfa) {
    pdfium_fuzzer("pdf_bidi_fuzzer") {
      sources = [ "pdf_bidi_fuzzer.cc" ]
      deps = [
        "../../:freetype_common",
        "../../core/fxcrt",
        "../../core/fxge",
        "../../xfa/fgas",
        "../../xfa/fgas/layout",
        "//third_party/icu:icuuc",
      ]
    }

    pdfium_fuzzer("pdf_cfgas_stringformatter_fuzzer") {
      sources = [ "pdf_cfgas_stringformatter_fuzzer.cc" ]
      deps = [
        "../../core/fxcrt",
        "../../xfa/fgas",
        "../../xfa/fxfa/parser",
      ]
    }

    pdfium_fuzzer("pdf_cfx_barcode_fuzzer") {
      sources = [ "pdf_cfx_barcode_fuzzer.cc" ]
      deps = [
        "../../core/fxcrt",
        "../../fxbarcode",
        "//third_party/icu:icuuc",
      ]
    }

    if (pdf_enable_xfa_bmp) {
      pdfium_fuzzer("pdf_codec_bmp_fuzzer") {
        sources = [
          "pdf_codec_bmp_fuzzer.cc",
          "xfa_codec_fuzzer.h",
        ]
        deps = [
          "../../core/fxcodec",
          "../../core/fxcrt",
          "../../core/fxge",
          "../../third_party:pdfium_base",
        ]
      }
    }

    if (pdf_enable_xfa_gif) {
      pdfium_fuzzer("pdf_codec_gif_fuzzer") {
        sources = [
          "pdf_codec_gif_fuzzer.cc",
          "xfa_codec_fuzzer.h",
        ]
        deps = [
          "../../core/fxcodec",
          "../../core/fxcrt",
          "../../core/fxge",
          "../../third_party:pdfium_base",
        ]
      }

      pdfium_fuzzer("pdf_lzw_fuzzer") {
        sources = [ "pdf_lzw_fuzzer.cc" ]
        deps = [
          "../../core/fxcodec",
          "../../third_party:pdfium_base",
        ]
      }
    }

    pdfium_fuzzer("pdf_codec_jpeg_fuzzer") {
      sources = [
        "pdf_codec_jpeg_fuzzer.cc",
        "xfa_codec_fuzzer.h",
      ]
      deps = [
        "../../core/fxcodec",
        "../../core/fxcrt",
        "../../core/fxge",
        "../../third_party:pdfium_base",
      ]
    }

    if (pdf_enable_xfa_png) {
      pdfium_fuzzer("pdf_codec_png_fuzzer") {
        sources = [
          "pdf_codec_png_fuzzer.cc",
          "xfa_codec_fuzzer.h",
        ]
        deps = [
          "../../core/fxcodec",
          "../../core/fxcrt",
          "../../core/fxge",
          "../../third_party:pdfium_base",
        ]
      }
    }

    if (pdf_enable_xfa_tiff) {
      pdfium_fuzzer("pdf_codec_tiff_fuzzer") {
        sources = [
          "pdf_codec_tiff_fuzzer.cc",
          "xfa_codec_fuzzer.h",
        ]
        deps = [
          "../../core/fxcodec",
          "../../core/fxcrt",
          "../../core/fxge",
          "../../third_party:pdfium_base",
        ]
      }
    }

    pdfium_fuzzer("pdf_css_fuzzer") {
      sources = [ "pdf_css_fuzzer.cc" ]
      deps = [
        "../../core/fxcrt",
        "../../core/fxcrt/css",
      ]
    }

    pdfium_fuzzer("pdf_fm2js_fuzzer") {
      sources = [ "pdf_fm2js_fuzzer.cc" ]
      deps = [
        ":fuzzer_utils",
        "../../core/fxcrt",
        "../../fxjs",
      ]
    }

    pdfium_fuzzer("pdf_formcalc_context_fuzzer") {
      sources = [ "pdf_formcalc_context_fuzzer.cc" ]
      deps = [
        ":fuzzer_helper",
        "../../:pdfium_public_headers",
        "../../core/fxcrt",
        "../../fpdfsdk",
        "../../fpdfsdk/fpdfxfa",
        "../../fxjs",
        "../../xfa/fxfa",
      ]
      public_fuzzer = true
    }

    pdfium_fuzzer("pdf_formcalc_fuzzer") {
      sources = [ "pdf_formcalc_fuzzer.cc" ]
      deps = [
        ":fuzzer_utils",
        "../../core/fxcrt",
        "../../fxjs:gc",
        "../../xfa/fxfa/fm2js",
      ]
      public_fuzzer = true
    }

    pdfium_fuzzer("pdfium_xfa_fuzzer") {
      sources = [ "pdfium_xfa_fuzzer.cc" ]
      deps = [
        ":fuzzer_helper",
        "../../:pdfium_public_headers",
      ]
      public_fuzzer = true
    }

    pdfium_fuzzer("pdfium_xfa_lpm_fuzzer") {
      sources = [
        "pdfium_xfa_lpm_fuzz_stub.cc",
        "pdfium_xfa_lpm_fuzz_stub.h",
      ]
      deps = [
        ":fuzzer_helper",
        "../../:pdfium_public_headers",
      ]
      public_fuzzer = true
    }
  }
}

if (is_clang) {
  pdfium_fuzzer("pdf_nametree_fuzzer") {
    sources = [ "pdf_nametree_fuzzer.cc" ]
    deps = [
      "../../core/fpdfapi/page",
      "../../core/fpdfapi/parser",
      "../../core/fpdfdoc",
      "../../third_party:pdfium_base",
    ]
  }
}

pdfium_fuzzer("pdf_cmap_fuzzer") {
  sources = [ "pdf_cmap_fuzzer.cc" ]
  deps = [
    "../../:freetype_common",
    "../../core/fpdfapi/font",
    "../../third_party:pdfium_base",
  ]
}

pdfium_fuzzer("pdf_codec_a85_fuzzer") {
  sources = [ "pdf_codec_a85_fuzzer.cc" ]
  deps = [
    "../../core/fxcodec",
    "../../core/fxcrt",
  ]
}

pdfium_fuzzer("pdf_codec_fax_fuzzer") {
  sources = [ "pdf_codec_fax_fuzzer.cc" ]
  deps = [
    ":fuzzer_utils",
    "../../core/fxcodec",
  ]
}

pdfium_fuzzer("pdf_codec_icc_fuzzer") {
  sources = [ "pdf_codec_icc_fuzzer.cc" ]
  deps = [
    "../../core/fxcodec",
    "../../third_party:pdfium_base",
    "../../third_party/:lcms2",
  ]
}

pdfium_fuzzer("pdf_codec_jbig2_fuzzer") {
  sources = [ "pdf_codec_jbig2_fuzzer.cc" ]
  deps = [
    ":fuzzer_utils",
    "../../core/fpdfapi/parser",
    "../../core/fxcodec",
    "../../core/fxcrt",
    "../../core/fxge",
  ]
}

pdfium_fuzzer("pdf_codec_rle_fuzzer") {
  sources = [ "pdf_codec_rle_fuzzer.cc" ]
  deps = [
    "../../core/fxcodec",
    "../../core/fxcrt",
  ]
}

pdfium_fuzzer("pdf_font_fuzzer") {
  sources = [ "pdf_font_fuzzer.cc" ]
  deps = [ "../../:pdfium_public_headers" ]
}

pdfium_fuzzer("pdf_hint_table_fuzzer") {
  sources = [ "pdf_hint_table_fuzzer.cc" ]
  deps = [
    "../../core/fpdfapi/parser",
    "../../core/fxcrt",
    "../../third_party:pdfium_base",
  ]
}

pdfium_fuzzer("pdf_jpx_fuzzer") {
  sources = [ "pdf_jpx_fuzzer.cc" ]
  deps = [
    "../../core/fpdfapi/page",
    "../../core/fxcodec",
    "../../core/fxcrt",
    "../../core/fxge",
  ]
}

pdfium_fuzzer("pdf_psengine_fuzzer") {
  sources = [ "pdf_psengine_fuzzer.cc" ]
  deps = [
    "../../core/fpdfapi/page",
    "../../third_party:pdfium_base",
  ]
}

pdfium_fuzzer("pdf_scanlinecompositor_fuzzer") {
  sources = [ "pdf_scanlinecompositor_fuzzer.cc" ]
  deps = [
    ":fuzzer_utils",
    "../../core/fxcrt",
    "../../core/fxge",
    "../../third_party:pdfium_base",
  ]
}

pdfium_fuzzer("pdf_streamparser_fuzzer") {
  sources = [ "pdf_streamparser_fuzzer.cc" ]
  deps = [
    "../../core/fpdfapi/page",
    "../../core/fpdfapi/parser",
    "../../third_party:pdfium_base",
  ]
}

pdfium_fuzzer("pdf_xml_fuzzer") {
  sources = [ "pdf_xml_fuzzer.cc" ]
  deps = [
    "../../core/fxcrt",
    "../../third_party:pdfium_base",
  ]
}

pdfium_fuzzer("pdfium_fuzzer") {
  sources = [ "pdfium_fuzzer.cc" ]
  deps = [ ":fuzzer_helper" ]
  public_fuzzer = true
}
