# Copyright 2015 The Chromium 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/config/win/manifest.gni")
import("//chrome/version.gni")
import("//testing/test.gni")

process_version("chrome_elf_resources") {
  template_file = chrome_version_rc_template
  sources = [
    "chrome_elf.ver",
  ]
  output = "$target_gen_dir/chrome_elf_version.rc"
}

# This manifest matches what GYP produces. It may not even be necessary.
windows_manifest("chrome_elf_manifest") {
  sources = [
    as_invoker_manifest,
  ]
  type = "dll"
}

shared_library("chrome_elf") {
  sources = [
    "chrome_elf_main.cc",
    "chrome_elf_main.h",
  ]
  deps = [
    ":blacklist",
    ":breakpad",
    ":chrome_elf_manifest",
    ":chrome_elf_resources",
    ":common",
    "//build/config/sanitizers:deps",
  ]
  configs += [ "//build/config/win:windowed" ]
  configs -= [ "//build/config/win:console" ]
  ldflags = [
    "/NODEFAULTLIB:user32.lib",
    "/DEF:" + rebase_path("chrome_elf.def"),
  ]
  if (current_cpu == "x86") {
    # Don"t set an x64 base address (to avoid breaking HE-ASLR).
    ldflags += [ "/BASE:0x01c20000" ]
  }
}

source_set("constants") {
  sources = [
    "chrome_elf_constants.cc",
    "chrome_elf_constants.h",
  ]
}

source_set("common") {
  public_deps = [
    ":constants",
  ]
  deps = [
    "//base",
    "//sandbox",
  ]
  sources = [
    "chrome_elf_util.cc",
    "chrome_elf_util.h",
    "thunk_getter.cc",
    "thunk_getter.h",
  ]
}

source_set("breakpad") {
  include_dirs = [ "$target_gen_dir" ]
  sources = [
    "breakpad.cc",
    "breakpad.h",
  ]
  deps = [
    ":common",
    "//base",
    "//breakpad:breakpad_handler",
    "//chrome/common:version_header",
  ]
}

source_set("dll_hash") {
  deps = [
    "//base",
  ]
  sources = [
    "dll_hash/dll_hash.cc",
    "dll_hash/dll_hash.h",
  ]
}

executable("dll_hash_main") {
  sources = [
    "dll_hash/dll_hash_main.cc",
  ]
  deps = [
    ":dll_hash",
    "//build/config/sanitizers:deps",
  ]
}

static_library("blacklist") {
  sources = [
    "blacklist/blacklist.cc",
    "blacklist/blacklist.h",
    "blacklist/blacklist_interceptions.cc",
    "blacklist/blacklist_interceptions.h",
  ]
  public_deps = [
    "//sandbox",
  ]
  deps = [
    ":breakpad",
    ":common",
    ":constants",
    "//base",
  ]
}

test("chrome_elf_unittests") {
  output_name = "chrome_elf_unittests"
  sources = [
    "blacklist/test/blacklist_test.cc",
    "chrome_elf_util_unittest.cc",
    "elf_imports_unittest.cc",
  ]
  include_dirs = [ "$target_gen_dir" ]
  deps = [
    ":blacklist",
    ":blacklist_test_main_dll",
    ":common",
    "//base",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//chrome",
    "//chrome/common:version_header",
    "//sandbox",
    "//testing/gtest",
  ]

  # It's not easily possible to have //chrome in data_deps without changing
  # the //chrome target to bundle up both initial/chrome.exe and chrome.exe.
  # As a workaround, explicitly include a data dep on just chrome.exe, and
  # add //chrome to deps above to make sure it's been built.
  data = [
    "$root_out_dir/chrome.exe",
  ]
  data_deps = [
    ":blacklist_test_dll_1",
    ":blacklist_test_dll_2",
    ":blacklist_test_dll_3",
    ":chrome_elf",
  ]
}

shared_library("blacklist_test_main_dll") {
  sources = [
    "blacklist/test/blacklist_test_main_dll.cc",
  ]
  deps = [
    ":blacklist",
    ":common",
    "//base",
    "//build/config/sanitizers:deps",
  ]
  ldflags =
      [ "/DEF:" + rebase_path("blacklist/test/blacklist_test_main_dll.def",
                              root_build_dir) ]
}

shared_library("blacklist_test_dll_1") {
  sources = [
    "blacklist/test/blacklist_test_dll_1.cc",
  ]
  ldflags = [ "/DEF:" + rebase_path("blacklist/test/blacklist_test_dll_1.def",
                                    root_build_dir) ]
  deps = [
    "//build/config/sanitizers:deps",
  ]
}

shared_library("blacklist_test_dll_2") {
  sources = [
    "blacklist/test/blacklist_test_dll_2.cc",
  ]
  ldflags = [ "/DEF:" + rebase_path("blacklist/test/blacklist_test_dll_2.def",
                                    root_build_dir) ]
  deps = [
    "//build/config/sanitizers:deps",
  ]
}

shared_library("blacklist_test_dll_3") {
  sources = [
    "blacklist/test/blacklist_test_dll_3.cc",
  ]
  deps = [
    "//build/config/sanitizers:deps",
  ]
}
