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

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

config("fuzzer_config") {
  configs = [
    "../..:pdfium_strict_config",
    "../..:pdfium_noshorten_config",
  ]
  defines = []
  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") {
    testonly = true
    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) {
    testonly = true
    sources = invoker.sources
    defines = []
    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 (build_with_chromium) {
      defines += [ "BUILD_WITH_CHROMIUM" ]
    }
  }
}

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" ]
  if (build_with_chromium) {
    deps += [
      "//base",
      "//base/test:test_support",
    ]
  }
  public_fuzzer = true
}
