# Copyright 2020 The Fuchsia 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/fuzzing/fuzzer.gni")
import("//build/host.gni")
import("//build/test.gni")
import("//src/sys/build/components.gni")

source_set("chunked-compression") {
  sources = [
    "chunked-archive.cc",
    "chunked-archive.h",
    "chunked-compressor.cc",
    "chunked-compressor.h",
    "chunked-decompressor.cc",
    "chunked-decompressor.h",
    "compression-params.cc",
    "compression-params.h",
    "status.h",
    "streaming-chunked-compressor.cc",
    "streaming-chunked-compressor.h",
  ]
  public_deps = [ "//zircon/public/lib/fbl" ]
  deps = [
    "//src/lib/fxl",
    "//third_party/zstd",
    "//zircon/public/lib/cksum",
    "//zircon/public/lib/fbl",
  ]

  if (is_fuchsia) {
    deps += [ "//zircon/system/ulib/syslog" ]
    public_deps += [ "//zircon/public/lib/zx" ]
  }
}

executable("chunked-compress") {
  sources = [ "main.cc" ]
  deps = [
    ":chunked-compression",
    "//zircon/public/lib/fbl",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

install_host_tools("chunked-compress-host-tool") {
  deps = [ ":chunked-compress" ]
  outputs = [ "chunked-compress" ]
}

source_set("chunked-compression-testutils") {
  testonly = true
  visibility = [ ":*" ]
  sources = [
    "test-utils.cc",
    "test-utils.h",
  ]
  public_deps = [
    ":chunked-compression",
    "//zircon/public/lib/fbl",
  ]
  deps = [ "//zircon/public/lib/cksum" ]
}

test("chunked-compression-unittests") {
  testonly = true
  output_name = "chunked-compression-unittests"
  sources = [
    "chunked-compressor-test.cc",
    "chunked-decompressor-test.cc",
    "compression-params-test.cc",
    "header-reader-test.cc",
    "header-writer-test.cc",
    "seek-table-test.cc",
    "streaming-chunked-compressor-test.cc",
  ]
  deps = [
    ":chunked-compression",
    ":chunked-compression-testutils",
    "//zircon/public/lib/cksum",
    "//zircon/public/lib/zxtest",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

fuchsia_unittest_package("chunked-compression-unittests-package") {
  package_name = "chunked-compression-unittests"
  deps = [ ":chunked-compression-unittests" ]
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

fuzzer("header-reader-fuzzer") {
  sources = [ "header-reader-fuzztest.cc" ]
  dictionary = "test_data/archive.dict"
  deps = [
    ":chunked-compression",
    ":chunked-compression-testutils",
    "//src/lib/fxl",
  ]
}

fuzzer("decompressor-fuzzer") {
  sources = [ "decompressor-fuzztest.cc" ]
  dictionary = "test_data/archive.dict"
  deps = [
    ":chunked-compression",
    ":chunked-compression-testutils",
    "//src/lib/fxl",
  ]
}

fuzzer("compress-decompress-fuzzer") {
  sources = [ "compress-decompress-fuzztest.cc" ]
  deps = [
    ":chunked-compression",
    ":chunked-compression-testutils",
  ]
}

fuzzer("compress-fuzzer") {
  sources = [ "compress-fuzztest.cc" ]
  deps = [
    ":chunked-compression",
    ":chunked-compression-testutils",
  ]
}

fuzzers_package("chunked-compression-fuzzers-package") {
  package_name = "chunked-compression-fuzzers"
  fuzzers = [
    ":compress-decompress-fuzzer",
    ":compress-fuzzer",
    ":decompressor-fuzzer",
    ":header-reader-fuzzer",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":chunked-compression-fuzzers-package",
    ":chunked-compression-unittests-package",
  ]
}
