1*6777b538SAndroid Build Coastguard Worker# Copyright 2015 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Workerimport("//build/config/c++/c++.gni") 6*6777b538SAndroid Build Coastguard Workerimport("//build/config/chromeos/ui_mode.gni") 7*6777b538SAndroid Build Coastguard Workerimport("//build/config/compiler/compiler.gni") 8*6777b538SAndroid Build Coastguard Workerimport("//build/config/nacl/config.gni") 9*6777b538SAndroid Build Coastguard Workerimport("//components/nacl/features.gni") 10*6777b538SAndroid Build Coastguard Workerimport("//components/nacl/toolchain.gni") 11*6777b538SAndroid Build Coastguard Workerimport("//testing/test.gni") 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Workerassert(enable_nacl) 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Workerif (current_cpu != "arm64") { 16*6777b538SAndroid Build Coastguard Worker # This is separate so it can be used by ../broker:nacl64. 17*6777b538SAndroid Build Coastguard Worker source_set("minimal") { 18*6777b538SAndroid Build Coastguard Worker sources = [ 19*6777b538SAndroid Build Coastguard Worker "nacl_ipc_adapter.cc", 20*6777b538SAndroid Build Coastguard Worker "nacl_ipc_adapter.h", 21*6777b538SAndroid Build Coastguard Worker "nacl_listener.cc", 22*6777b538SAndroid Build Coastguard Worker "nacl_listener.h", 23*6777b538SAndroid Build Coastguard Worker "nacl_main.cc", 24*6777b538SAndroid Build Coastguard Worker "nacl_main_platform_delegate.h", 25*6777b538SAndroid Build Coastguard Worker "nacl_trusted_listener.cc", 26*6777b538SAndroid Build Coastguard Worker "nacl_trusted_listener.h", 27*6777b538SAndroid Build Coastguard Worker "nacl_validation_db.h", 28*6777b538SAndroid Build Coastguard Worker "nacl_validation_query.cc", 29*6777b538SAndroid Build Coastguard Worker "nacl_validation_query.h", 30*6777b538SAndroid Build Coastguard Worker ] 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker deps = [ 33*6777b538SAndroid Build Coastguard Worker ":minimal_content_dummy", 34*6777b538SAndroid Build Coastguard Worker "//base", 35*6777b538SAndroid Build Coastguard Worker "//components/nacl/common:minimal", 36*6777b538SAndroid Build Coastguard Worker "//components/nacl/common:mojo_bindings", 37*6777b538SAndroid Build Coastguard Worker "//components/power_monitor", 38*6777b538SAndroid Build Coastguard Worker "//content/public/common:main_function_params", 39*6777b538SAndroid Build Coastguard Worker "//crypto", 40*6777b538SAndroid Build Coastguard Worker "//ipc", 41*6777b538SAndroid Build Coastguard Worker "//mojo/core/embedder", 42*6777b538SAndroid Build Coastguard Worker "//native_client/src/trusted/service_runtime:sel_main_chrome", 43*6777b538SAndroid Build Coastguard Worker "//ppapi/c", 44*6777b538SAndroid Build Coastguard Worker "//ppapi/proxy:ipc", 45*6777b538SAndroid Build Coastguard Worker "//sandbox", 46*6777b538SAndroid Build Coastguard Worker "//services/service_manager/public/cpp", 47*6777b538SAndroid Build Coastguard Worker ] 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker if (is_linux || is_chromeos) { 50*6777b538SAndroid Build Coastguard Worker sources += [ "nacl_main_platform_delegate_linux.cc" ] 51*6777b538SAndroid Build Coastguard Worker } 52*6777b538SAndroid Build Coastguard Worker } 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker # This exists just to make 'gn check' happy with :minimal and 55*6777b538SAndroid Build Coastguard Worker # :nacl_helper_win_64 (below). They can't depend on //content/public/common 56*6777b538SAndroid Build Coastguard Worker # or anything like that, because that would bring in lots more than counts 57*6777b538SAndroid Build Coastguard Worker # as "minimal" (stuff that should not be in the nacl64.exe build). 58*6777b538SAndroid Build Coastguard Worker source_set("minimal_content_dummy") { 59*6777b538SAndroid Build Coastguard Worker check_includes = false 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker sources = [] 62*6777b538SAndroid Build Coastguard Worker 63*6777b538SAndroid Build Coastguard Worker if (is_linux || is_chromeos) { 64*6777b538SAndroid Build Coastguard Worker sources += [ "//content/public/common/zygote/sandbox_support_linux.h" ] 65*6777b538SAndroid Build Coastguard Worker } 66*6777b538SAndroid Build Coastguard Worker } 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker source_set("loader") { 69*6777b538SAndroid Build Coastguard Worker public_deps = [ ":minimal" ] 70*6777b538SAndroid Build Coastguard Worker deps = [ 71*6777b538SAndroid Build Coastguard Worker "//components/nacl/common", 72*6777b538SAndroid Build Coastguard Worker "//ppapi/shared_impl", 73*6777b538SAndroid Build Coastguard Worker "//services/service_manager/public/cpp", 74*6777b538SAndroid Build Coastguard Worker ] 75*6777b538SAndroid Build Coastguard Worker 76*6777b538SAndroid Build Coastguard Worker data_deps = [ 77*6777b538SAndroid Build Coastguard Worker "//ppapi/native_client:irt", 78*6777b538SAndroid Build Coastguard Worker "//ppapi/native_client/src/untrusted/pnacl_support_extension", 79*6777b538SAndroid Build Coastguard Worker ] 80*6777b538SAndroid Build Coastguard Worker } 81*6777b538SAndroid Build Coastguard Worker 82*6777b538SAndroid Build Coastguard Worker test("nacl_loader_unittests") { 83*6777b538SAndroid Build Coastguard Worker sources = [ 84*6777b538SAndroid Build Coastguard Worker "nacl_ipc_adapter_unittest.cc", 85*6777b538SAndroid Build Coastguard Worker "nacl_validation_query_unittest.cc", 86*6777b538SAndroid Build Coastguard Worker "run_all_unittests.cc", 87*6777b538SAndroid Build Coastguard Worker ] 88*6777b538SAndroid Build Coastguard Worker 89*6777b538SAndroid Build Coastguard Worker deps = [ 90*6777b538SAndroid Build Coastguard Worker ":loader", 91*6777b538SAndroid Build Coastguard Worker "//base/test:test_support", 92*6777b538SAndroid Build Coastguard Worker "//ipc:test_support", 93*6777b538SAndroid Build Coastguard Worker "//ppapi/c", 94*6777b538SAndroid Build Coastguard Worker "//testing/gtest", 95*6777b538SAndroid Build Coastguard Worker ] 96*6777b538SAndroid Build Coastguard Worker } 97*6777b538SAndroid Build Coastguard Worker} 98*6777b538SAndroid Build Coastguard Worker 99*6777b538SAndroid Build Coastguard Workerif ((is_linux || is_chromeos) && current_cpu != "arm64") { 100*6777b538SAndroid Build Coastguard Worker executable("nacl_helper") { 101*6777b538SAndroid Build Coastguard Worker sources = [ 102*6777b538SAndroid Build Coastguard Worker "nacl_helper_linux.cc", 103*6777b538SAndroid Build Coastguard Worker "nacl_helper_linux.h", 104*6777b538SAndroid Build Coastguard Worker ] 105*6777b538SAndroid Build Coastguard Worker 106*6777b538SAndroid Build Coastguard Worker deps = [ 107*6777b538SAndroid Build Coastguard Worker ":loader", 108*6777b538SAndroid Build Coastguard Worker "//base", 109*6777b538SAndroid Build Coastguard Worker "//components/nacl/common:switches", 110*6777b538SAndroid Build Coastguard Worker "//components/nacl/loader/sandbox_linux", 111*6777b538SAndroid Build Coastguard Worker "//content/public/common:content_descriptors", 112*6777b538SAndroid Build Coastguard Worker "//content/public/common:main_function_params", 113*6777b538SAndroid Build Coastguard Worker "//content/public/common:sandbox_support_linux", 114*6777b538SAndroid Build Coastguard Worker "//crypto", 115*6777b538SAndroid Build Coastguard Worker "//ipc", 116*6777b538SAndroid Build Coastguard Worker "//mojo/core/embedder", 117*6777b538SAndroid Build Coastguard Worker "//sandbox/linux:sandbox_services", 118*6777b538SAndroid Build Coastguard Worker "//sandbox/policy", 119*6777b538SAndroid Build Coastguard Worker "//url/ipc:url_ipc", 120*6777b538SAndroid Build Coastguard Worker ] 121*6777b538SAndroid Build Coastguard Worker 122*6777b538SAndroid Build Coastguard Worker if (is_chromeos) { 123*6777b538SAndroid Build Coastguard Worker # NaCl is not working with compiler-rt in ChromeOS. 124*6777b538SAndroid Build Coastguard Worker # Force libgcc as a workaround. See https://crbug.com/761103 125*6777b538SAndroid Build Coastguard Worker ldflags = [ 126*6777b538SAndroid Build Coastguard Worker "-rtlib=libgcc", 127*6777b538SAndroid Build Coastguard Worker "--unwindlib=libgcc", 128*6777b538SAndroid Build Coastguard Worker ] 129*6777b538SAndroid Build Coastguard Worker 130*6777b538SAndroid Build Coastguard Worker # nacl_helper needs to link with libgcc_s. We already have -lgcc_s in 131*6777b538SAndroid Build Coastguard Worker # the final link command line, but it was placed within "--as-needed" 132*6777b538SAndroid Build Coastguard Worker # with the result that the dependency gets dropped. Similarly, we need 133*6777b538SAndroid Build Coastguard Worker # to add this via "ldflags" and not "libs" because libraries added via 134*6777b538SAndroid Build Coastguard Worker # the latter are also placed within an "--as-needed"'. 135*6777b538SAndroid Build Coastguard Worker # See https://crbug.com/884017 136*6777b538SAndroid Build Coastguard Worker ldflags += [ "-lgcc_s" ] 137*6777b538SAndroid Build Coastguard Worker } 138*6777b538SAndroid Build Coastguard Worker 139*6777b538SAndroid Build Coastguard Worker # The only symbols that nacl_helper needs to export are those specified by 140*6777b538SAndroid Build Coastguard Worker # its direct dependencies, so -rdynamic would only serve to unnecessarily 141*6777b538SAndroid Build Coastguard Worker # increase the binary size. 142*6777b538SAndroid Build Coastguard Worker if (!export_libcxxabi_from_executables) { 143*6777b538SAndroid Build Coastguard Worker configs -= [ "//build/config/compiler:export_dynamic" ] 144*6777b538SAndroid Build Coastguard Worker } 145*6777b538SAndroid Build Coastguard Worker 146*6777b538SAndroid Build Coastguard Worker data_deps = 147*6777b538SAndroid Build Coastguard Worker [ "//native_client/src/trusted/service_runtime/linux:bootstrap" ] 148*6777b538SAndroid Build Coastguard Worker 149*6777b538SAndroid Build Coastguard Worker # In order to build ARM32 nacl_helper for ARM64 Chrome OS, we need to 150*6777b538SAndroid Build Coastguard Worker # minimize the dependencies on system libraries, including indirect 151*6777b538SAndroid Build Coastguard Worker # dependencies through other parts of Chrome (see 152*6777b538SAndroid Build Coastguard Worker # https://crbug.com/1339021). 153*6777b538SAndroid Build Coastguard Worker assert_no_deps = [ 154*6777b538SAndroid Build Coastguard Worker "//content/public/common", 155*6777b538SAndroid Build Coastguard Worker "//media/audio", 156*6777b538SAndroid Build Coastguard Worker ] 157*6777b538SAndroid Build Coastguard Worker 158*6777b538SAndroid Build Coastguard Worker if (is_minimal_toolchain) { 159*6777b538SAndroid Build Coastguard Worker assert_no_deps += [ 160*6777b538SAndroid Build Coastguard Worker "//net", 161*6777b538SAndroid Build Coastguard Worker "//skia", 162*6777b538SAndroid Build Coastguard Worker ] 163*6777b538SAndroid Build Coastguard Worker } 164*6777b538SAndroid Build Coastguard Worker } 165*6777b538SAndroid Build Coastguard Worker 166*6777b538SAndroid Build Coastguard Worker # For setting up nacl_helper. 167*6777b538SAndroid Build Coastguard Worker source_set("nacl_helper_integration") { 168*6777b538SAndroid Build Coastguard Worker public = [ "nacl_helper_linux.h" ] 169*6777b538SAndroid Build Coastguard Worker data_deps = [ ":nacl_helper" ] 170*6777b538SAndroid Build Coastguard Worker } 171*6777b538SAndroid Build Coastguard Worker} 172*6777b538SAndroid Build Coastguard Worker 173*6777b538SAndroid Build Coastguard Worker# In ARM64 Chrome, use the ARM32 versions of nacl_helper and 174*6777b538SAndroid Build Coastguard Worker# nacl_helper_bootstrap. Copy them from the build directory for the 175*6777b538SAndroid Build Coastguard Worker# ARM32 toolchain. 176*6777b538SAndroid Build Coastguard Workerif ((is_linux || is_chromeos) && current_cpu == "arm64") { 177*6777b538SAndroid Build Coastguard Worker if (default_toolchain == "//build/toolchain/cros:target") { 178*6777b538SAndroid Build Coastguard Worker toolchain = "//build/toolchain/cros:nacl_helper_arm32" 179*6777b538SAndroid Build Coastguard Worker } else { 180*6777b538SAndroid Build Coastguard Worker toolchain = "//build/toolchain/linux:clang_arm" 181*6777b538SAndroid Build Coastguard Worker } 182*6777b538SAndroid Build Coastguard Worker 183*6777b538SAndroid Build Coastguard Worker copy("nacl_helper") { 184*6777b538SAndroid Build Coastguard Worker label = ":nacl_helper($toolchain)" 185*6777b538SAndroid Build Coastguard Worker out_dir = get_label_info(label, "root_out_dir") 186*6777b538SAndroid Build Coastguard Worker sources = [ "${out_dir}/nacl_helper" ] 187*6777b538SAndroid Build Coastguard Worker outputs = [ "${root_out_dir}/nacl_helper" ] 188*6777b538SAndroid Build Coastguard Worker deps = [ label ] 189*6777b538SAndroid Build Coastguard Worker data_deps = [ 190*6777b538SAndroid Build Coastguard Worker ":nacl_helper_bootstrap", 191*6777b538SAndroid Build Coastguard Worker "//ppapi/native_client/src/untrusted/pnacl_support_extension", 192*6777b538SAndroid Build Coastguard Worker ] 193*6777b538SAndroid Build Coastguard Worker } 194*6777b538SAndroid Build Coastguard Worker 195*6777b538SAndroid Build Coastguard Worker copy("nacl_helper_bootstrap") { 196*6777b538SAndroid Build Coastguard Worker label = "//native_client/src/trusted/service_runtime/linux:bootstrap($toolchain)" 197*6777b538SAndroid Build Coastguard Worker out_dir = get_label_info(label, "root_out_dir") 198*6777b538SAndroid Build Coastguard Worker sources = [ "${out_dir}/nacl_helper_bootstrap" ] 199*6777b538SAndroid Build Coastguard Worker outputs = [ "${root_out_dir}/nacl_helper_bootstrap" ] 200*6777b538SAndroid Build Coastguard Worker deps = [ label ] 201*6777b538SAndroid Build Coastguard Worker } 202*6777b538SAndroid Build Coastguard Worker} 203