mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 14:26:09 +03:00
409 lines
10 KiB
Plaintext
409 lines
10 KiB
Plaintext
# 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",
|
|
]
|
|
}
|