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",
103 "child_process_host.cc",
104 "child_process_host.h",
109 "out_of_process_native_runner.cc",
110 "out_of_process_native_runner.h",
111 "scoped_user_data_dir.cc",
112 "scoped_user_data_dir.h",
120 ":child_process_bindings",
121 ":in_process_native_runner",
122 ":native_application_support",
124 "//base/third_party/dynamic_annotations",
125 "//base:base_static",
126 "//components/devtools_service/public/cpp",
127 "//components/devtools_service/public/interfaces",
128 "//mojo/application/public/cpp",
129 "//mojo/common:tracing_impl",
130 "//mojo/util:filename_util",
131 "//third_party/mojo/src/mojo/edk/system",
132 "//mojo/services/network/public/interfaces",
134 "//mojo/services/tracing:bindings",
139 if (is_linux && !is_android) {
146 "//sandbox/linux:sandbox",
147 "//sandbox/linux:sandbox_services",
156 "//components/devtools_service",
157 "//mojo/services/tracing",
162 "android/android_handler.cc",
163 "android/android_handler.h",
164 "android/android_handler_loader.cc",
165 "android/android_handler_loader.h",
166 "android/background_application_loader.cc",
167 "android/background_application_loader.h",
168 "android/ui_application_loader_android.cc",
169 "android/ui_application_loader_android.h",
174 ":run_android_application_function",
175 "//components/view_manager/gles2",
176 "//components/view_manager/native_viewport",
177 "//mojo/application/public/cpp:content_handler",
181 # This target includes some files behind #ifdef OS... guards. Since gn is not
182 # smart enough to understand preprocess includes, it does complains about
183 # these includes when not using the build files for that OS. Suppress checking
184 # so we can enable checking for the rest of the targets in this file.
185 # TODO: Might be better to split the files with OS-specific includes out to a
186 # separate source_set so we can leave checking on for the rest of the target.
187 check_includes = false
190 source_set("native_application_support") {
192 "native_application_support.cc",
193 "native_application_support.h",
194 "platform_handle_impl.cc",
198 "//third_party/mojo/src/mojo/public/cpp/bindings",
204 "//mojo/platform_handle:defs",
208 # This target has to include the public thunk headers, which generally
209 # shouldn't be included without picking an implementation. We are providing
210 # the implementation but the thunk header target cannot declare that we are
211 # permitted to include it since it's in the public SDK and we are not.
212 # Suppress include checking so we can still check the rest of the targets in
214 check_includes = false
217 source_set("switches") {
229 generate_jni("jni_headers") {
231 "android/apk/src/org/chromium/mojo/shell/AndroidHandler.java",
232 "android/apk/src/org/chromium/mojo/shell/Bootstrap.java",
233 "android/apk/src/org/chromium/mojo/shell/ShellMain.java",
234 "android/tests/src/org/chromium/mojo/shell/ShellTestBase.java",
236 jni_package = "mojo/shell"
239 android_library("bootstrap_java") {
240 java_files = [ "android/apk/src/org/chromium/mojo/shell/Bootstrap.java" ]
246 dex_path = "$target_out_dir/bootstrap_java.dex.jar"
249 shared_library("bootstrap") {
251 "android/bootstrap.cc",
256 ":run_android_application_function",
261 # Shared header between the bootstrap and the main shell .so.
262 source_set("run_android_application_function") {
264 "android/run_android_application_function.h",
272 android_library("java") {
274 "android/apk/src/org/chromium/mojo/shell/AndroidHandler.java",
275 "android/apk/src/org/chromium/mojo/shell/FileHelper.java",
276 "android/apk/src/org/chromium/mojo/shell/MojoShellActivity.java",
277 "android/apk/src/org/chromium/mojo/shell/MojoShellApplication.java",
278 "android/apk/src/org/chromium/mojo/shell/ShellMain.java",
287 android_resources("resources") {
288 resource_dirs = [ "android/apk/res" ]
289 custom_package = "org.chromium.mojo.shell"
292 mojo_runner_test_assets_dir = "$root_build_dir/mojo_runner_test_assets"
293 mojo_runner_apptests_assets_dir =
294 "$root_build_dir/mojo_runner_apptests_assets"
296 copy_ex("copy_mojo_runner_apptests_assets") {
299 dest = mojo_runner_apptests_assets_dir
304 "//components/clipboard:apptests",
305 "//components/resource_provider:apptests",
306 "//components/view_manager:apptests",
307 "//mojo/services/network:apptests",
311 "$root_out_dir/lib.stripped/libbootstrap$android_product_extension",
312 "$root_out_dir/obj/mojo/runner/bootstrap_java.dex.jar",
317 "clipboard_apptests",
319 "resource_provider_apptests",
320 "view_manager_apptests",
322 "network_service_apptests",
326 foreach(path, apptest_outputs) {
328 [ "--files=" + rebase_path("$root_out_dir/$path", root_build_dir) ]
332 generate_mojo_shell_assets_list("build_mojo_runner_apptests_assets") {
335 ":copy_mojo_runner_apptests_assets",
337 dir = mojo_runner_apptests_assets_dir
340 copy("copy_mojo_runner") {
342 "$root_out_dir/exe.stripped/mojo_runner",
345 "$root_out_dir/lib.stripped/libmojo_runner$android_product_extension",
352 copy_ex("copy_mojo_runner_test_assets") {
355 dest = mojo_runner_test_assets_dir
357 "//mojo/services/test_service:test_app",
358 "//mojo/services/test_service:test_request_tracker_app",
361 # Directories can't be specified as sources so pass manually to the script.
363 "--files=" + rebase_path("$root_out_dir/test_app", root_build_dir),
365 rebase_path("$root_out_dir/test_request_tracker_app", root_build_dir),
369 android_apk("mojo_runner_apptests_apk") {
371 apk_name = "MojoRunnerApptests"
372 android_manifest = "android/apk/AndroidManifest.xml"
373 native_libs = [ "libmojo_runner$android_product_extension" ]
374 asset_location = mojo_runner_apptests_assets_dir
377 ":build_mojo_runner_apptests_assets",
382 "//third_party/android_tools:google_play_services_default_resources",
383 "//ui/platform_window/android:platform_window_java",
387 generate_mojo_shell_assets_list("build_mojo_runner_test_assets") {
390 ":copy_mojo_runner_test_assets",
392 dir = mojo_runner_test_assets_dir
395 android_library("mojo_runner_tests_java") {
397 [ "android/tests/src/org/chromium/mojo/shell/ShellTestBase.java" ]
406 mojom("child_process_bindings") {
408 "child_process.mojom",
412 "//mojo/application/public/interfaces",
415 import_dirs = [ "//mojo/services" ]
418 test("mojo_runner_unittests") {
420 "about_fetcher_unittest.cc",
421 "child_process_host_unittest.cc",
422 "data_pipe_peek_unittest.cc",
423 "in_process_native_runner_unittest.cc",
424 "native_runner_unittest.cc",
425 "shell_test_base.cc",
427 "shell_test_base_android.cc",
428 "shell_test_base_unittest.cc",
429 "shell_test_main.cc",
430 "url_resolver_unittest.cc",
434 ":in_process_native_runner",
438 "//base/test:test_support",
439 "//mojo/application/public/cpp",
441 "//mojo/environment:chromium",
442 "//mojo/services/test_service:bindings",
444 "//mojo/util:filename_util",
446 "//third_party/mojo/src/mojo/edk/system",
447 "//third_party/mojo/src/mojo/public/cpp/bindings",
452 "//mojo/services/test_service:test_app",
453 "//mojo/services/test_service:test_request_tracker_app",
457 sources += [ "android/background_application_loader_unittest.cc" ]
459 deps += [ ":jni_headers" ]
462 ":build_mojo_runner_test_assets",
463 ":mojo_runner_tests_java",
466 apk_asset_location = mojo_runner_test_assets_dir
470 mojo_native_application("apptests") {
471 output_name = "runner_apptests"
476 # TODO(jam): needs http_server service. http://crbug.com/479316
482 "//mojo/application/public/cpp:test_support",
483 "//mojo/runner/test:bindings",
484 "//mojo/services/network/public/interfaces",
485 "//third_party/mojo/src/mojo/public/cpp/bindings:callback",