236 lines
6.6 KiB
Plaintext
236 lines
6.6 KiB
Plaintext
# Copyright 2015 The Chromium Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import("//build/config/c++/c++.gni")
|
|
import("//build/config/chromeos/ui_mode.gni")
|
|
import("//build/config/compiler/compiler.gni")
|
|
import("//build/config/nacl/config.gni")
|
|
import("//components/nacl/features.gni")
|
|
import("//components/nacl/toolchain.gni")
|
|
import("//testing/test.gni")
|
|
|
|
assert(enable_nacl)
|
|
|
|
if (current_cpu != "arm64") {
|
|
# This is separate so it can be used by ../broker:nacl64.
|
|
source_set("minimal") {
|
|
sources = [
|
|
"nacl_ipc_adapter.cc",
|
|
"nacl_ipc_adapter.h",
|
|
"nacl_listener.cc",
|
|
"nacl_listener.h",
|
|
"nacl_main.cc",
|
|
"nacl_main_platform_delegate.h",
|
|
"nacl_trusted_listener.cc",
|
|
"nacl_trusted_listener.h",
|
|
"nacl_validation_db.h",
|
|
"nacl_validation_query.cc",
|
|
"nacl_validation_query.h",
|
|
]
|
|
|
|
deps = [
|
|
":minimal_content_dummy",
|
|
"//base",
|
|
"//components/nacl/common:minimal",
|
|
"//components/nacl/common:mojo_bindings",
|
|
"//components/power_monitor",
|
|
"//content/public/common:main_function_params",
|
|
"//crypto",
|
|
"//ipc",
|
|
"//mojo/core/embedder",
|
|
"//native_client/src/trusted/service_runtime:sel_main_chrome",
|
|
"//ppapi/c",
|
|
"//ppapi/proxy:ipc",
|
|
"//sandbox",
|
|
"//services/service_manager/public/cpp",
|
|
]
|
|
|
|
if (is_win) {
|
|
sources += [ "nacl_main_platform_delegate_win.cc" ]
|
|
}
|
|
|
|
if (is_mac) {
|
|
sources += [ "nacl_main_platform_delegate_mac.mm" ]
|
|
}
|
|
|
|
if (is_linux || is_chromeos) {
|
|
sources += [ "nacl_main_platform_delegate_linux.cc" ]
|
|
}
|
|
}
|
|
|
|
# This exists just to make 'gn check' happy with :minimal and
|
|
# :nacl_helper_win_64 (below). They can't depend on //content/public/common
|
|
# or anything like that, because that would bring in lots more than counts
|
|
# as "minimal" (stuff that should not be in the nacl64.exe build).
|
|
source_set("minimal_content_dummy") {
|
|
check_includes = false
|
|
|
|
sources = []
|
|
|
|
if (is_win) {
|
|
sources += [ "//content/public/common/sandbox_init_win.h" ]
|
|
}
|
|
if (is_linux || is_chromeos) {
|
|
sources += [ "//content/public/common/zygote/sandbox_support_linux.h" ]
|
|
}
|
|
}
|
|
|
|
source_set("loader") {
|
|
public_deps = [ ":minimal" ]
|
|
deps = [
|
|
"//components/nacl/common",
|
|
"//ppapi/shared_impl",
|
|
"//services/service_manager/public/cpp",
|
|
]
|
|
|
|
data_deps = [
|
|
"//ppapi/native_client:irt",
|
|
"//ppapi/native_client/src/untrusted/pnacl_support_extension",
|
|
]
|
|
}
|
|
|
|
test("nacl_loader_unittests") {
|
|
sources = [
|
|
"nacl_ipc_adapter_unittest.cc",
|
|
"nacl_validation_query_unittest.cc",
|
|
"run_all_unittests.cc",
|
|
]
|
|
|
|
deps = [
|
|
":loader",
|
|
"//base/test:test_support",
|
|
"//ipc:test_support",
|
|
"//ppapi/c",
|
|
"//testing/gtest",
|
|
]
|
|
}
|
|
}
|
|
|
|
if ((is_linux || is_chromeos) && current_cpu != "arm64") {
|
|
executable("nacl_helper") {
|
|
sources = [
|
|
"nacl_helper_linux.cc",
|
|
"nacl_helper_linux.h",
|
|
]
|
|
|
|
deps = [
|
|
":loader",
|
|
"//base",
|
|
"//components/nacl/common:switches",
|
|
"//components/nacl/loader/sandbox_linux",
|
|
"//content/public/common:content_descriptors",
|
|
"//content/public/common:main_function_params",
|
|
"//content/public/common:sandbox_support_linux",
|
|
"//crypto",
|
|
"//ipc",
|
|
"//mojo/core/embedder",
|
|
"//sandbox/linux:sandbox_services",
|
|
"//sandbox/policy",
|
|
"//url/ipc:url_ipc",
|
|
]
|
|
|
|
if (is_chromeos) {
|
|
# NaCl is not working with compiler-rt in ChromeOS.
|
|
# Force libgcc as a workaround. See https://crbug.com/761103
|
|
ldflags = [
|
|
"-rtlib=libgcc",
|
|
"--unwindlib=libgcc",
|
|
]
|
|
|
|
# nacl_helper needs to link with libgcc_s. We already have -lgcc_s in
|
|
# the final link command line, but it was placed within "--as-needed"
|
|
# with the result that the dependency gets dropped. Similarly, we need
|
|
# to add this via "ldflags" and not "libs" because libraries added via
|
|
# the latter are also placed within an "--as-needed"'.
|
|
# See https://crbug.com/884017
|
|
ldflags += [ "-lgcc_s" ]
|
|
}
|
|
|
|
# The only symbols that nacl_helper needs to export are those specified by
|
|
# its direct dependencies, so -rdynamic would only serve to unnecessarily
|
|
# increase the binary size.
|
|
if (!export_libcxxabi_from_executables) {
|
|
configs -= [ "//build/config/compiler:export_dynamic" ]
|
|
}
|
|
|
|
data_deps =
|
|
[ "//native_client/src/trusted/service_runtime/linux:bootstrap" ]
|
|
|
|
# In order to build ARM32 nacl_helper for ARM64 Chrome OS, we need to
|
|
# minimize the dependencies on system libraries, including indirect
|
|
# dependencies through other parts of Chrome (see
|
|
# https://crbug.com/1339021).
|
|
assert_no_deps = [
|
|
"//content/public/common",
|
|
"//media/audio",
|
|
]
|
|
|
|
if (is_minimal_toolchain) {
|
|
assert_no_deps += [
|
|
"//net",
|
|
"//skia",
|
|
]
|
|
}
|
|
}
|
|
|
|
# For setting up nacl_helper.
|
|
source_set("nacl_helper_integration") {
|
|
public = [ "nacl_helper_linux.h" ]
|
|
data_deps = [ ":nacl_helper" ]
|
|
}
|
|
}
|
|
|
|
# In ARM64 Chrome, use the ARM32 versions of nacl_helper and
|
|
# nacl_helper_bootstrap. Copy them from the build directory for the
|
|
# ARM32 toolchain.
|
|
if ((is_linux || is_chromeos) && current_cpu == "arm64") {
|
|
if (default_toolchain == "//build/toolchain/cros:target") {
|
|
toolchain = "//build/toolchain/cros:nacl_helper_arm32"
|
|
} else {
|
|
toolchain = "//build/toolchain/linux:clang_arm"
|
|
}
|
|
|
|
copy("nacl_helper") {
|
|
label = ":nacl_helper($toolchain)"
|
|
out_dir = get_label_info(label, "root_out_dir")
|
|
sources = [ "${out_dir}/nacl_helper" ]
|
|
outputs = [ "${root_out_dir}/nacl_helper" ]
|
|
deps = [ label ]
|
|
data_deps = [
|
|
":nacl_helper_bootstrap",
|
|
"//ppapi/native_client/src/untrusted/pnacl_support_extension",
|
|
]
|
|
}
|
|
|
|
copy("nacl_helper_bootstrap") {
|
|
label = "//native_client/src/trusted/service_runtime/linux:bootstrap($toolchain)"
|
|
out_dir = get_label_info(label, "root_out_dir")
|
|
sources = [ "${out_dir}/nacl_helper_bootstrap" ]
|
|
outputs = [ "${root_out_dir}/nacl_helper_bootstrap" ]
|
|
deps = [ label ]
|
|
}
|
|
}
|
|
|
|
if (is_win && target_cpu == "x86" && current_cpu == "x64") {
|
|
source_set("nacl_helper_win_64") {
|
|
sources = [
|
|
"nacl_helper_win_64.cc",
|
|
"nacl_helper_win_64.h",
|
|
]
|
|
|
|
deps = [
|
|
":minimal",
|
|
":minimal_content_dummy",
|
|
"//base",
|
|
"//components/nacl/broker",
|
|
"//components/nacl/common:switches",
|
|
"//content/public/common:main_function_params",
|
|
"//content/public/common:static_switches",
|
|
"//mojo/core/embedder",
|
|
"//sandbox",
|
|
"//sandbox/policy",
|
|
]
|
|
}
|
|
}
|