# 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" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "fmap",
    "libbrillo-${libbase_ver}",
    "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",
    ]
  }
}
