# Copyright 2019 The Chromium 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/arm.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")

config("common_config") {
  if (is_win) {
    defines = [
      # Required to use math constants from math.h.
      "_USE_MATH_DEFINES",
    ]
  }

  # PFFFT doesn't support SIMD on mipsel, so build a scalar version.
  if ((current_cpu == "arm" && !arm_use_neon) || current_cpu == "mipsel") {
    defines = [ "PFFFT_SIMD_DISABLE" ]
  }
}

static_library("pffft") {
  configs += [ ":common_config" ]
  sources = [
    "src/pffft.c",
    "src/pffft.h",
  ]
}

# Fuzzing.

group("fuzzers") {
  testonly = true
  deps = [
    ":pffft_complex_fuzzer",
    ":pffft_real_fuzzer",
  ]
}

fuzzer_testdata_dir = "$target_gen_dir/testdata"

action("generate_pffft_fuzzer_corpus") {
  script = "generate_seed_corpus.py"
  sources = [
    "generate_seed_corpus.py",
  ]
  args = [ rebase_path(fuzzer_testdata_dir, root_build_dir) ]
  outputs = [
    fuzzer_testdata_dir,
  ]
}

fuzzer_test("pffft_complex_fuzzer") {
  sources = [
    "pffft_fuzzer.cc",
  ]
  cflags = [ "-DTRANSFORM_COMPLEX" ]
  deps = [
    ":pffft",
  ]
  seed_corpus = fuzzer_testdata_dir
  seed_corpus_deps = [ ":generate_pffft_fuzzer_corpus" ]
}

fuzzer_test("pffft_real_fuzzer") {
  sources = [
    "pffft_fuzzer.cc",
  ]
  cflags = [ "-DTRANSFORM_REAL" ]
  deps = [
    ":pffft",
  ]
  seed_corpus = fuzzer_testdata_dir
  seed_corpus_deps = [ ":generate_pffft_fuzzer_corpus" ]
}

# Unit tests and benchmark.

# This target must be used only for testing and benchmark purposes.
static_library("fftpack") {
  testonly = true
  configs += [ ":common_config" ]
  sources = [
    "src/fftpack.c",
    "src/fftpack.h",
  ]
  visibility = [ ":*" ]
}

executable("pffft_benchmark") {
  testonly = true
  configs += [ ":common_config" ]
  sources = [
    "src/test_pffft.c",
  ]
  deps = [
    ":fftpack",
    ":pffft",
  ]
}

test("pffft_unittest") {
  testonly = true
  sources = [
    "pffft_unittest.cc",
  ]
  deps = [
    ":fftpack",
    ":pffft",
    "//testing/gtest",
    "//testing/gtest:gtest_main",
  ]
}
