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",
56 "//components/view_manager",
59 "//ui/platform_window/android",
64 executable("mojo_runner") {
71 "android/context_init.cc",
74 # On android, the executable is also the native library used by the apk.
75 # It means dynamic symbols must be preserved and exported.
76 ldflags = [ "-Wl,--export-dynamic" ]
79 deps += [ "//build/config/sanitizers:deps" ]
82 source_set("in_process_native_runner") {
84 "in_process_native_runner.cc",
85 "in_process_native_runner.h",
89 ":native_application_support",
104 "child_process_host.cc",
105 "child_process_host.h",
110 "out_of_process_native_runner.cc",
111 "out_of_process_native_runner.h",
112 "scoped_user_data_dir.cc",
113 "scoped_user_data_dir.h",
121 ":child_process_bindings",
122 ":in_process_native_runner",
123 ":native_application_support",
125 "//base/third_party/dynamic_annotations",
126 "//base:base_static",
127 "//components/devtools_service/public/cpp",
128 "//components/devtools_service/public/interfaces",
129 "//mojo/application/public/cpp",
130 "//mojo/common:tracing_impl",
131 "//mojo/message_pump",
132 "//mojo/services/network/public/interfaces",
133 "//mojo/services/tracing:bindings",
135 "//mojo/util:filename_util",
136 "//third_party/mojo/src/mojo/edk/system",
141 if (is_linux && !is_android) {
148 "//sandbox/linux:sandbox",
149 "//sandbox/linux:sandbox_services",
158 "//components/devtools_service",
159 "//mojo/services/tracing",
164 "android/android_handler.cc",
165 "android/android_handler.h",
166 "android/android_handler_loader.cc",
167 "android/android_handler_loader.h",
168 "android/background_application_loader.cc",
169 "android/background_application_loader.h",
170 "android/ui_application_loader_android.cc",
171 "android/ui_application_loader_android.h",
176 ":run_android_application_function",
177 "//components/view_manager/gles2",
178 "//components/view_manager/native_viewport",
179 "//mojo/application/public/cpp:content_handler",
183 # This target includes some files behind #ifdef OS... guards. Since gn is not
184 # smart enough to understand preprocess includes, it does complains about
185 # these includes when not using the build files for that OS. Suppress checking
186 # so we can enable checking for the rest of the targets in this file.
187 # TODO: Might be better to split the files with OS-specific includes out to a
188 # separate source_set so we can leave checking on for the rest of the target.
189 check_includes = false
192 source_set("native_application_support") {
194 "native_application_support.cc",
195 "native_application_support.h",
196 "platform_handle_impl.cc",
200 "//third_party/mojo/src/mojo/public/cpp/bindings",
206 "//mojo/platform_handle:defs",
210 # This target has to include the public thunk headers, which generally
211 # shouldn't be included without picking an implementation. We are providing
212 # the implementation but the thunk header target cannot declare that we are
213 # permitted to include it since it's in the public SDK and we are not.
214 # Suppress include checking so we can still check the rest of the targets in
216 check_includes = false
219 source_set("switches") {
231 generate_jni("jni_headers") {
233 "android/apk/src/org/chromium/mojo/shell/AndroidHandler.java",
234 "android/apk/src/org/chromium/mojo/shell/Bootstrap.java",
235 "android/apk/src/org/chromium/mojo/shell/ShellMain.java",
236 "android/tests/src/org/chromium/mojo/shell/ShellTestBase.java",
238 jni_package = "mojo/shell"
241 android_library("bootstrap_java") {
242 java_files = [ "android/apk/src/org/chromium/mojo/shell/Bootstrap.java" ]
248 dex_path = "$target_out_dir/bootstrap_java.dex.jar"
251 shared_library("bootstrap") {
253 "android/bootstrap.cc",
258 ":run_android_application_function",
263 # Shared header between the bootstrap and the main shell .so.
264 source_set("run_android_application_function") {
266 "android/run_android_application_function.h",
274 android_library("java") {
276 "android/apk/src/org/chromium/mojo/shell/AndroidHandler.java",
277 "android/apk/src/org/chromium/mojo/shell/FileHelper.java",
278 "android/apk/src/org/chromium/mojo/shell/MojoShellActivity.java",
279 "android/apk/src/org/chromium/mojo/shell/MojoShellApplication.java",
280 "android/apk/src/org/chromium/mojo/shell/ShellMain.java",
289 android_resources("resources") {
290 resource_dirs = [ "android/apk/res" ]
291 custom_package = "org.chromium.mojo.shell"
294 mojo_runner_test_assets_dir = "$root_build_dir/mojo_runner_test_assets"
295 mojo_runner_apptests_assets_dir =
296 "$root_build_dir/mojo_runner_apptests_assets"
298 copy_ex("copy_mojo_runner_apptests_assets") {
301 dest = mojo_runner_apptests_assets_dir
306 "//components/clipboard:apptests",
307 "//components/resource_provider:apptests",
308 "//components/view_manager:apptests",
309 "//mojo/services/network:apptests",
313 "$root_out_dir/lib.stripped/libbootstrap$android_product_extension",
314 "$root_out_dir/obj/mojo/runner/bootstrap_java.dex.jar",
319 "clipboard_apptests",
321 "resource_provider_apptests",
322 "view_manager_apptests",
324 "network_service_apptests",
328 foreach(path, apptest_outputs) {
330 [ "--files=" + rebase_path("$root_out_dir/$path", root_build_dir) ]
334 generate_mojo_shell_assets_list("build_mojo_runner_apptests_assets") {
337 ":copy_mojo_runner_apptests_assets",
339 dir = mojo_runner_apptests_assets_dir
342 copy("copy_mojo_runner") {
344 "$root_out_dir/exe.stripped/mojo_runner",
347 "$root_out_dir/lib.stripped/libmojo_runner$android_product_extension",
354 copy_ex("copy_mojo_runner_test_assets") {
357 dest = mojo_runner_test_assets_dir
359 "//mojo/services/test_service:test_app",
360 "//mojo/services/test_service:test_request_tracker_app",
363 # Directories can't be specified as sources so pass manually to the script.
365 "--files=" + rebase_path("$root_out_dir/test_app", root_build_dir),
367 rebase_path("$root_out_dir/test_request_tracker_app", root_build_dir),
371 android_apk("mojo_runner_apptests_apk") {
373 apk_name = "MojoRunnerApptests"
374 android_manifest = "android/apk/AndroidManifest.xml"
375 native_libs = [ "libmojo_runner$android_product_extension" ]
376 asset_location = mojo_runner_apptests_assets_dir
379 ":build_mojo_runner_apptests_assets",
384 "//third_party/android_tools:google_play_services_default_resources",
385 "//ui/platform_window/android:platform_window_java",
389 generate_mojo_shell_assets_list("build_mojo_runner_test_assets") {
392 ":copy_mojo_runner_test_assets",
394 dir = mojo_runner_test_assets_dir
397 android_library("mojo_runner_tests_java") {
399 [ "android/tests/src/org/chromium/mojo/shell/ShellTestBase.java" ]
408 mojom("child_process_bindings") {
410 "child_process.mojom",
414 "//mojo/application/public/interfaces",
417 import_dirs = [ "//mojo/services" ]
420 test("mojo_runner_unittests") {
422 "about_fetcher_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",
432 "url_resolver_unittest.cc",
436 ":in_process_native_runner",
440 "//base/test:test_support",
441 "//mojo/application/public/cpp",
443 "//mojo/environment:chromium",
444 "//mojo/message_pump",
445 "//mojo/services/test_service:bindings",
447 "//mojo/util:filename_util",
449 "//third_party/mojo/src/mojo/edk/system",
450 "//third_party/mojo/src/mojo/public/cpp/bindings",
455 "//mojo/services/test_service:test_app",
456 "//mojo/services/test_service:test_request_tracker_app",
460 sources += [ "android/background_application_loader_unittest.cc" ]
462 deps += [ ":jni_headers" ]
465 ":build_mojo_runner_test_assets",
466 ":mojo_runner_tests_java",
469 apk_asset_location = mojo_runner_test_assets_dir
473 mojo_native_application("apptests") {
474 output_name = "runner_apptests"
479 # TODO(jam): needs http_server service. http://crbug.com/479316
485 "//mojo/application/public/cpp:test_support",
486 "//mojo/runner/test:bindings",
487 "//mojo/services/network/public/interfaces",
488 "//third_party/mojo/src/mojo/public/cpp/bindings:callback",