# 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("//build/config/jumbo.gni")
import("../../pdfium.gni")

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

  defines = [
    "PNG_PREFIX",
    "PNG_USE_READ_MACROS",
  ]
  include_dirs = [ "../.." ]
  if (pdf_enable_v8) {
    defines += [ "PDF_ENABLE_V8" ]
  }
  if (pdf_enable_xfa) {
    defines += [ "PDF_ENABLE_XFA" ]
  }
}

group("fuzzers") {
  testonly = true
  deps = [
    ":pdf_cmap_fuzzer_src",
    ":pdf_codec_a85_fuzzer_src",
    ":pdf_codec_fax_fuzzer_src",
    ":pdf_codec_icc_fuzzer_src",
    ":pdf_codec_jbig2_fuzzer_src",
    ":pdf_codec_rle_fuzzer_src",
    ":pdf_font_fuzzer_src",
    ":pdf_hint_table_fuzzer_src",
    ":pdf_jpx_fuzzer_src",
    ":pdf_psengine_fuzzer_src",
    ":pdf_streamparser_fuzzer_src",
    ":pdf_xml_fuzzer_src",
    ":pdfium_fuzzer_src",
  ]
  if (pdf_enable_xfa) {
    deps += [
      ":pdf_bidi_fuzzer_src",
      ":pdf_cfx_barcode_fuzzer_src",
      ":pdf_codec_jpeg_fuzzer_src",
      ":pdf_css_fuzzer_src",
      ":pdf_fm2js_fuzzer_src",
      ":pdf_formcalc_fuzzer_src",
      ":pdfium_xfa_fuzzer_src",
    ]
    if (pdf_enable_xfa_bmp) {
      deps += [ ":pdf_codec_bmp_fuzzer_src" ]
    }
    if (pdf_enable_xfa_gif) {
      deps += [
        ":pdf_codec_gif_fuzzer_src",
        ":pdf_lzw_fuzzer_src",
      ]
    }
    if (pdf_enable_xfa_png) {
      deps += [ ":pdf_codec_png_fuzzer_src" ]
    }
    if (pdf_enable_xfa_tiff) {
      deps += [ ":pdf_codec_tiff_fuzzer_src" ]
    }
  }
}

template("pdfium_public_fuzzer") {
  jumbo_source_set(target_name) {
    sources = invoker.sources + [
                "pdfium_fuzzer_helper.cc",
                "pdfium_fuzzer_helper.h",
              ]
    deps = [
      "../../:pdfium",
      "../../:test_support",
    ]
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
    testonly = true
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [
      "//build/config/compiler:no_chromium_code",
      ":fuzzer_config",
    ]
    if (pdf_enable_v8) {
      configs += [ "//v8:external_startup_data" ]
      deps += [
        "//v8",
        "//v8:v8_libplatform",
      ]
    }
  }
}

template("pdfium_fuzzer") {
  jumbo_source_set(target_name) {
    sources = invoker.sources + [ "pdf_fuzzer_init.cc" ]
    deps = [
      "../../:pdfium",
    ]
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
    testonly = true
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [
      "//build/config/compiler:no_chromium_code",
      ":fuzzer_config",
    ]
    if (pdf_enable_v8) {
      configs += [ "//v8:external_startup_data" ]
    }
  }
}

if (pdf_enable_xfa) {
  pdfium_fuzzer("pdf_bidi_fuzzer_src") {
    sources = [
      "pdf_bidi_fuzzer.cc",
    ]
  }

  pdfium_fuzzer("pdf_cfx_barcode_fuzzer_src") {
    sources = [
      "pdf_cfx_barcode_fuzzer.cc",
    ]
  }

  if (pdf_enable_xfa_bmp) {
    pdfium_fuzzer("pdf_codec_bmp_fuzzer_src") {
      sources = [
        "pdf_codec_bmp_fuzzer.cc",
        "xfa_codec_fuzzer.h",
      ]
      deps = [
        "../../:test_support",
      ]
    }
  }

  if (pdf_enable_xfa_gif) {
    pdfium_fuzzer("pdf_codec_gif_fuzzer_src") {
      sources = [
        "pdf_codec_gif_fuzzer.cc",
        "xfa_codec_fuzzer.h",
      ]
      deps = [
        "../../:test_support",
      ]
    }

    pdfium_fuzzer("pdf_lzw_fuzzer_src") {
      sources = [
        "pdf_lzw_fuzzer.cc",
      ]
    }
  }

  pdfium_fuzzer("pdf_codec_jpeg_fuzzer_src") {
    sources = [
      "pdf_codec_jpeg_fuzzer.cc",
      "xfa_codec_fuzzer.h",
    ]
    deps = [
      "../../:test_support",
    ]
  }

  if (pdf_enable_xfa_png) {
    pdfium_fuzzer("pdf_codec_png_fuzzer_src") {
      sources = [
        "pdf_codec_png_fuzzer.cc",
        "xfa_codec_fuzzer.h",
      ]
      deps = [
        "../../:test_support",
      ]
    }
  }

  if (pdf_enable_xfa_tiff) {
    pdfium_fuzzer("pdf_codec_tiff_fuzzer_src") {
      sources = [
        "pdf_codec_tiff_fuzzer.cc",
        "xfa_codec_fuzzer.h",
      ]
      deps = [
        "../../:test_support",
      ]
    }
  }

  pdfium_fuzzer("pdf_css_fuzzer_src") {
    sources = [
      "pdf_css_fuzzer.cc",
    ]
  }

  pdfium_fuzzer("pdf_fm2js_fuzzer_src") {
    sources = [
      "pdf_fm2js_fuzzer.cc",
    ]
  }

  pdfium_fuzzer("pdf_formcalc_fuzzer_src") {
    sources = [
      "pdf_formcalc_fuzzer.cc",
    ]
  }

  pdfium_public_fuzzer("pdfium_xfa_fuzzer_src") {
    sources = [
      "pdfium_xfa_fuzzer.cc",
    ]
  }
}

pdfium_fuzzer("pdf_cmap_fuzzer_src") {
  sources = [
    "pdf_cmap_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_codec_a85_fuzzer_src") {
  sources = [
    "pdf_codec_a85_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_codec_fax_fuzzer_src") {
  sources = [
    "pdf_codec_fax_fuzzer.cc",
  ]
}

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

pdfium_fuzzer("pdf_codec_jbig2_fuzzer_src") {
  sources = [
    "pdf_codec_jbig2_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_codec_rle_fuzzer_src") {
  sources = [
    "pdf_codec_rle_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_font_fuzzer_src") {
  sources = [
    "pdf_font_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_hint_table_fuzzer_src") {
  sources = [
    "pdf_hint_table_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_jpx_fuzzer_src") {
  sources = [
    "pdf_jpx_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_psengine_fuzzer_src") {
  sources = [
    "pdf_psengine_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_streamparser_fuzzer_src") {
  sources = [
    "pdf_streamparser_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_xml_fuzzer_src") {
  sources = [
    "pdf_xml_fuzzer.cc",
  ]
}

pdfium_public_fuzzer("pdfium_fuzzer_src") {
  sources = [
    "pdfium_fuzzer.cc",
  ]
}
