| # Copyright 2016 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/compiler/compiler.gni") |
| import("//components/nacl/features.gni") |
| |
| # This file builds nacl64.exe, which is a 64-bit x86 Windows executable |
| # used only in the 32-bit x86 Windows build. The :broker code runs both |
| # in nacl64.exe and in the 32-bit chrome executable, to launch |
| # nacl64.exe and communicate with it. |
| |
| assert(enable_nacl) |
| assert(is_win) |
| assert(target_cpu == "x86") |
| |
| source_set("broker") { |
| sources = [ |
| "nacl_broker_listener.cc", |
| "nacl_broker_listener.h", |
| ] |
| |
| deps = [ |
| "//base", |
| "//components/nacl/common:debug_exception_handler", |
| "//components/nacl/common:minimal", |
| "//components/nacl/common:switches", |
| "//content/public/common:static_switches", |
| "//content/public/common/zygote:buildflags", |
| "//ipc", |
| "//mojo/public/cpp/platform", |
| "//mojo/public/cpp/system", |
| "//sandbox", |
| "//services/service_manager/public/cpp", |
| ] |
| |
| if (current_cpu == target_cpu) { |
| deps += [ "//content/public/common" ] |
| } else { |
| deps += [ ":content_dummy" ] |
| } |
| } |
| |
| # This exists just to make 'gn check' happy with :broker. It can't depend |
| # on //content/public/common or anything like that, because that would |
| # bring in lots more stuff that should not be in the nacl64.exe build. |
| source_set("content_dummy") { |
| check_includes = false |
| sources = [ |
| "//content/public/common/sandbox_init.h", |
| "//content/public/common/sandboxed_process_launcher_delegate.h", |
| ] |
| } |
| |
| if (current_cpu == "x86") { |
| # Tests, packaging rules, etc. will expect to find nacl64.exe in the root |
| # of the output directory. It gets built in a non-default toolchain and |
| # so will be delivered in the toolchain output subdirectory. So this |
| # just copies it to the expected place. Having this target also makes |
| # it simpler for things to depend on nacl64, since they don't have to |
| # use a toolchain qualifier. |
| copy("nacl64") { |
| # NOTE: This must match what //build/config/BUILDCONFIG.gn uses |
| # as default toolchain for the corresponding x64 build. |
| if (is_clang) { |
| x64_toolchain = "//build/toolchain/win:win_clang_nacl_win64" |
| } else { |
| x64_toolchain = "//build/toolchain/win:nacl_win64" |
| } |
| nacl64_label = ":nacl64($x64_toolchain)" |
| nacl64_out_dir = get_label_info(nacl64_label, "root_out_dir") |
| sources = [ |
| "$nacl64_out_dir/nacl64.exe", |
| "$nacl64_out_dir/nacl64.exe.pdb", |
| ] |
| outputs = [ "$root_out_dir/{{source_file_part}}" ] |
| deps = [ nacl64_label ] |
| } |
| } else if (current_cpu == "x64") { |
| # In the x64 toolchain context, build nacl64.exe for real. |
| executable("nacl64") { |
| configs += [ "//build/config/win:windowed" ] |
| |
| # //build/config/compiler:optimize{,_max} adds this for official builds |
| # only, as it only reduces binary size and is not necessary for |
| # correctness. But for nacl64.exe, it makes more than a six-fold |
| # difference in the binary size, so always use it in release builds. |
| # Note that using this flag disables incremental linking. In debug |
| # builds, incremental rebuild time is usually of more concern than |
| # binary size, so incremental linking is preferable to size reduction. |
| if (!is_debug) { |
| ldflags = [ "/OPT:REF" ] |
| } |
| |
| sources = [ "//chrome/nacl/nacl_exe_win_64.cc" ] |
| |
| deps = [ |
| ":broker", |
| ":nacl64_content", |
| ":nacl64_crash_reporter_client", |
| "//base", |
| "//build/win:default_exe_manifest", |
| "//chrome:nacl64_exe_version", |
| "//chrome/install_static:install_static_util", |
| "//components/crash/content/app:deprecated_breakpad_win", |
| "//components/nacl/loader:nacl_helper_win_64", |
| "//content/public/common:static_features", |
| "//content/public/common:static_switches", |
| "//ppapi/proxy:ipc", |
| "//sandbox", |
| "//third_party/breakpad:breakpad_handler", |
| ] |
| } |
| |
| # This is a tiny subset of //content built specially for nacl64.exe. |
| # There are no subcomponents of //content small enough to get just |
| # what nacl64.exe needs without bringing in other stuff that causes |
| # problems for the build. |
| source_set("nacl64_content") { |
| sources = [ |
| "//content/app/sandbox_helper_win.cc", |
| "//content/common/sandbox_init_win.cc", |
| "//content/public/common/sandboxed_process_launcher_delegate.cc", |
| "//services/service_manager/sandbox/win/sandbox_win.cc", |
| ] |
| |
| defines = [ |
| "COMPILE_CONTENT_STATICALLY", |
| "NACL_WIN64", |
| ] |
| |
| # This defangs 'gn check', which does not like this cherry-picking. |
| # All the source files here are part of other proper components |
| # under //content, where their #include discipline will be checked. |
| check_includes = false |
| |
| deps = [ |
| "//base", |
| "//content/public/common:static_switches", |
| "//content/public/common/zygote:buildflags", |
| "//sandbox", |
| "//services/service_manager/sandbox", |
| ] |
| } |
| |
| source_set("nacl64_crash_reporter_client") { |
| sources = [ |
| "//chrome/app/chrome_crash_reporter_client_win.cc", |
| "//chrome/common/crash_keys.cc", |
| ] |
| |
| defines = [ "NACL_WIN64" ] |
| |
| check_includes = false |
| |
| deps = [ |
| "//chrome/common:constants", |
| "//chrome/install_static:install_static_util", |
| "//chrome/installer/util:with_no_strings", |
| "//components/browser_watcher:browser_watcher_client", |
| "//components/flags_ui:switches", |
| "//components/policy:generated", |
| "//content/public/common:static_switches", |
| "//ipc", |
| ] |
| } |
| } |