1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 import("//mojo/generate_mojo_shell_assets_list.gni")
6 import("//mojo/public/mojo_application.gni")
7 import("//testing/test.gni")
8 import("//third_party/mojo/src/mojo/public/tools/bindings/mojom.gni")
10 # We don't support building in the component build since mojo apps are
11 # inherently components.
12 assert(!is_component_build)
23 import("//build/config/android/config.gni")
24 import("//build/config/android/rules.gni")
27 source_set("mojo_runner_lib") {
33 "//build/config/sanitizers:deps",
35 "//mojo/environment:chromium",
40 "desktop/launcher_process.cc",
41 "desktop/launcher_process.h",
44 deps += [ "//components/tracing:startup_tracing" ]
47 "android/context_init.h",
48 "android/library_loader.cc",
55 "//components/view_manager",
58 "//ui/platform_window/android",
63 executable("mojo_runner") {
70 "android/context_init.cc",
73 # On android, the executable is also the native library used by the apk.
74 # It means dynamic symbols must be preserved and exported.
75 ldflags = [ "-Wl,--export-dynamic" ]
78 deps += [ "//build/config/sanitizers:deps" ]
81 source_set("in_process_native_runner") {
83 "in_process_native_runner.cc",
84 "in_process_native_runner.h",
88 ":native_application_support",
101 "child_process_host.cc",
102 "child_process_host.h",
107 "out_of_process_native_runner.cc",
108 "out_of_process_native_runner.h",
109 "scoped_user_data_dir.cc",
110 "scoped_user_data_dir.h",
118 ":child_process_bindings",
119 ":in_process_native_runner",
120 ":native_application_support",
122 "//base/third_party/dynamic_annotations",
123 "//base:base_static",
124 "//components/devtools_service/public/cpp",
125 "//components/devtools_service/public/interfaces",
126 "//mojo/application/public/cpp",
127 "//mojo/common:tracing_impl",
128 "//mojo/util:filename_util",
129 "//third_party/mojo/src/mojo/edk/system",
130 "//mojo/services/network/public/interfaces",
132 "//mojo/services/tracing:bindings",
137 if (is_linux && !is_android) {
144 "//sandbox/linux:sandbox",
145 "//sandbox/linux:sandbox_services",
154 "//components/devtools_service",
155 "//mojo/services/tracing",
160 "android/android_handler.cc",
161 "android/android_handler.h",
162 "android/android_handler_loader.cc",
163 "android/android_handler_loader.h",
164 "android/background_application_loader.cc",
165 "android/background_application_loader.h",
166 "android/ui_application_loader_android.cc",
167 "android/ui_application_loader_android.h",
172 ":run_android_application_function",
173 "//components/view_manager/gles2",
174 "//components/view_manager/native_viewport",
175 "//mojo/application/public/cpp:content_handler",
179 # This target includes some files behind #ifdef OS... guards. Since gn is not
180 # smart enough to understand preprocess includes, it does complains about
181 # these includes when not using the build files for that OS. Suppress checking
182 # so we can enable checking for the rest of the targets in this file.
183 # TODO: Might be better to split the files with OS-specific includes out to a
184 # separate source_set so we can leave checking on for the rest of the target.
185 check_includes = false
188 source_set("native_application_support") {
190 "native_application_support.cc",
191 "native_application_support.h",
192 "platform_handle_impl.cc",
196 "//third_party/mojo/src/mojo/public/cpp/bindings",
202 "//mojo/platform_handle:defs",
206 # This target has to include the public thunk headers, which generally
207 # shouldn't be included without picking an implementation. We are providing
208 # the implementation but the thunk header target cannot declare that we are
209 # permitted to include it since it's in the public SDK and we are not.
210 # Suppress include checking so we can still check the rest of the targets in
212 check_includes = false
215 source_set("switches") {
227 generate_jni("jni_headers") {
229 "android/apk/src/org/chromium/mojo/shell/AndroidHandler.java",
230 "android/apk/src/org/chromium/mojo/shell/Bootstrap.java",
231 "android/apk/src/org/chromium/mojo/shell/ShellMain.java",
232 "android/tests/src/org/chromium/mojo/shell/ShellTestBase.java",
234 jni_package = "mojo/shell"
237 android_library("bootstrap_java") {
238 java_files = [ "android/apk/src/org/chromium/mojo/shell/Bootstrap.java" ]
244 dex_path = "$target_out_dir/bootstrap_java.dex.jar"
247 shared_library("bootstrap") {
249 "android/bootstrap.cc",
254 ":run_android_application_function",
259 # Shared header between the bootstrap and the main shell .so.
260 source_set("run_android_application_function") {
262 "android/run_android_application_function.h",
270 android_library("java") {
272 "android/apk/src/org/chromium/mojo/shell/AndroidHandler.java",
273 "android/apk/src/org/chromium/mojo/shell/FileHelper.java",
274 "android/apk/src/org/chromium/mojo/shell/MojoShellActivity.java",
275 "android/apk/src/org/chromium/mojo/shell/MojoShellApplication.java",
276 "android/apk/src/org/chromium/mojo/shell/ShellMain.java",
285 android_resources("resources") {
286 resource_dirs = [ "android/apk/res" ]
287 custom_package = "org.chromium.mojo.shell"
290 mojo_runner_test_assets_dir = "$root_build_dir/mojo_runner_test_assets"
291 mojo_runner_apptests_assets_dir =
292 "$root_build_dir/mojo_runner_apptests_assets"
294 copy_ex("copy_mojo_runner_apptests_assets") {
297 dest = mojo_runner_apptests_assets_dir
302 "//components/clipboard:apptests",
303 "//components/resource_provider:apptests",
304 "//components/view_manager:apptests",
305 "//mojo/services/network:apptests",
309 "$root_out_dir/lib.stripped/libbootstrap$android_product_extension",
310 "$root_out_dir/obj/mojo/runner/bootstrap_java.dex.jar",
315 "clipboard_apptests",
317 "resource_provider_apptests",
318 "view_manager_apptests",
320 "network_service_apptests",
324 foreach(path, apptest_outputs) {
326 [ "--files=" + rebase_path("$root_out_dir/$path", root_build_dir) ]
330 generate_mojo_shell_assets_list("build_mojo_runner_apptests_assets") {
333 ":copy_mojo_runner_apptests_assets",
335 dir = mojo_runner_apptests_assets_dir
338 copy("copy_mojo_runner") {
340 "$root_out_dir/exe.stripped/mojo_runner",
343 "$root_out_dir/lib.stripped/libmojo_runner$android_product_extension",
350 copy_ex("copy_mojo_runner_test_assets") {
353 dest = mojo_runner_test_assets_dir
355 "//mojo/services/test_service:test_app",
356 "//mojo/services/test_service:test_request_tracker_app",
359 # Directories can't be specified as sources so pass manually to the script.
361 "--files=" + rebase_path("$root_out_dir/test_app", root_build_dir),
363 rebase_path("$root_out_dir/test_request_tracker_app", root_build_dir),
367 android_apk("mojo_runner_apptests_apk") {
369 apk_name = "MojoRunnerApptests"
370 android_manifest = "android/apk/AndroidManifest.xml"
371 native_libs = [ "libmojo_runner$android_product_extension" ]
372 asset_location = mojo_runner_apptests_assets_dir
375 ":build_mojo_runner_apptests_assets",
380 "//third_party/android_tools:google_play_services_default_resources",
381 "//ui/platform_window/android:platform_window_java",
385 generate_mojo_shell_assets_list("build_mojo_runner_test_assets") {
388 ":copy_mojo_runner_test_assets",
390 dir = mojo_runner_test_assets_dir
393 android_library("mojo_runner_tests_java") {
395 [ "android/tests/src/org/chromium/mojo/shell/ShellTestBase.java" ]
404 mojom("child_process_bindings") {
406 "child_process.mojom",
410 "//mojo/application/public/interfaces",
413 import_dirs = [ "//mojo/services" ]
416 test("mojo_runner_unittests") {
418 "child_process_host_unittest.cc",
419 "data_pipe_peek_unittest.cc",
420 "in_process_native_runner_unittest.cc",
421 "native_runner_unittest.cc",
422 "shell_test_base.cc",
424 "shell_test_base_android.cc",
425 "shell_test_base_unittest.cc",
426 "shell_test_main.cc",
427 "url_resolver_unittest.cc",
431 ":in_process_native_runner",
435 "//base/test:test_support",
437 "//mojo/environment:chromium",
438 "//mojo/services/test_service:bindings",
440 "//mojo/util:filename_util",
442 "//third_party/mojo/src/mojo/edk/system",
443 "//third_party/mojo/src/mojo/public/cpp/bindings",
448 "//mojo/services/test_service:test_app",
449 "//mojo/services/test_service:test_request_tracker_app",
453 sources += [ "android/background_application_loader_unittest.cc" ]
455 deps += [ ":jni_headers" ]
458 ":build_mojo_runner_test_assets",
459 ":mojo_runner_tests_java",
462 apk_asset_location = mojo_runner_test_assets_dir
466 mojo_native_application("apptests") {
467 output_name = "runner_apptests"
472 # TODO(jam): needs http_server service. http://crbug.com/479316
478 "//mojo/application/public/cpp:test_support",
479 "//mojo/runner/test:bindings",
480 "//mojo/services/network/public/interfaces",
481 "//third_party/mojo/src/mojo/public/cpp/bindings:callback",