blob: 5cc27bdf330d2cf70d2459ad86c098a2e294b632 [file] [log] [blame]
# 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/win/manifest.gni")
import("//chrome/version.gni")
import("//testing/test.gni")
##------------------------------------------------------------------------------
## chrome_elf
##------------------------------------------------------------------------------
process_version("chrome_elf_resources") {
template_file = chrome_version_rc_template
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,
]
type = "dll"
}
# We should move chrome_result_codes.h to another target which does not bring
# in the world.
shared_library("chrome_elf") {
sources = [
"//chrome/app/chrome_crash_reporter_client_win.cc",
"//chrome/app/chrome_crash_reporter_client_win.h",
"//chrome/common/chrome_result_codes.h",
"chrome_elf.def",
"chrome_elf_main.cc",
"chrome_elf_main.h",
]
deps = [
":blacklist",
":chrome_elf_manifest",
":chrome_elf_resources",
":chrome_elf_security",
":constants",
":hook_util",
"//base",
"//build/config/sanitizers:deps",
"//chrome/install_static:install_static_util",
"//chrome_elf/nt_registry:nt_registry",
"//components/crash/content/app",
"//components/crash/core/common",
"//content/public/common:result_codes",
"//third_party/crashpad/crashpad/client:client",
]
configs += [ "//build/config/win:windowed" ]
configs -= [ "//build/config/win:console" ]
ldflags = [
"/NODEFAULTLIB:user32.lib",
"/DELAYLOAD:dbghelp.dll",
"/DELAYLOAD:ole32.dll",
"/DELAYLOAD:psapi.dll",
"/DELAYLOAD:rpcrt4.dll",
"/DELAYLOAD:shell32.dll",
"/DELAYLOAD:user32.dll",
"/DELAYLOAD:winhttp.dll",
"/DELAYLOAD:winmm.dll",
"/DELAYLOAD:ws2_32.dll",
]
if (current_cpu == "x86") {
# Don"t set an x64 base address (to avoid breaking HE-ASLR).
ldflags += [ "/BASE:0x01c20000" ]
}
}
##------------------------------------------------------------------------------
## source sets
##------------------------------------------------------------------------------
source_set("chrome_elf_security") {
sources = [
"chrome_elf_security.cc",
"chrome_elf_security.h",
]
deps = [
":constants",
"//chrome_elf/nt_registry:nt_registry",
]
}
source_set("constants") {
sources = [
"chrome_elf_constants.cc",
"chrome_elf_constants.h",
]
}
source_set("dll_hash") {
deps = [
"//base",
]
sources = [
"dll_hash/dll_hash.cc",
"dll_hash/dll_hash.h",
]
}
##------------------------------------------------------------------------------
## chrome_elf sub targets
##------------------------------------------------------------------------------
executable("dll_hash_main") {
sources = [
"dll_hash/dll_hash_main.cc",
]
deps = [
":dll_hash",
"//build/config/sanitizers:deps",
"//build/win:default_exe_manifest",
]
}
static_library("blacklist") {
sources = [
"blacklist/blacklist.cc",
"blacklist/blacklist.h",
"blacklist/blacklist_interceptions.cc",
"blacklist/blacklist_interceptions.h",
"blacklist/crashpad_helper.cc",
"blacklist/crashpad_helper.h",
]
public_deps = [
"//sandbox",
]
deps = [
":constants",
":hook_util",
"//chrome/install_static:install_static_util",
"//chrome_elf/nt_registry:nt_registry",
# Still uses base/win/pe_image.h
"//base",
"//third_party/crashpad/crashpad/client:client",
]
}
static_library("hook_util") {
sources = [
"hook_util/thunk_getter.cc",
"hook_util/thunk_getter.h",
]
deps = [
"//sandbox",
]
}
##------------------------------------------------------------------------------
## tests
##------------------------------------------------------------------------------
test("chrome_elf_unittests") {
output_name = "chrome_elf_unittests"
sources = [
"blacklist/test/blacklist_test.cc",
"chrome_elf_util_unittest.cc",
"elf_imports_unittest.cc",
"run_all_unittests.cc",
]
include_dirs = [ "$target_gen_dir" ]
deps = [
":blacklist",
":blacklist_test_main_dll",
":chrome_elf_security",
":constants",
":hook_util",
"//base",
"//base/test:test_support",
"//chrome",
"//chrome/common:version_header",
"//chrome/install_static:install_static_util",
"//chrome_elf/nt_registry:nt_registry",
"//sandbox",
"//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 = [
":blacklist_test_dll_1",
":blacklist_test_dll_2",
":blacklist_test_dll_3",
":chrome_elf",
]
ldflags = [
"/DELAYLOAD:dbghelp.dll",
"/DELAYLOAD:ole32.dll",
"/DELAYLOAD:psapi.dll",
"/DELAYLOAD:rpcrt4.dll",
"/DELAYLOAD:shell32.dll",
"/DELAYLOAD:shlwapi.dll",
"/DELAYLOAD:user32.dll",
"/DELAYLOAD:winhttp.dll",
"/DELAYLOAD:winmm.dll",
"/DELAYLOAD:ws2_32.dll",
]
}
shared_library("blacklist_test_main_dll") {
sources = [
"blacklist/test/blacklist_test_main_dll.cc",
"blacklist/test/blacklist_test_main_dll.def",
]
deps = [
":blacklist",
"//base",
"//build/config/sanitizers:deps",
"//chrome/install_static:install_static_util",
"//chrome_elf/nt_registry:nt_registry",
]
ldflags = [
"/NODEFAULTLIB:user32.lib",
"/DELAYLOAD:dbghelp.dll",
"/DELAYLOAD:ole32.dll",
"/DELAYLOAD:psapi.dll",
"/DELAYLOAD:rpcrt4.dll",
"/DELAYLOAD:shell32.dll",
"/DELAYLOAD:user32.dll",
"/DELAYLOAD:winhttp.dll",
"/DELAYLOAD:winmm.dll",
"/DELAYLOAD:ws2_32.dll",
]
}
loadable_module("blacklist_test_dll_1") {
sources = [
"blacklist/test/blacklist_test_dll_1.cc",
"blacklist/test/blacklist_test_dll_1.def",
]
deps = [
"//build/config/sanitizers:deps",
]
}
loadable_module("blacklist_test_dll_2") {
sources = [
"blacklist/test/blacklist_test_dll_2.cc",
"blacklist/test/blacklist_test_dll_2.def",
]
deps = [
"//build/config/sanitizers:deps",
]
}
# As-is, this does not generate a .lib file because there are no exports and no
# .def file. The current definition of loadable_module does not declare a .lib
# file as an output, so this is OK. If it did (or if this used shared_library
# which does), Ninja would get confused and always rebuild this target because
# it sees a declared output file but that file doesn't exist on disk.
loadable_module("blacklist_test_dll_3") {
sources = [
"blacklist/test/blacklist_test_dll_3.cc",
]
deps = [
"//build/config/sanitizers:deps",
]
}