# 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/compiler/compiler.gni")
import("//build/config/win/manifest.gni")
import("//chrome/process_version_rc_template.gni")
import("//testing/test.gni")

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

process_version_rc_template("chrome_elf_resources") {
  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,
  ]
}

# Users of chrome_elf exports can depend on this target, which doesn't
# pin them to linking either chrome_elf.dll or test_stubs.
source_set("chrome_elf_main_include") {
  sources = [
    "chrome_elf_main.h",
  ]
}

# We should move chrome_result_codes.h to another target which does not bring
# in the world.
shared_library("chrome_elf") {
  sources = [
    "chrome_elf_main.cc",
    "chrome_elf_main.h",
  ]
  if (target_cpu == "x86") {
    sources += [ "chrome_elf_x86.def" ]
  } else {
    sources += [ "chrome_elf_x64.def" ]
  }

  deps = [
    ":blacklist",
    ":chrome_elf_manifest",
    ":chrome_elf_resources",
    ":constants",
    ":crash",
    ":hook_util",
    ":nt_registry",
    ":security",
    ":third_party_dlls",
    "//chrome/install_static:install_static_util",
    "//chrome/install_static:primary_module",
    "//components/crash/content/app:crash_export_thunks",
  ]

  configs += [ "//build/config/win:windowed" ]
  configs -= [ "//build/config/win:console" ]

  # Delay loads in this list will prevent user32.dll
  # from loading too early.
  ldflags = [
    "/DELAYLOAD:advapi32.dll",
    "/DELAYLOAD:dbghelp.dll",
    "/DELAYLOAD:rpcrt4.dll",
    "/DELAYLOAD:winmm.dll",
  ]
  if (current_cpu == "x86") {
    # Don"t set an x64 base address (to avoid breaking HE-ASLR).
    ldflags += [ "/BASE:0x01c20000" ]
  }
}

# For code that isn't Chrome-the browser, like test binaries, these stubs stand
# in for chrome_elf.;
static_library("test_stubs") {
  testonly = true

  sources = [
    "chrome_elf_main.h",
    "chrome_elf_test_stubs.cc",
  ]

  deps = [
    "//base",
    "//chrome/common:constants",
  ]
}

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

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

source_set("pe_image_safe") {
  sources = [
    "pe_image_safe/pe_image_safe.cc",
    "pe_image_safe/pe_image_safe.h",
  ]
}

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

source_set("sha1") {
  sources = [
    "sha1/sha1.cc",
    "sha1/sha1.h",
  ]
}

# This source_set defines third-party-related structures and APIs used from
# outside chrome_elf.dll.  The APIs are exported from chrome_elf (add a
# data_dep on //chrome_elf:chrome_elf), which will always be loaded before
# chrome.dll.
source_set("third_party_shared_defines") {
  sources = [
    "sha1/sha1.h",
    "third_party_dlls/logging_api.cc",
    "third_party_dlls/logging_api.h",
    "third_party_dlls/packed_list_format.cc",
    "third_party_dlls/packed_list_format.h",
  ]
}

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

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

static_library("blacklist") {
  sources = [
    "blacklist/blacklist.cc",
    "blacklist/blacklist.h",
    "blacklist/blacklist_interceptions.cc",
    "blacklist/blacklist_interceptions.h",
  ]
  public_deps = [
    "//sandbox",
  ]
  deps = [
    ":constants",
    ":crash",
    ":hook_util",
    ":nt_registry",
    "//base:base_static",  # pe_image
    "//chrome/install_static:install_static_util",
  ]
}

static_library("crash") {
  sources = [
    "../chrome/app/chrome_crash_reporter_client_win.cc",
    "../chrome/app/chrome_crash_reporter_client_win.h",
    "../chrome/common/chrome_result_codes.h",
    "crash/crash_helper.cc",
    "crash/crash_helper.h",
  ]
  deps = [
    ":hook_util",
    "//base",  # This needs to go.  DEP of app, crash_keys, client.
    "//base:base_static",  # pe_image
    "//chrome/install_static:install_static_util",
    "//components/crash/content/app",
    "//components/crash/core/common",  # crash_keys
    "//components/version_info:channel",
    "//content/public/common:result_codes",
    "//third_party/crashpad/crashpad/client",  # DumpWithoutCrash
  ]
}

static_library("hook_util") {
  sources = [
    "../base/macros.h",
    "hook_util/hook_util.cc",
    "hook_util/hook_util.h",
  ]
  deps = [
    ":nt_registry",  # utils
    "//base:base_static",  # pe_image
    "//sandbox",
  ]
}

# This target contains utility functions which must only depend on
# kernel32. Please don't add dependencies on other system libraries.
static_library("nt_registry") {
  sources = [
    "../sandbox/win/src/nt_internals.h",
    "nt_registry/nt_registry.cc",
    "nt_registry/nt_registry.h",
  ]
  if (is_official_build && full_wpo_on_official == true) {
    # This library doen't build with WPO enabled due to a MSVC compiler bug.
    # TODO(pennymac|sebmarchand): Remove this once MS has fixed this compiler
    # bug: https://connect.microsoft.com/VisualStudio/feedback/details/3104499
    configs -= [ "//build/config/compiler:default_optimization" ]
    configs += [ "//build/config/compiler:optimize_no_wpo" ]
  }

  libs = [ "kernel32.lib" ]
}

