# 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 if (target_cpu == "arm64") {
    sources += [ "chrome_elf_arm64.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/packed_list_format.cc",
    "third_party_dlls/packed_list_format.h",
    "third_party_dlls/public_api.cc",
    "third_party_dlls/public_api.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.
  no_default_deps = true
  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.
  no_default_deps = true
  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",
  ]
}
