# 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_strict_config",
    "../..:pdfium_noshorten_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_formcalc_context_fuzzer",
      "pdf_formcalc_fuzzer",
      "pdf_formcalc_translate_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_cpdf_tounicodemap_fuzzer",
    "pdf_nametree_fuzzer",
  ]
  if (pdf_enable_xfa) {
    fuzzer_list += [
      "pdf_xfa_fdp_fuzzer",
      "pdf_xfa_raw_fuzzer",
      "pdf_xfa_xdp_fdp_fuzzer",
    ]
  }
}

# Note that this only compiles all the fuzzers, to prevent compile breakages.
# It does not link and create fuzzer executables. That is done in Chromium.
group("fuzzers") {
  testonly = true
  deps = []
  foreach(fuzzer, fuzzer_list) {
    deps += [ ":${fuzzer}_src" ]
  }

  if (is_component_build) {
    deps += [ ":fuzzer_impls" ]
  }
}

source_set("fuzzer_pdf_templates") {
  sources = [ "pdf_fuzzer_templates.h" ]
}

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

if (pdf_enable_xfa) {
  assert(pdf_enable_v8)
  source_set("fuzzer_xfa_process_state") {
    testonly = !is_component_build
    sources = [
      "xfa_process_state.cc",
      "xfa_process_state.h",
    ]
    configs += [ ":fuzzer_config" ]
    deps = [
      "../../fxjs:gc",
      "//v8",
    ]
  }
}

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

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

source_set("fuzzer_helper") {
  testonly = !is_component_build
  sources = [
    "pdfium_fuzzer_helper.cc",
    "pdfium_fuzzer_helper.h",
  ]
  configs += [ ":fuzzer_config" ]
  deps = [
    "../../:pdfium_public_headers",
    "../../fpdfsdk",
    "../../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") {
  is_public = defined(invoker.public_fuzzer) && invoker.public_fuzzer
  if (is_public) {
    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. The "_src" target
    # is a thin wrapper that imports the fuzzer from PDFium; this gets linked
    # into the real fuzzer executable. The real fuzzer target has to depend on
    # both the "_impl" and "_src" targets.
    # 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_public_headers",
        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 += [ ":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 (is_public && pdf_enable_xfa) {
      deps += [ ":fuzzer_xfa_process_state" ]
    }
  }
}

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

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

    pdfium_fuzzer("pdf_cfgas_stringformatter_fuzzer") {
      sources = [ "pdf_cfgas_stringformatter_fuzzer.cc" ]
      deps = [
        ":fuzzer_utils",
        "../../core/fxcrt",
        "../../fpdfsdk",
        "../../fxjs:gc",
        "../../xfa/fgas/crt",
        "../../xfa/fxfa",
        "../../xfa/fxfa/parser",
      ]
      public_fuzzer = true
    }

    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_formcalc_translate_fuzzer") {
      sources = [ "pdf_formcalc_translate_fuzzer.cc" ]
      deps = [
        ":fuzzer_utils",
        "../../core/fxcrt",
        "../../fpdfsdk",
        "../../fxjs",
      ]
      public_fuzzer = true
    }

    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/formcalc",
      ]
      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_cpdf_tounicodemap_fuzzer") {
    sources = [ "pdf_cpdf_tounicodemap_fuzzer.cc" ]
    deps = [
      "../../core/fpdfapi/font",
      "../../core/fpdfapi/parser",
      "../../core/fxcrt",
    ]
  }

  pdfium_fuzzer("pdf_nametree_fuzzer") {
    sources = [ "pdf_nametree_fuzzer.cc" ]
    deps = [
      "../../core/fpdfapi/page",
      "../../core/fpdfapi/parser",
      "../../core/fpdfdoc",
      "../../third_party:pdfium_base",
    ]
  }
  if (pdf_enable_xfa) {
    pdfium_fuzzer("pdf_xfa_fdp_fuzzer") {
      sources = [ "pdf_xfa_fdp_fuzzer.cc" ]
      deps = [
        ":fuzzer_helper",
        ":fuzzer_pdf_templates",
        "../../third_party:pdfium_base",
      ]
      public_fuzzer = true
    }
    pdfium_fuzzer("pdf_xfa_raw_fuzzer") {
      sources = [ "pdf_xfa_raw_fuzzer.cc" ]
      deps = [
        ":fuzzer_helper",
        ":fuzzer_pdf_templates",
        "../../third_party:pdfium_base",
      ]
      public_fuzzer = true
    }
    pdfium_fuzzer("pdf_xfa_xdp_fdp_fuzzer") {
      sources = [ "pdf_xfa_xdp_fdp_fuzzer.cc" ]
      deps = [
        ":fuzzer_helper",
        ":fuzzer_pdf_templates",
      ]
      public_fuzzer = true
    }
  }
}

pdfium_fuzzer("pdf_cmap_fuzzer") {
  sources = [ "pdf_cmap_fuzzer.cc" ]
  deps = [
    "../../:freetype_common",
    "../../core/fpdfapi/font",
    "../../core/fxcrt",
    "../../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
}
