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