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",
36 "//mojo/message_pump",
41 "desktop/launcher_process.cc",
42 "desktop/launcher_process.h",
45 deps += [ "//components/tracing:startup_tracing" ]
48 "android/context_init.h",
49 "android/library_loader.cc",
59 "//ui/platform_window/android",
64 executable("mojo_runner") {
67 "//build/config/sanitizers:deps",
72 "android/context_init.cc",
75 # On android, the executable is also the native library used by the apk.
76 # It means dynamic symbols must be preserved and exported.
77 ldflags = [ "-Wl,--export-dynamic" ]
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",
116 ":child_process_bindings",
117 ":in_process_native_runner",
118 ":native_application_support",
120 "//base/third_party/dynamic_annotations",
121 "//base:base_static",
122 "//components/devtools_service/public/cpp",
123 "//components/devtools_service/public/interfaces",
124 "//mojo/application/public/cpp",
125 "//mojo/common:tracing_impl",
126 "//mojo/message_pump",
127 "//mojo/package_manager",
128 "//mojo/services/network/public/interfaces",
129 "//mojo/services/tracing/public/cpp",
130 "//mojo/services/tracing/public/interfaces",
132 "//mojo/util:filename_util",
133 "//third_party/mojo/src/mojo/edk/system",
138 if (is_linux && !is_android) {
145 "//sandbox/linux:sandbox",
146 "//sandbox/linux:sandbox_services",
155 "//components/devtools_service",
156 "//mojo/services/tracing",
161 "android/android_handler.cc",
162 "android/android_handler.h",
163 "android/android_handler_loader.cc",
164 "android/android_handler_loader.h",
165 "android/background_application_loader.cc",
166 "android/background_application_loader.h",
167 "android/ui_application_loader_android.cc",
168 "android/ui_application_loader_android.h",
173 ":run_android_application_function",
174 "//components/mus/gles2",
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",
256 "//build/config/sanitizers:deps",
260 # Shared header between the bootstrap and the main shell .so.
261 source_set("run_android_application_function") {
263 "android/run_android_application_function.h",
271 android_library("java") {
273 "android/apk/src/org/chromium/mojo/shell/AndroidHandler.java",
274 "android/apk/src/org/chromium/mojo/shell/FileHelper.java",
275 "android/apk/src/org/chromium/mojo/shell/MojoShellActivity.java",
276 "android/apk/src/org/chromium/mojo/shell/MojoShellApplication.java",
277 "android/apk/src/org/chromium/mojo/shell/ShellMain.java",
286 android_resources("resources") {
287 resource_dirs = [ "android/apk/res" ]
288 custom_package = "org.chromium.mojo.shell"
291 mojo_runner_test_assets_dir = "$root_build_dir/mojo_runner_test_assets"
292 mojo_runner_apptests_assets_dir =
293 "$root_build_dir/mojo_runner_apptests_assets"
295 copy_ex("copy_mojo_runner_apptests_assets") {
298 dest = mojo_runner_apptests_assets_dir
303 "//components/clipboard:apptests",
304 "//components/mus:apptests",
305 "//components/resource_provider:apptests",
306 "//mojo/services/network:apptests",
310 "$root_out_dir/obj/mojo/runner/bootstrap_java.dex.jar",
311 "$root_shlib_dir/${shlib_prefix}bootstrap$shlib_extension",
316 "clipboard_apptests",
319 "resource_provider_apptests",
321 "network_service_apptests",
325 foreach(path, apptest_outputs) {
327 [ "--files=" + rebase_path("$root_out_dir/$path", root_build_dir) ]
331 generate_mojo_shell_assets_list("build_mojo_runner_apptests_assets") {
334 ":copy_mojo_runner_apptests_assets",
336 dir = mojo_runner_apptests_assets_dir
339 copy("copy_mojo_runner") {
341 "$root_out_dir/mojo_runner",
344 "$root_shlib_dir/${shlib_prefix}mojo_runner$shlib_extension",
351 copy_ex("copy_mojo_runner_test_assets") {
354 dest = mojo_runner_test_assets_dir
356 "//mojo/services/test_service:test_app",
357 "//mojo/services/test_service:test_request_tracker_app",
360 # Directories can't be specified as sources so pass manually to the script.
362 "--files=" + rebase_path("$root_out_dir/test_app", root_build_dir),
364 rebase_path("$root_out_dir/test_request_tracker_app", root_build_dir),
368 android_apk("mojo_runner_apptests_apk") {
370 apk_name = "MojoRunnerApptests"
371 android_manifest = "android/apk/AndroidManifest.xml"
372 native_libs = [ "${shlib_prefix}mojo_runner$shlib_extension" ]
373 asset_location = mojo_runner_apptests_assets_dir
376 ":build_mojo_runner_apptests_assets",
381 "//ui/platform_window/android:platform_window_java",
382 google_play_services_resources,
386 generate_mojo_shell_assets_list("build_mojo_runner_test_assets") {
389 ":copy_mojo_runner_test_assets",
391 dir = mojo_runner_test_assets_dir
394 android_library("mojo_runner_tests_java") {
396 [ "android/tests/src/org/chromium/mojo/shell/ShellTestBase.java" ]
405 mojom("child_process_bindings") {
407 "child_process.mojom",
411 "//mojo/application/public/interfaces",
414 import_dirs = [ "//mojo/services" ]
417 test("mojo_runner_unittests") {
419 "../fetcher/about_fetcher_unittest.cc",
420 "../fetcher/data_fetcher_unittest.cc",
421 "../fetcher/network_fetcher_unittest.cc",
422 "../fetcher/url_resolver_unittest.cc",
423 "child_process_host_unittest.cc",
424 "data_pipe_peek_unittest.cc",
425 "in_process_native_runner_unittest.cc",
426 "native_runner_unittest.cc",
427 "shell_test_base.cc",
429 "shell_test_base_android.cc",
430 "shell_test_base_unittest.cc",
431 "shell_test_main.cc",
435 ":in_process_native_runner",
439 "//base/test:test_support",
440 "//mojo/application/public/cpp",
442 "//mojo/environment:chromium",
444 "//mojo/message_pump",
445 "//mojo/package_manager",
446 "//mojo/services/test_service:bindings",
448 "//mojo/util:filename_util",
450 "//third_party/mojo/src/mojo/edk/system",
451 "//third_party/mojo/src/mojo/public/cpp/bindings",
456 "//mojo/services/test_service:test_app",
457 "//mojo/services/test_service:test_request_tracker_app",
461 sources += [ "android/background_application_loader_unittest.cc" ]
463 deps += [ ":jni_headers" ]
466 ":build_mojo_runner_test_assets",
467 ":mojo_runner_tests_java",
470 apk_asset_location = mojo_runner_test_assets_dir
474 mojo_native_application("apptests") {
475 output_name = "runner_apptests"
480 # TODO(jam): needs http_server service. http://crbug.com/479316
486 "//mojo/application/public/cpp:test_support",
487 "//mojo/runner/test:bindings",
488 "//mojo/services/network/public/interfaces",
489 "//third_party/mojo/src/mojo/public/cpp/bindings:callback",