# 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") {
  # NOSORT
  pkg_deps = [
    "fmap",
    "libbrillo",
    "libchrome",
    "libmetrics",
    "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") {
  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",
  ]
  configs += [ ":target_defaults" ]
  configs -= [ "//common-mk:pie" ]
  cflags = [ "-fPIC" ]
}

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

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

if (use.test) {
  executable("unittest_runner") {
    sources = [
      "curve25519_test.cc",
      "hammer_updater_test.cc",
      "pair_utils_test.cc",
      "update_fw_test.cc",
    ]
    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",
    ]
    deps = [
      ":libhammerd",
      "//common-mk/testrunner",
    ]
  }
}

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