| OLD | NEW |
| (Empty) |
| 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. | |
| 4 | |
| 5 import("//build/toolchain/toolchain.gni") | |
| 6 import("//mojo/public/mojo_constants.gni") | |
| 7 | |
| 8 if (is_android) { | |
| 9 import("//build/config/android/rules.gni") | |
| 10 import("//build/config/zip.gni") | |
| 11 } | |
| 12 | |
| 13 # Generate a binary Mojo application in a self-named directory. | |
| 14 # Application resources are copied to a "resources" directory alongside the app. | |
| 15 # The parameters of this template are those of a shared library. | |
| 16 template("mojo_native_application") { | |
| 17 base_target_name = target_name | |
| 18 if (defined(invoker.output_name)) { | |
| 19 base_target_name = invoker.output_name | |
| 20 } | |
| 21 | |
| 22 final_target_name = target_name | |
| 23 | |
| 24 mojo_deps = [] | |
| 25 if (defined(invoker.deps)) { | |
| 26 mojo_deps += invoker.deps | |
| 27 } | |
| 28 | |
| 29 mojo_data_deps = [] | |
| 30 | |
| 31 if (defined(invoker.resources)) { | |
| 32 copy_step_name = "${base_target_name}__copy_resources" | |
| 33 copy(copy_step_name) { | |
| 34 sources = invoker.resources | |
| 35 outputs = [ | |
| 36 "${root_out_dir}/${mojo_application_subdir}/${base_target_name}/resource
s/{{source_file_part}}", | |
| 37 ] | |
| 38 if (defined(invoker.testonly)) { | |
| 39 testonly = invoker.testonly | |
| 40 } | |
| 41 deps = mojo_deps | |
| 42 } | |
| 43 mojo_data_deps += [ ":$copy_step_name" ] | |
| 44 } | |
| 45 | |
| 46 output = base_target_name + ".mojo" | |
| 47 library_target_name = base_target_name + "_library" | |
| 48 library_name = "${shlib_prefix}${library_target_name}${shlib_extension}" | |
| 49 | |
| 50 shared_library(library_target_name) { | |
| 51 if (defined(invoker.cflags)) { | |
| 52 cflags = invoker.cflags | |
| 53 } | |
| 54 if (defined(invoker.cflags_c)) { | |
| 55 cflags_c = invoker.cflags_c | |
| 56 } | |
| 57 if (defined(invoker.cflags_cc)) { | |
| 58 cflags_cc = invoker.cflags_cc | |
| 59 } | |
| 60 if (defined(invoker.cflags_objc)) { | |
| 61 cflags_objc = invoker.cflags_objc | |
| 62 } | |
| 63 if (defined(invoker.cflags_objcc)) { | |
| 64 cflags_objcc = invoker.cflags_objcc | |
| 65 } | |
| 66 if (defined(invoker.defines)) { | |
| 67 defines = invoker.defines | |
| 68 } | |
| 69 if (defined(invoker.include_dirs)) { | |
| 70 include_dirs = invoker.include_dirs | |
| 71 } | |
| 72 if (defined(invoker.ldflags)) { | |
| 73 ldflags = invoker.ldflags | |
| 74 } | |
| 75 if (defined(invoker.lib_dirs)) { | |
| 76 lib_dirs = invoker.lib_dirs | |
| 77 } | |
| 78 if (defined(invoker.libs)) { | |
| 79 libs = invoker.libs | |
| 80 } | |
| 81 | |
| 82 data_deps = [] | |
| 83 if (!defined(invoker.avoid_runner_cycle) || !invoker.avoid_runner_cycle) { | |
| 84 # Give the user an out; as some mojo services are depended on by the | |
| 85 # runner. | |
| 86 data_deps += [ "//services/shell/standalone" ] | |
| 87 } | |
| 88 if (defined(invoker.data_deps)) { | |
| 89 data_deps += invoker.data_deps | |
| 90 } | |
| 91 data_deps += mojo_data_deps | |
| 92 | |
| 93 deps = [ | |
| 94 "//mojo/public/c/system:set_thunks_for_app", | |
| 95 "//services/shell/public/cpp:application_support", | |
| 96 ] | |
| 97 | |
| 98 deps += mojo_deps | |
| 99 if (defined(invoker.public_deps)) { | |
| 100 public_deps = invoker.public_deps | |
| 101 } | |
| 102 if (defined(invoker.all_dependent_configs)) { | |
| 103 all_dependent_configs = invoker.all_dependent_configs | |
| 104 } | |
| 105 if (defined(invoker.public_configs)) { | |
| 106 public_configs = invoker.public_configs | |
| 107 } | |
| 108 if (defined(invoker.check_includes)) { | |
| 109 check_includes = invoker.check_includes | |
| 110 } | |
| 111 if (defined(invoker.configs)) { | |
| 112 configs += invoker.configs | |
| 113 } | |
| 114 if (defined(invoker.data)) { | |
| 115 data = invoker.data | |
| 116 } | |
| 117 if (defined(invoker.inputs)) { | |
| 118 inputs = invoker.inputs | |
| 119 } | |
| 120 if (defined(invoker.public)) { | |
| 121 public = invoker.public | |
| 122 } | |
| 123 if (defined(invoker.sources)) { | |
| 124 sources = invoker.sources | |
| 125 } | |
| 126 if (defined(invoker.testonly)) { | |
| 127 testonly = invoker.testonly | |
| 128 } | |
| 129 } | |
| 130 | |
| 131 copy(final_target_name) { | |
| 132 forward_variables_from(invoker, | |
| 133 [ | |
| 134 "testonly", | |
| 135 "visibility", | |
| 136 ]) | |
| 137 deps = [ | |
| 138 ":${library_target_name}", | |
| 139 ] | |
| 140 | |
| 141 sources = [ | |
| 142 "${root_shlib_dir}/${library_name}", | |
| 143 ] | |
| 144 outputs = [ | |
| 145 "${root_out_dir}/${mojo_application_subdir}/${base_target_name}/${output}"
, | |
| 146 ] | |
| 147 } | |
| 148 | |
| 149 if (is_android) { | |
| 150 android_assets("${final_target_name}_assets") { | |
| 151 forward_variables_from(invoker, [ "testonly" ]) | |
| 152 deps = [ | |
| 153 ":${library_target_name}", | |
| 154 ] | |
| 155 if (defined(invoker.deps)) { | |
| 156 deps += invoker.deps | |
| 157 } | |
| 158 renaming_sources = [ "${root_shlib_dir}/${library_name}" ] | |
| 159 renaming_destinations = [ "${base_target_name}/${output}" ] | |
| 160 if (defined(invoker.resources)) { | |
| 161 renaming_sources += invoker.resources | |
| 162 renaming_destinations += process_file_template( | |
| 163 invoker.resources, | |
| 164 [ "$base_target_name/resources/{{source_file_part}}" ]) | |
| 165 } | |
| 166 } | |
| 167 } | |
| 168 } | |
| 169 | |
| 170 if (is_android) { | |
| 171 # Declares an Android Mojo application consisting of an .so file and a | |
| 172 # corresponding .dex.jar file. | |
| 173 # | |
| 174 # Variables: | |
| 175 # input_so: the .so file to bundle | |
| 176 # input_dex_jar: the .dex.jar file to bundle | |
| 177 # deps / public_deps / data_deps (optional): | |
| 178 # Dependencies. The targets that generate the .so/jar inputs should be | |
| 179 # listed in either deps or public_deps. | |
| 180 # output_name (optional): override for the output file name | |
| 181 template("mojo_android_application") { | |
| 182 assert(defined(invoker.input_so)) | |
| 183 assert(defined(invoker.input_dex_jar)) | |
| 184 | |
| 185 base_target_name = target_name | |
| 186 if (defined(invoker.output_name)) { | |
| 187 base_target_name = invoker.output_name | |
| 188 } | |
| 189 | |
| 190 mojo_data_deps = [] | |
| 191 if (defined(invoker.resources)) { | |
| 192 copy_step_name = "${base_target_name}__copy_resources" | |
| 193 copy(copy_step_name) { | |
| 194 sources = invoker.resources | |
| 195 outputs = [ | |
| 196 "${root_out_dir}/${mojo_application_subdir}/${base_target_name}/resour
ces/{{source_file_part}}", | |
| 197 ] | |
| 198 if (defined(invoker.testonly)) { | |
| 199 testonly = invoker.testonly | |
| 200 } | |
| 201 if (defined(invoker.deps)) { | |
| 202 deps = invoker.deps | |
| 203 } | |
| 204 } | |
| 205 mojo_data_deps += [ ":$copy_step_name" ] | |
| 206 } | |
| 207 | |
| 208 zip_action_name = "${target_name}_zip" | |
| 209 zip_action_output = "$target_gen_dir/${target_name}.zip" | |
| 210 prepend_action_name = target_name | |
| 211 zip(zip_action_name) { | |
| 212 visibility = [ ":$prepend_action_name" ] | |
| 213 inputs = [ | |
| 214 invoker.input_so, | |
| 215 invoker.input_dex_jar, | |
| 216 ] | |
| 217 output = zip_action_output | |
| 218 forward_variables_from(invoker, | |
| 219 [ | |
| 220 "deps", | |
| 221 "public_deps", | |
| 222 "data_deps", | |
| 223 ]) | |
| 224 } | |
| 225 | |
| 226 _mojo_output = "${root_out_dir}/${mojo_application_subdir}/${base_target_nam
e}/${base_target_name}.mojo" | |
| 227 | |
| 228 action(target_name) { | |
| 229 script = "//mojo/public/tools/prepend.py" | |
| 230 | |
| 231 input = zip_action_output | |
| 232 inputs = [ | |
| 233 input, | |
| 234 ] | |
| 235 | |
| 236 outputs = [ | |
| 237 _mojo_output, | |
| 238 ] | |
| 239 | |
| 240 rebase_input = rebase_path(input, root_build_dir) | |
| 241 rebase_output = rebase_path(_mojo_output, root_build_dir) | |
| 242 args = [ | |
| 243 "--input=$rebase_input", | |
| 244 "--output=$rebase_output", | |
| 245 "--line=#!mojo mojo:android_handler", | |
| 246 ] | |
| 247 | |
| 248 data_deps = mojo_data_deps | |
| 249 | |
| 250 public_deps = [ | |
| 251 ":$zip_action_name", | |
| 252 ] | |
| 253 } | |
| 254 | |
| 255 android_assets("${target_name}_assets") { | |
| 256 forward_variables_from(invoker, [ "testonly" ]) | |
| 257 deps = [ | |
| 258 ":$prepend_action_name", | |
| 259 ] | |
| 260 renaming_sources = [ _mojo_output ] | |
| 261 renaming_destinations = [ "${base_target_name}/${base_target_name}.mojo" ] | |
| 262 if (defined(invoker.resources)) { | |
| 263 renaming_sources += invoker.resources | |
| 264 renaming_destinations += process_file_template( | |
| 265 invoker.resources, | |
| 266 [ "$base_target_name/resources/{{source_file_part}}" ]) | |
| 267 } | |
| 268 } | |
| 269 } | |
| 270 } | |
| OLD | NEW |