# 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")

group("all") {
  deps = [
    ":hammerd",
    ":libhammerd",
  ]
  if (use.hammerd_api) {
    deps += [ ":libhammerd-api" ]
  }
  if (use.test) {
    deps += [ ":unittest_runner" ]
  }
  if (use.fuzzer) {
    deps += [
      ":hammerd_load_ec_image_fuzzer",
      ":hammerd_update_fw_fuzzer",
    ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "fmap",
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libmetrics-${libbase_ver}",
    "libpcrecpp",
    "openssl",

    # system_api depends on protobuf (or protobuf-lite). It must appear
    # before protobuf here or the linker flags won't be in the right
    # order.
    "system_api",
    "protobuf-lite",
  ]
}

static_library("libhammerd") {
  configs += [ ":target_defaults" ]
  configs -= [ "//common-mk:pie" ]
  sources = [
    # TODO(crbug.com/649672): Upgrade to OpenSSL 1.1 support curve25519.
    "curve25519.c",
    "dbus_wrapper.cc",
    "fmap_utils.cc",
    "hammer_updater.cc",
    "pair_utils.cc",
    "process_lock.cc",
    "update_fw.cc",
    "usb_utils.cc",
  ]
  cflags = [ "-fPIC" ]
}

executable("hammerd") {
  configs += [ ":target_defaults" ]
  sources = [
    "main.cc",
  ]
  deps = [
    ":libhammerd",
  ]
}

if (use.hammerd_api) {
  shared_library("libhammerd-api") {
    configs += [ ":target_defaults" ]
    sources = [
      "hammerd_api.cc",
    ]
    deps = [
      ":libhammerd",
    ]
  }
}

if (use.test) {
  executable("unittest_runner") {
    configs += [
      # //common-mk:test should be at the top. crbug.com/887845
      # TODO(crbug.com/887845): Remove this note after library order issue is resolved.
      "//common-mk:test",
      ":target_defaults",
    ]
    sources = [
      "curve25519_test.cc",
      "hammer_updater_test.cc",
      "pair_utils_test.cc",
      "update_fw_test.cc",
    ]
    deps = [
      ":libhammerd",
      "//common-mk/testrunner",
    ]
  }
}

if (use.fuzzer) {
  executable("hammerd_load_ec_image_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    sources = [
      "update_fw_load_ec_image_fuzzer.cc",
    ]
    deps = [
      ":libhammerd",
    ]
  }
  executable("hammerd_update_fw_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    sources = [
      "update_fw_fuzzer.cc",
    ]
    deps = [
      ":libhammerd",
    ]
  }
}
