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

# 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 = [
    ":sha1",
    ":third_party_shared_defines",
    "//base",
    "//chrome/common:constants",
  ]
}

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

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

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

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

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

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/win:default_exe_manifest",
  ]
}

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
  ]
  public_deps = [
    "//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" ]
}

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

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

# 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",
    "third_party_dlls/status_codes.cc",
    "third_party_dlls/status_codes.h",
  ]
}

##------------------------------------------------------------------------------
## 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/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",
    ":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 = [
    ":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",
  ]
}

##------------------------------------------------------------------------------
## tests - data_deps
##------------------------------------------------------------------------------

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

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

  # Disable sanitizer instrumentation in the test DLLs to avoid unwanted
  # exports.
  configs -= [
    "//build/config/sanitizers:default_sanitizer_flags",
    "//build/config:shared_library_config",
  ]
}

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

  # Disable sanitizer instrumentation in the test DLLs to avoid unwanted
  # exports.
  configs -= [
    "//build/config/sanitizers:default_sanitizer_flags",
    "//build/config:shared_library_config",
  ]
}

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",
    "//base/test:test_support",
    "//build/win:default_exe_manifest",
    "//chrome/install_static:install_static_util",
    "//components/crash/content/app:crash_export_stubs",
  ]
}
