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.
7 # Generate a binary Mojo application in a self-named directory.
8 # Application resources are copied to a "resources" directory alongside the app.
9 # The parameters of this template are those of a shared library.
10 template("mojo_native_application") {
11 base_target_name = target_name
12 if (defined(invoker.output_name)) {
13 base_target_name = invoker.output_name
16 final_target_name = target_name
19 if (defined(invoker.deps)) {
20 mojo_deps += invoker.deps
23 if (defined(invoker.resources)) {
24 copy_step_name = "${base_target_name}__copy_resources"
25 copy(copy_step_name) {
26 sources = invoker.resources
28 "${root_out_dir}/${base_target_name}/resources/{{source_file_part}}",
30 if (defined(invoker.testonly)) {
31 testonly = invoker.testonly
35 mojo_deps += [ ":$copy_step_name" ]
39 output = base_target_name + ".mojo"
40 library_target_name = base_target_name + "_library"
42 if (is_linux || is_android) {
43 library_name = "lib${library_target_name}.so"
45 library_name = "${library_target_name}.dll"
47 library_name = "lib${library_target_name}.dylib"
49 assert(false, "Platform not supported.")
53 # On android, use the stripped version of the library, because
54 # applications are always fetched over the network.
55 library_dir = "${root_out_dir}/lib.stripped"
57 library_dir = root_out_dir
60 shared_library(library_target_name) {
61 if (defined(invoker.cflags)) {
62 cflags = invoker.cflags
64 if (defined(invoker.cflags_c)) {
65 cflags_c = invoker.cflags_c
67 if (defined(invoker.cflags_cc)) {
68 cflags_cc = invoker.cflags_cc
70 if (defined(invoker.cflags_objc)) {
71 cflags_objc = invoker.cflags_objc
73 if (defined(invoker.cflags_objcc)) {
74 cflags_objcc = invoker.cflags_objcc
76 if (defined(invoker.defines)) {
77 defines = invoker.defines
79 if (defined(invoker.include_dirs)) {
80 include_dirs = invoker.include_dirs
82 if (defined(invoker.ldflags)) {
83 ldflags = invoker.ldflags
85 if (defined(invoker.lib_dirs)) {
86 lib_dirs = invoker.lib_dirs
88 if (defined(invoker.libs)) {
93 if (defined(invoker.data_deps)) {
94 data_deps = invoker.data_deps
97 # Copy any necessary prebuilt artifacts.
98 if (mojo_use_prebuilt_mojo_shell) {
100 [ rebase_path("mojo/public/tools:copy_mojo_shell", ".", mojo_root) ]
102 if (mojo_use_prebuilt_network_service) {
103 data_deps += [ rebase_path("mojo/public/tools:copy_network_service",
109 "mojo/public/c/system",
110 "mojo/public/platform/native:system",
115 if (defined(invoker.forward_dependent_configs_from)) {
116 forward_dependent_configs_from = invoker.forward_dependent_configs_from
118 if (defined(invoker.public_deps)) {
119 public_deps = invoker.public_deps
121 if (defined(invoker.all_dependent_configs)) {
122 all_dependent_configs = invoker.all_dependent_configs
124 if (defined(invoker.public_configs)) {
125 public_configs = invoker.public_configs
127 if (defined(invoker.check_includes)) {
128 check_includes = invoker.check_includes
130 if (defined(invoker.configs)) {
131 configs += invoker.configs
133 if (defined(invoker.data)) {
136 if (defined(invoker.inputs)) {
137 inputs = invoker.inputs
139 if (defined(invoker.public)) {
140 public = invoker.public
142 if (defined(invoker.sources)) {
143 sources = invoker.sources
145 if (defined(invoker.testonly)) {
146 testonly = invoker.testonly
149 visibility = [ ":${final_target_name}" ]
152 copy(final_target_name) {
153 if (defined(invoker.testonly)) {
154 testonly = invoker.testonly
156 if (defined(invoker.visibility)) {
157 visibility = invoker.visibility
160 ":${library_target_name}",
164 "${library_dir}/${library_name}",
167 "${root_out_dir}/${base_target_name}/${output}",
171 nexe_target_name = base_target_name + "_nexe"
172 nexe_name = base_target_name + ".nexe"
174 output = "${base_target_name}_${target_cpu}.nexe.mojo"
176 executable(nexe_target_name) {
177 output_name = base_target_name
179 if (defined(invoker.cflags)) {
180 cflags = invoker.cflags
182 if (defined(invoker.cflags_c)) {
183 cflags_c = invoker.cflags_c
185 if (defined(invoker.cflags_cc)) {
186 cflags_cc = invoker.cflags_cc
188 if (defined(invoker.cflags_objc)) {
189 cflags_objc = invoker.cflags_objc
191 if (defined(invoker.cflags_objcc)) {
192 cflags_objcc = invoker.cflags_objcc
194 if (defined(invoker.defines)) {
195 defines = invoker.defines
197 if (defined(invoker.include_dirs)) {
198 include_dirs = invoker.include_dirs
200 if (defined(invoker.ldflags)) {
201 ldflags = invoker.ldflags
203 if (defined(invoker.lib_dirs)) {
204 lib_dirs = invoker.lib_dirs
206 if (defined(invoker.libs)) {
211 if (defined(invoker.data_deps)) {
212 data_deps = invoker.data_deps
215 # Copy any necessary prebuilt artifacts.
216 if (mojo_use_prebuilt_mojo_shell) {
218 [ rebase_path("mojo/public/tools:copy_mojo_shell", ".", mojo_root) ]
220 if (mojo_use_prebuilt_network_service) {
221 data_deps += [ rebase_path("mojo/public/tools:copy_network_service",
227 "mojo/public/c/system",
228 "mojo/public/platform/nacl:system",
233 if (defined(invoker.forward_dependent_configs_from)) {
234 forward_dependent_configs_from = invoker.forward_dependent_configs_from
236 if (defined(invoker.public_deps)) {
237 public_deps = invoker.public_deps
239 if (defined(invoker.all_dependent_configs)) {
240 all_dependent_configs = invoker.all_dependent_configs
242 if (defined(invoker.public_configs)) {
243 public_configs = invoker.public_configs
245 if (defined(invoker.check_includes)) {
246 check_includes = invoker.check_includes
248 if (defined(invoker.configs)) {
249 configs += invoker.configs
251 if (defined(invoker.data)) {
254 if (defined(invoker.inputs)) {
255 inputs = invoker.inputs
257 if (defined(invoker.public)) {
258 public = invoker.public
260 if (defined(invoker.sources)) {
261 sources = invoker.sources
263 if (defined(invoker.testonly)) {
264 testonly = invoker.testonly
267 visibility = [ ":${final_target_name}" ]
270 action(target_name) {
271 if (defined(invoker.testonly)) {
272 testonly = invoker.testonly
274 if (defined(invoker.visibility)) {
275 visibility = invoker.visibility
278 script = rebase_path("mojo/public/tools/prepend.py", ".", mojo_root)
280 input_path = "${root_out_dir}/${nexe_name}"
285 output_path = "${root_build_dir}/${base_target_name}/${output}"
291 ":${nexe_target_name}",
294 rebase_input = rebase_path(input_path, root_build_dir)
295 rebase_output = rebase_path(output_path, root_build_dir)
297 "--input=$rebase_input",
298 "--output=$rebase_output",
299 "--line=#!mojo mojo:nacl_content_handler",
306 # Declares an Android Mojo application consisting of an .so file and a
307 # corresponding .dex.jar file.
310 # input_so: the .so file to bundle
311 # input_dex_jar: the .dex.jar file to bundle
312 # deps / public_deps / data_deps (optional):
313 # Dependencies. The targets that generate the .so/jar inputs should be
314 # listed in either deps or public_deps.
315 # output_name (optional): override for the output file name
316 template("mojo_android_application") {
317 assert(defined(invoker.input_so))
318 assert(defined(invoker.input_dex_jar))
320 zip_action_name = "${target_name}_zip"
321 zip_action_output = "$target_gen_dir/${target_name}.zip"
322 prepend_action_name = target_name
323 action(zip_action_name) {
324 visibility = [ ":$prepend_action_name" ]
325 script = "//build/android/gn/zip.py"
329 invoker.input_dex_jar,
332 output = zip_action_output
337 rebase_inputs = rebase_path(inputs, root_build_dir)
338 rebase_output = rebase_path(output, root_build_dir)
340 "--inputs=$rebase_inputs",
341 "--output=$rebase_output",
344 if (defined(invoker.deps)) {
347 if (defined(invoker.public_deps)) {
348 public_deps = invoker.public_deps
350 if (defined(invoker.data_deps)) {
351 data_deps = invoker.data_deps
355 action(target_name) {
356 script = rebase_path("mojo/public/tools/prepend.py", ".", mojo_root)
358 base_target_name = target_name
359 if (defined(invoker.output_name)) {
360 base_target_name = invoker.output_name
363 input = zip_action_output
368 output = "${root_out_dir}/${base_target_name}/${base_target_name}.mojo"
373 rebase_input = rebase_path(input, root_build_dir)
374 rebase_output = rebase_path(output, root_build_dir)
376 "--input=$rebase_input",
377 "--output=$rebase_output",
378 "--line=#!mojo mojo:android_handler",