# 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.

# Chrome elf targets (excepting tests) should only link in kernel32.
# Please don't add dependencies on any other system libraries.

import("//build/config/win/manifest.gni")
import("//chrome/version.gni")
import("//testing/test.gni")

##------------------------------------------------------------------------------
## chrome_elf
##------------------------------------------------------------------------------

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

# We should move chrome_result_codes.h to another target which does not bring
# in the world.
shared_library("chrome_elf") {
  sources = [
    "//chrome/app/chrome_crash_reporter_client_win.cc",
    "//chrome/app/chrome_crash_reporter_client_win.h",
    "//chrome/common/chrome_result_codes.h",
    "chrome_elf.def",
    "chrome_elf_main.cc",
    "chrome_elf_main.h",
  ]
  deps = [
    ":blacklist",
    ":chrome_elf_manifest",
    ":chrome_elf_resources",
    ":chrome_elf_security",
    ":constants",
    ":hook_util",
    "//base",
    "//build/config/sanitizers:deps",
    "//chrome/install_static:install_static_util",
    "//chrome_elf/nt_registry:nt_registry",
    "//components/crash/content/app",
    "//components/crash/core/common",
    "//content/public/common:result_codes",
    "//third_party/crashpad/crashpad/client:client",
  ]
  configs += [ "//build/config/win:windowed" ]
  configs -= [ "//build/config/win:console" ]
  ldflags = [
    "/NODEFAULTLIB:user32.lib",
    "/DELAYLOAD:dbghelp.dll",
    "/DELAYLOAD:ole32.dll",
    "/DELAYLOAD:psapi.dll",
    "/DELAYLOAD:rpcrt4.dll",
    "/DELAYLOAD:shell32.dll",
    "/DELAYLOAD:user32.dll",
    "/DELAYLOAD:winhttp.dll",
    "/DELAYLOAD:winmm.dll",
    "/DELAYLOAD:ws2_32.dll",
  ]
  if (current_cpu == "x86") {
    # Don"t set an x64 base address (to avoid breaking HE-ASLR).
    ldflags += [ "/BASE:0x01c20000" ]
  }
}

##------------------------------------------------------------------------------
## source sets
##------------------------------------------------------------------------------

source_set("chrome_elf_security") {
  sources = [
    "chrome_elf_security.cc",
    "chrome_elf_security.h",
  ]
  deps = [
    ":constants",
    "//chrome_elf/nt_registry:nt_registry",
  ]
}

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

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

##------------------------------------------------------------------------------
## chrome_elf sub targets
##------------------------------------------------------------------------------

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

static_library("blacklist") {
  sources = [
    "blacklist/blacklist.cc",
    "blacklist/blacklist.h",
    "blacklist/blacklist_interceptions.cc",
    "blacklist/blacklist_interceptions.h",
    "blacklist/crashpad_helper.cc",
    "blacklist/crashpad_helper.h",
  ]
  public_deps = [
    "//sandbox",
  ]
  deps = [
    ":constants",
    ":hook_util",
    "//chrome/install_static:install_static_util",
    "//chrome_elf/nt_registry:nt_registry",

    # Still uses base/win/pe_image.h
    "//base",
    "//third_party/crashpad/crashpad/client:client",
  ]
}

static_library("hook_util") {
  sources = [
    "hook_util/thunk_getter.cc",
    "hook_util/thunk_getter.h",
  ]
  deps = [
    "//sandbox",
  ]
}

##------------------------------------------------------------------------------
## tests
##------------------------------------------------------------------------------

test("chrome_elf_unittests") {
  output_name = "chrome_elf_unittests"
  sources = [
    "blacklist/test/blacklist_test.cc",
    "chrome_elf_util_unittest.cc",
    "elf_imports_unittest.cc",
    "run_all_unittests.cc",
  ]
  include_dirs = [ "$target_gen_dir" ]
  deps = [
    ":blacklist",
    ":blacklist_test_main_dll",
    ":chrome_elf_security",
    ":constants",
    ":hook_util",
    "//base",
    "//base/test:test_support",
    "//chrome",
    "//chrome/common:version_header",
    "//chrome/install_static:install_static_util",
    "//chrome_elf/nt_registry:nt_registry",
    "//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",
  ]
  ldflags = [
    "/DELAYLOAD:dbghelp.dll",
    "/DELAYLOAD:ole32.dll",
    "/DELAYLOAD:psapi.dll",
    "/DELAYLOAD:rpcrt4.dll",
    "/DELAYLOAD:shell32.dll",
    "/DELAYLOAD:shlwapi.dll",
    "/DELAYLOAD:user32.dll",
    "/DELAYLOAD:winhttp.dll",
    "/DELAYLOAD:winmm.dll",
    "/DELAYLOAD:ws2_32.dll",
  ]
}

shared_library("blacklist_test_main_dll") {
  sources = [
    "blacklist/test/blacklist_test_main_dll.cc",
    "blacklist/test/blacklist_test_main_dll.def",
  ]
  deps = [
    ":blacklist",
    "//base",
    "//build/config/sanitizers:deps",
    "//chrome/install_static:install_static_util",
    "//chrome_elf/nt_registry:nt_registry",
  ]
  ldflags = [
    "/NODEFAULTLIB:user32.lib",
    "/DELAYLOAD:dbghelp.dll",
    "/DELAYLOAD:ole32.dll",
    "/DELAYLOAD:psapi.dll",
    "/DELAYLOAD:rpcrt4.dll",
    "/DELAYLOAD:shell32.dll",
    "/DELAYLOAD:user32.dll",
    "/DELAYLOAD:winhttp.dll",
    "/DELAYLOAD:winmm.dll",
    "/DELAYLOAD:ws2_32.dll",
  ]
}

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

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

# As-is, this does not generate a .lib file because there are no exports and no
# .def file. The current definition of loadable_module does not declare a .lib
# file as an output, so this is OK. If it did (or if this used shared_library
# which does), Ninja would get confused and always rebuild this target because
# it sees a declared output file but that file doesn't exist on disk.
loadable_module("blacklist_test_dll_3") {
  sources = [
    "blacklist/test/blacklist_test_dll_3.cc",
  ]
  deps = [
    "//build/config/sanitizers:deps",
  ]
}
