| # Copyright 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/toolchain/toolchain.gni") |
| import("//mojo/public/mojo_constants.gni") |
| |
| if (is_android) { |
| import("//build/config/android/rules.gni") |
| import("//build/config/zip.gni") |
| } |
| |
| # Generate a binary Mojo application in a self-named directory. |
| # Application resources are copied to a "resources" directory alongside the app. |
| # The parameters of this template are those of a shared library. |
| template("mojo_native_application") { |
| base_target_name = target_name |
| if (defined(invoker.output_name)) { |
| base_target_name = invoker.output_name |
| } |
| |
| final_target_name = target_name |
| |
| mojo_deps = [] |
| if (defined(invoker.deps)) { |
| mojo_deps += invoker.deps |
| } |
| |
| mojo_data_deps = [] |
| |
| if (defined(invoker.resources)) { |
| copy_step_name = "${base_target_name}__copy_resources" |
| copy(copy_step_name) { |
| sources = invoker.resources |
| outputs = [ |
| "${root_out_dir}/${mojo_application_subdir}/${base_target_name}/resources/{{source_file_part}}", |
| ] |
| if (defined(invoker.testonly)) { |
| testonly = invoker.testonly |
| } |
| deps = mojo_deps |
| } |
| mojo_data_deps += [ ":$copy_step_name" ] |
| } |
| |
| output = base_target_name + ".mojo" |
| library_target_name = base_target_name + "_library" |
| library_name = "${shlib_prefix}${library_target_name}${shlib_extension}" |
| |
| shared_library(library_target_name) { |
| if (defined(invoker.cflags)) { |
| cflags = invoker.cflags |
| } |
| if (defined(invoker.cflags_c)) { |
| cflags_c = invoker.cflags_c |
| } |
| if (defined(invoker.cflags_cc)) { |
| cflags_cc = invoker.cflags_cc |
| } |
| if (defined(invoker.cflags_objc)) { |
| cflags_objc = invoker.cflags_objc |
| } |
| if (defined(invoker.cflags_objcc)) { |
| cflags_objcc = invoker.cflags_objcc |
| } |
| if (defined(invoker.defines)) { |
| defines = invoker.defines |
| } |
| if (defined(invoker.include_dirs)) { |
| include_dirs = invoker.include_dirs |
| } |
| if (defined(invoker.ldflags)) { |
| ldflags = invoker.ldflags |
| } |
| if (defined(invoker.lib_dirs)) { |
| lib_dirs = invoker.lib_dirs |
| } |
| if (defined(invoker.libs)) { |
| libs = invoker.libs |
| } |
| |
| data_deps = [] |
| if (!defined(invoker.avoid_runner_cycle) || !invoker.avoid_runner_cycle) { |
| # Give the user an out; as some mojo services are depended on by the |
| # runner. |
| data_deps += [ "//services/shell/standalone" ] |
| } |
| if (defined(invoker.data_deps)) { |
| data_deps += invoker.data_deps |
| } |
| data_deps += mojo_data_deps |
| |
| deps = [ |
| "//mojo/public/c/system:set_thunks_for_app", |
| "//services/shell/public/cpp:application_support", |
| ] |
| |
| deps += mojo_deps |
| if (defined(invoker.public_deps)) { |
| public_deps = invoker.public_deps |
| } |
| if (defined(invoker.all_dependent_configs)) { |
| all_dependent_configs = invoker.all_dependent_configs |
| } |
| if (defined(invoker.public_configs)) { |
| public_configs = invoker.public_configs |
| } |
| if (defined(invoker.check_includes)) { |
| check_includes = invoker.check_includes |
| } |
| if (defined(invoker.configs)) { |
| configs += invoker.configs |
| } |
| if (defined(invoker.data)) { |
| data = invoker.data |
| } |
| if (defined(invoker.inputs)) { |
| inputs = invoker.inputs |
| } |
| if (defined(invoker.public)) { |
| public = invoker.public |
| } |
| if (defined(invoker.sources)) { |
| sources = invoker.sources |
| } |
| if (defined(invoker.testonly)) { |
| testonly = invoker.testonly |
| } |
| } |
| |
| copy(final_target_name) { |
| forward_variables_from(invoker, |
| [ |
| "testonly", |
| "visibility", |
| ]) |
| deps = [ |
| ":${library_target_name}", |
| ] |
| |
| sources = [ |
| "${root_shlib_dir}/${library_name}", |
| ] |
| outputs = [ |
| "${root_out_dir}/${mojo_application_subdir}/${base_target_name}/${output}", |
| ] |
| } |
| |
| if (is_android) { |
| android_assets("${final_target_name}_assets") { |
| forward_variables_from(invoker, [ "testonly" ]) |
| deps = [ |
| ":${library_target_name}", |
| ] |
| if (defined(invoker.deps)) { |
| deps += invoker.deps |
| } |
| renaming_sources = [ "${root_shlib_dir}/${library_name}" ] |
| renaming_destinations = [ "${base_target_name}/${output}" ] |
| if (defined(invoker.resources)) { |
| renaming_sources += invoker.resources |
| renaming_destinations += process_file_template( |
| invoker.resources, |
| [ "$base_target_name/resources/{{source_file_part}}" ]) |
| } |
| } |
| } |
| } |
| |
| if (is_android) { |
| # Declares an Android Mojo application consisting of an .so file and a |
| # corresponding .dex.jar file. |
| # |
| # Variables: |
| # input_so: the .so file to bundle |
| # input_dex_jar: the .dex.jar file to bundle |
| # deps / public_deps / data_deps (optional): |
| # Dependencies. The targets that generate the .so/jar inputs should be |
| # listed in either deps or public_deps. |
| # output_name (optional): override for the output file name |
| template("mojo_android_application") { |
| assert(defined(invoker.input_so)) |
| assert(defined(invoker.input_dex_jar)) |
| |
| base_target_name = target_name |
| if (defined(invoker.output_name)) { |
| base_target_name = invoker.output_name |
| } |
| |
| mojo_data_deps = [] |
| if (defined(invoker.resources)) { |
| copy_step_name = "${base_target_name}__copy_resources" |
| copy(copy_step_name) { |
| sources = invoker.resources |
| outputs = [ |
| "${root_out_dir}/${mojo_application_subdir}/${base_target_name}/resources/{{source_file_part}}", |
| ] |
| if (defined(invoker.testonly)) { |
| testonly = invoker.testonly |
| } |
| if (defined(invoker.deps)) { |
| deps = invoker.deps |
| } |
| } |
| mojo_data_deps += [ ":$copy_step_name" ] |
| } |
| |
| zip_action_name = "${target_name}_zip" |
| zip_action_output = "$target_gen_dir/${target_name}.zip" |
| prepend_action_name = target_name |
| zip(zip_action_name) { |
| visibility = [ ":$prepend_action_name" ] |
| inputs = [ |
| invoker.input_so, |
| invoker.input_dex_jar, |
| ] |
| output = zip_action_output |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "public_deps", |
| "data_deps", |
| ]) |
| } |
| |
| _mojo_output = "${root_out_dir}/${mojo_application_subdir}/${base_target_name}/${base_target_name}.mojo" |
| |
| action(target_name) { |
| script = "//mojo/public/tools/prepend.py" |
| |
| input = zip_action_output |
| inputs = [ |
| input, |
| ] |
| |
| outputs = [ |
| _mojo_output, |
| ] |
| |
| rebase_input = rebase_path(input, root_build_dir) |
| rebase_output = rebase_path(_mojo_output, root_build_dir) |
| args = [ |
| "--input=$rebase_input", |
| "--output=$rebase_output", |
| "--line=#!mojo mojo:android_handler", |
| ] |
| |
| data_deps = mojo_data_deps |
| |
| public_deps = [ |
| ":$zip_action_name", |
| ] |
| } |
| |
| android_assets("${target_name}_assets") { |
| forward_variables_from(invoker, [ "testonly" ]) |
| deps = [ |
| ":$prepend_action_name", |
| ] |
| renaming_sources = [ _mojo_output ] |
| renaming_destinations = [ "${base_target_name}/${base_target_name}.mojo" ] |
| if (defined(invoker.resources)) { |
| renaming_sources += invoker.resources |
| renaming_destinations += process_file_template( |
| invoker.resources, |
| [ "$base_target_name/resources/{{source_file_part}}" ]) |
| } |
| } |
| } |
| } |