# 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 = [ ":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/core/app:crash_export_thunks", ] configs += [ "//build/config/win:windowed" ] configs -= [ "//build/config/win:console" ] configs += [ "//build/config/win:delayloads", "//build/config/win:delayloads_not_for_child_dll", ] if (current_cpu == "x86") { # Don"t set an x64 base address (to avoid breaking HE-ASLR). ldflags = [ "/BASE:0x01c20000" ] } } ##------------------------------------------------------------------------------ ## chrome_elf sub targets ##------------------------------------------------------------------------------ source_set("constants") { sources = [ "blocklist_constants.cc", "blocklist_constants.h", "chrome_elf_constants.cc", "chrome_elf_constants.h", ] } static_library("crash") { sources = [ "../app/chrome_crash_reporter_client_win.cc", "../app/chrome_crash_reporter_client_win.h", "../common/chrome_result_codes.h", "crash/crash_helper.cc", "crash/crash_helper.h", ] deps = [ ":constants", ":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/core/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 = [ "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", ] 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", ] } source_set("third_party_dlls") { visibility = [ ":*" ] # Only targets in this file can depend on this. sources = [ "third_party_dlls/beacon.cc", "third_party_dlls/beacon.h", "third_party_dlls/hardcoded_blocklist.cc", "third_party_dlls/hardcoded_blocklist.h", "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 = [ ":constants", ":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/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 = [ "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/beacon_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 = [ ":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/core/app:test_support", "//sandbox", "//testing/gtest", ] data_deps = [ ":chrome_elf", ":main_unittest_dll_1", ":main_unittest_dll_2", ":third_party_dlls_test_exe", ] } ##------------------------------------------------------------------------------ ## 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/core/app:crash_export_stubs", ] }