| # 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. |
| |
| import("//build/config/c++/c++.gni") |
| import("//build/config/compiler/compiler.gni") |
| import("//build/config/nacl/config.gni") |
| import("//components/nacl/features.gni") |
| import("//services/service_manager/public/service_manifest.gni") |
| import("//testing/test.gni") |
| |
| assert(enable_nacl) |
| |
| # 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_main_platform_delegate_linux.cc", |
| "nacl_main_platform_delegate_mac.mm", |
| "nacl_main_platform_delegate_win.cc", |
| "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", |
| "//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_linux) { |
| deps += [ "//services/service_manager/zygote" ] |
| } |
| } |
| |
| # 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 = [ |
| "//content/public/common/common_sandbox_support_linux.h", |
| "//content/public/common/main_function_params.h", |
| "//content/public/common/sandbox_init.h", |
| ] |
| |
| # Deps required by the above headers. |
| deps = [ |
| "//media:media_buildflags", |
| ] |
| } |
| |
| source_set("loader") { |
| public_deps = [ |
| ":minimal", |
| ] |
| deps = [ |
| "//components/nacl/common", |
| "//content/public/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_nacl_nonsfi) { |
| sources += [ |
| # TODO(hamaji): Currently, we build them twice. Stop building |
| # them for components_unittests. See crbug.com/364751 |
| "nonsfi/nonsfi_sandbox_sigsys_unittest.cc", |
| "nonsfi/nonsfi_sandbox_unittest.cc", |
| ] |
| |
| deps += [ |
| ":nacl_linux", |
| "//sandbox/linux:sandbox_linux_test_utils", |
| ] |
| } |
| } |
| |
| if (is_linux) { |
| 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", |
| "//crypto", |
| "//ipc", |
| "//mojo/core/embedder", |
| "//sandbox/linux:sandbox_services", |
| "//services/service_manager/sandbox", |
| "//services/service_manager/zygote", |
| "//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" ] |
| |
| # 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", |
| ] |
| } |
| |
| # For setting up nacl_helper. |
| source_set("nacl_helper_integration") { |
| public = [ |
| "nacl_helper_linux.h", |
| ] |
| data_deps = [ |
| ":nacl_helper", |
| ] |
| } |
| |
| if (enable_nacl_nonsfi) { |
| test("nacl_helper_nonsfi_unittests") { |
| sources = [ |
| "nonsfi/nacl_helper_nonsfi_unittests.cc", |
| ] |
| deps = [ |
| "//base", |
| "//base/test:test_launcher_nacl_nonsfi", |
| ] |
| data_deps = [ |
| ":nacl_helper_nonsfi_unittests_main_copy(//build/toolchain/nacl:newlib_pnacl_nonsfi)", |
| ] |
| } |
| |
| group("helper_nonsfi") { |
| data_deps = [ |
| ":nacl_helper_nonsfi_copy(//build/toolchain/nacl:newlib_pnacl_nonsfi)", |
| ] |
| } |
| } |
| } |
| |
| 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:static_switches", |
| "//mojo/core/embedder", |
| "//sandbox", |
| "//services/service_manager/sandbox:sandbox", |
| ] |
| } |
| } |
| |
| if (is_nacl_nonsfi) { |
| executable("nacl_helper_nonsfi_nexe") { |
| output_name = "nacl_helper_nonsfi" |
| set_sources_assignment_filter([]) |
| sources = [ |
| "nacl_helper_linux.cc", |
| "nacl_helper_linux.h", |
| "nacl_trusted_listener.cc", |
| "nacl_trusted_listener.h", |
| "nonsfi/nonsfi_listener.cc", |
| "nonsfi/nonsfi_listener.h", |
| "nonsfi/nonsfi_main.cc", |
| "nonsfi/nonsfi_main.h", |
| ] |
| deps = [ |
| ":nacl_helper_nonsfi_sandbox", |
| "//base", |
| "//components/nacl/common:minimal", |
| "//components/nacl/common:mojo_bindings", |
| "//components/nacl/common:switches", |
| "//components/tracing", |
| "//content", |
| "//ipc", |
| "//mojo/core/embedder", |
| "//native_client/src/nonsfi/irt:nacl_sys_private", |
| "//native_client/src/nonsfi/loader:elf_loader", |
| |
| # Normally libnacl is included implicitly by libc and is part of the |
| # toolchain. But //build/config/nacl:compiler uses -nodefaultlibs and so |
| # omits the default libnacl. When the nonsfi toolchain is more complete |
| # and that kludge is no longer required, this dependency should be |
| # removed. |
| "//native_client/src/untrusted/nacl", |
| "//ppapi/proxy", |
| "//sandbox/linux:sandbox", |
| "//services/service_manager/public/cpp", |
| "//services/service_manager/sandbox", |
| "//services/service_manager/zygote:zygote_util", |
| ] |
| } |
| |
| source_set("nacl_helper_nonsfi_sandbox") { |
| set_sources_assignment_filter([]) |
| sources = [ |
| "nonsfi/nonsfi_sandbox.cc", |
| "nonsfi/nonsfi_sandbox.h", |
| "sandbox_linux/nacl_sandbox_linux.cc", |
| "sandbox_linux/nacl_sandbox_linux.h", |
| ] |
| deps = [ |
| "//base", |
| "//components/nacl/common:minimal", |
| "//components/nacl/common:switches", |
| "//content", |
| "//sandbox/linux:sandbox", |
| "//sandbox/linux:sandbox_services_headers", |
| ] |
| } |
| |
| copy("nacl_helper_nonsfi_copy") { |
| sources = [ |
| "${root_out_dir}/nacl_helper_nonsfi", |
| ] |
| outputs = [ |
| "${root_build_dir}/{{source_file_part}}", |
| ] |
| deps = [ |
| ":nacl_helper_nonsfi_nexe", |
| ] |
| } |
| |
| test("nacl_helper_nonsfi_unittests_main") { |
| sources = [ |
| "nonsfi/nonsfi_sandbox_sigsys_unittest.cc", |
| "nonsfi/nonsfi_sandbox_unittest.cc", |
| "nonsfi/run_all_unittests.cc", |
| ] |
| deps = [ |
| ":nacl_helper_nonsfi_sandbox", |
| "//base", |
| "//base/test:test_support", |
| "//content", |
| "//native_client/src/nonsfi/irt:nacl_sys_private", |
| "//native_client/src/untrusted/nacl:nacl", |
| "//sandbox/linux:sandbox", |
| "//sandbox/linux:sandbox_linux_test_utils", |
| "//sandbox/linux:sandbox_services_headers", |
| "//testing/gtest", |
| ] |
| } |
| |
| copy("nacl_helper_nonsfi_unittests_main_copy") { |
| testonly = true |
| sources = [ |
| "${root_out_dir}/nacl_helper_nonsfi_unittests_main", |
| ] |
| outputs = [ |
| "${root_build_dir}/{{source_file_part}}", |
| ] |
| deps = [ |
| ":nacl_helper_nonsfi_unittests_main", |
| ] |
| } |
| } |
| |
| service_manifest("nacl_loader_manifest") { |
| name = "nacl_loader" |
| source = "nacl_loader_manifest.json" |
| } |