static_library("third_party_dlls") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  sources = [
    "third_party_dlls/hook.cc",
    "third_party_dlls/hook.h",
    "third_party_dlls/imes.cc",
    "third_party_dlls/imes.h",
    "third_party_dlls/logs.cc",
    "third_party_dlls/logs.h",
    "third_party_dlls/main.cc",
    "third_party_dlls/main.h",
    "third_party_dlls/packed_list_file.cc",
    "third_party_dlls/packed_list_file.h",
  ]
  public_deps = [
    ":blacklist",
    ":crash",
    ":hook_util",
    ":nt_registry",
    ":pe_image_safe",
    ":sha1",
    ":third_party_shared_defines",
    "//chrome/install_static:install_static_util",
  ]
}

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

test("chrome_elf_unittests") {
  output_name = "chrome_elf_unittests"
  sources = [
    "blacklist/test/blacklist_test.cc",
    "chrome_elf_util_unittest.cc",
    "hook_util/test/hook_util_test.cc",
    "nt_registry/nt_registry_unittest.cc",
    "pe_image_safe/pe_image_safe_unittest.cc",
    "run_all_unittests.cc",
    "sha1/sha1_unittest.cc",
    "third_party_dlls/imes_unittest.cc",
    "third_party_dlls/logs_unittest.cc",
    "third_party_dlls/main_unittest.cc",
    "third_party_dlls/main_unittest_exe.h",
    "third_party_dlls/packed_list_file_unittest.cc",
  ]
  include_dirs = [ "$target_gen_dir" ]
  deps = [
    ":blacklist",
    ":blacklist_test_main_dll",
    ":constants",
    ":crash",
    ":hook_util",
    ":hook_util_test_dll",
    ":nt_registry",
    ":pe_image_safe",
    ":security",
    ":sha1",
    ":third_party_dlls",
    ":third_party_shared_defines",
    "//base",
    "//base/test:test_support",
    "//chrome/common:version_header",
    "//chrome/install_static:install_static_util",
    "//chrome/install_static/test:test_support",
    "//components/crash/content/app:test_support",
    "//sandbox",
    "//testing/gtest",
  ]
  data_deps = [
    ":blacklist_test_dll_1",
    ":blacklist_test_dll_2",
    ":blacklist_test_dll_3",
    ":chrome_elf",
    ":main_unittest_dll_1",
    ":main_unittest_dll_2",
    ":third_party_dlls_test_exe",
  ]
}

test("chrome_elf_import_unittests") {
  output_name = "chrome_elf_import_unittests"
  sources = [
    "elf_imports_unittest.cc",
  ]
  include_dirs = [ "$target_gen_dir" ]
  deps = [
    "//base",
    "//base/test:test_support",
    "//chrome",
    "//chrome/install_static:install_static_util",
    "//chrome/install_static/test:test_support",
    "//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 = [
    ":chrome_elf",
  ]

  # Don't want the test-specific dependencies to affect ChromeElfLoadSanityTest.
  # In particular, a few system DLLs cause user32 to be loaded, which is bad.
  ldflags = [
    "/DELAYLOAD:advapi32.dll",
    "/DELAYLOAD:ole32.dll",
    "/DELAYLOAD:shell32.dll",
    "/DELAYLOAD:shlwapi.dll",
    "/DELAYLOAD:user32.dll",
    "/DELAYLOAD:winmm.dll",
  ]
}

shared_library("main_unittest_dll_1") {
  testonly = true
  sources = [
    "third_party_dlls/main_unittest_dll_1.cc",
  ]
}

shared_library("main_unittest_dll_2") {
  testonly = true
  sources = [
    "third_party_dlls/main_unittest_dll_2.cc",
    "third_party_dlls/main_unittest_dll_2.def",
  ]
}

executable("third_party_dlls_test_exe") {
  testonly = true
  sources = [
    "third_party_dlls/main_unittest_exe.cc",
    "third_party_dlls/main_unittest_exe.h",
  ]
  deps = [
    ":third_party_dlls",
    "//base",
    "//build/win:default_exe_manifest",
    "//chrome/install_static:install_static_util",
    "//components/crash/content/app:crash_export_stubs",
  ]
}

shared_library("blacklist_test_main_dll") {
  testonly = true
  sources = [
    "blacklist/test/blacklist_test_main_dll.cc",
    "blacklist/test/blacklist_test_main_dll.def",
    "blacklist/test/blacklist_test_main_dll.h",
  ]
  deps = [
    ":blacklist",
    ":nt_registry",
    "//base",
    "//chrome/install_static:install_static_util",
    "//components/crash/content/app:test_support",
  ]
}

loadable_module("blacklist_test_dll_1") {
  testonly = true
  sources = [
    "blacklist/test/blacklist_test_dll_1.cc",
    "blacklist/test/blacklist_test_dll_1.def",
  ]
}

loadable_module("blacklist_test_dll_2") {
  testonly = true
  sources = [
    "blacklist/test/blacklist_test_dll_2.cc",
    "blacklist/test/blacklist_test_dll_2.def",
  ]
}

# 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") {
  testonly = true
  sources = [
    "blacklist/test/blacklist_test_dll_3.cc",
  ]
}

shared_library("hook_util_test_dll") {
  testonly = true
  sources = [
    "hook_util/test/hook_util_test_dll.cc",
    "hook_util/test/hook_util_test_dll.h",
  ]
}
