# 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") import("//services/service_manager/public/service_manifest.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", "//ipc", "//mojo/public/cpp/platform", "//mojo/public/cpp/system", "//sandbox", "//services/service_manager/public/cpp", "//services/service_manager/zygote:zygote_buildflags", ] 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", ] if (symbol_level != 0) { sources += [ "$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", "//sandbox", "//services/service_manager/sandbox", "//services/service_manager/zygote:zygote_buildflags", ] } 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", ] } } service_manifest("nacl_broker_manifest") { name = "nacl_broker" source = "nacl_broker_manifest.json" }