xref: /aosp_15_r20/external/cronet/components/nacl/loader/BUILD.gn (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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