# Copyright 2018 The Chromium OS 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("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":libpuffin-proto",
    ":libpuffdiff",
    ":libpuffpatch",
    ":puffin",
  ]
  if (use.test) {
    deps += [ ":puffin_test" ]
  }
  if (use.fuzzer) {
    deps += [ ":puffin_fuzzer" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libchrome-${libbase_ver}",
    "protobuf-lite",
  ]
  cflags = [ "-Wextra" ]
  cflags_cc = [ "-Wnon-virtual-dtor" ]
  include_dirs = [ "src/include" ]
  defines = [
    "USE_BRILLO",
    "_FILE_OFFSET_BITS=64",
  ]
}

proto_library("libpuffin-proto") {
  proto_in_dir = "src"
  proto_out_dir = "include/puffin/src"
  sources = [
    "src/puffin.proto",
  ]
}

pkg_config("libpuffpatch_config") {
  pkg_deps = [
    "libbspatch",
  ]
}

static_library("libpuffpatch") {
  configs += [
    "//common-mk:nouse_thin_archive",
    ":target_defaults",
    ":libpuffpatch_config",
  ]
  configs -= [ "//common-mk:use_thin_archive" ]
  complete_static_lib = true
  deps = [ ":libpuffin-proto" ]
  sources = [
    "src/bit_reader.cc",
    "src/bit_writer.cc",
    "src/huffer.cc",
    "src/huffman_table.cc",
    "src/puff_reader.cc",
    "src/puff_writer.cc",
    "src/puffer.cc",
    "src/puffin_stream.cc",
    "src/puffpatch.cc",
  ]
}

pkg_config("libpuffdiff_config") {
  pkg_deps = [
    "libbsdiff",
  ]
}
static_library("libpuffdiff") {
  configs += [
    "//common-mk:nouse_thin_archive",
    ":target_defaults",
    ":libpuffdiff_config",
  ]
  configs -= [ "//common-mk:use_thin_archive" ]
  deps = [
    ":libpuffpatch",
  ]
  sources = [
    "src/file_stream.cc",
    "src/memory_stream.cc",
    "src/puffdiff.cc",
    "src/utils.cc",
  ]
}

pkg_config("libbrillo") {
  pkg_deps = [
    "libbrillo-${libbase_ver}",
  ]
}

executable("puffin") {
  configs += [
    ":libbrillo",
    ":target_defaults",
  ]
  deps = [
    ":libpuffdiff",
  ]
  sources = [
    "src/extent_stream.cc",
    "src/main.cc",
  ]
}

if (use.test) {
  executable("puffin_test") {
    configs += [
      "//common-mk:test",
      ":libbrillo",
      ":target_defaults",
    ]
    sources = [
      "src/bit_io_unittest.cc",
      "src/extent_stream.cc",
      "src/patching_unittest.cc",
      "src/puff_io_unittest.cc",
      "src/puffin_unittest.cc",
      "src/stream_unittest.cc",
      "src/unittest_common.cc",
      "src/utils_unittest.cc",
    ]
    deps = [
      "//common-mk/testrunner",
      ":libpuffdiff",
    ]
  }
}

if (use.fuzzer) {
  executable("puffin_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":libbrillo",
      ":target_defaults",
    ]
    deps = [
      ":libpuffdiff",
    ]
    sources = [
      "src/fuzzer.cc",
    ]
  }
}
