Tibor Goldschwendt | c748dfca4 | 2019-10-24 19:39:05 | [diff] [blame] | 1 | # Copyright 2019 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/config/android/rules.gni") |
| 6 | import("//build/config/python.gni") |
| 7 | |
| 8 | # Writes an implementation of |
| 9 | # |org.chromium.components.module_installer.builder.ModuleDescriptor| for a |
| 10 | # particular module to Java. The module loader backend expects such an |
| 11 | # implementation for each module to automate module setup on first access. |
| 12 | # Instantiations of this template can be depended on like |android_library| |
| 13 | # targets. |
| 14 | # |
| 15 | # Supports the following variables: |
| 16 | # module_name: Name of the module. |
| 17 | # shared_libraries: (Optional) List of shared_library targets the module |
| 18 | # requires at runtime. Will consider all transitively depended on |
| 19 | # shared_libraries. |
Tibor Goldschwendt | ec181f5c | 2019-11-01 16:38:23 | [diff] [blame] | 20 | # paks: (Optional) PAK files going into the module. |
Samuel Huang | 7130b4a4 | 2020-02-20 23:36:45 | [diff] [blame] | 21 | # load_native_on_get_impl: (Optional) Whether the module's native libraries / |
| 22 | # resources are automatically loaded when Module.getImpl() is called. |
Tibor Goldschwendt | c748dfca4 | 2019-10-24 19:39:05 | [diff] [blame] | 23 | template("module_desc_java") { |
| 24 | _target_name = target_name |
| 25 | |
Andrew Grieve | 71bd025e | 2020-06-25 05:23:18 | [diff] [blame] | 26 | _libraries_file = "${target_gen_dir}/${_target_name}.libraries" |
Tibor Goldschwendt | c748dfca4 | 2019-10-24 19:39:05 | [diff] [blame] | 27 | generated_file("${_target_name}__libraries") { |
| 28 | if (defined(invoker.shared_libraries)) { |
| 29 | deps = invoker.shared_libraries |
| 30 | } |
Andrew Grieve | 71bd025e | 2020-06-25 05:23:18 | [diff] [blame] | 31 | outputs = [ _libraries_file ] |
Tibor Goldschwendt | c748dfca4 | 2019-10-24 19:39:05 | [diff] [blame] | 32 | data_keys = [ "shared_libraries" ] |
| 33 | walk_keys = [ "shared_libraries_barrier" ] |
| 34 | rebase = root_build_dir |
Andrew Grieve | 71bd025e | 2020-06-25 05:23:18 | [diff] [blame] | 35 | output_conversion = "value" |
Tibor Goldschwendt | c748dfca4 | 2019-10-24 19:39:05 | [diff] [blame] | 36 | } |
| 37 | |
| 38 | _srcjar = "$target_gen_dir/${_target_name}__srcjar.srcjar" |
| 39 | action_with_pydeps("${_target_name}__srcjar") { |
| 40 | script = "//components/module_installer/android/module_desc_java.py" |
Nico Weber | 8e87304 | 2020-01-13 20:41:25 | [diff] [blame] | 41 | outputs = [ _srcjar ] |
Andrew Grieve | 71bd025e | 2020-06-25 05:23:18 | [diff] [blame] | 42 | |
| 43 | # Do not add a dep on the generated_file target in order to avoid having |
| 44 | # to build the native libraries before this target. The dependency is |
| 45 | # instead captured via a depfile. |
| 46 | depfile = "$target_gen_dir/$target_name.d" |
Tibor Goldschwendt | c748dfca4 | 2019-10-24 19:39:05 | [diff] [blame] | 47 | args = [ |
| 48 | "--module", |
| 49 | invoker.module_name, |
Andrew Grieve | 71bd025e | 2020-06-25 05:23:18 | [diff] [blame] | 50 | "--libraries-file", |
| 51 | rebase_path(_libraries_file, root_out_dir), |
Tibor Goldschwendt | c748dfca4 | 2019-10-24 19:39:05 | [diff] [blame] | 52 | "--output", |
| 53 | rebase_path(_srcjar, root_out_dir), |
Andrew Grieve | 71bd025e | 2020-06-25 05:23:18 | [diff] [blame] | 54 | "--depfile", |
| 55 | rebase_path(depfile, root_out_dir), |
Tibor Goldschwendt | c748dfca4 | 2019-10-24 19:39:05 | [diff] [blame] | 56 | ] |
Samuel Huang | 7130b4a4 | 2020-02-20 23:36:45 | [diff] [blame] | 57 | |
| 58 | if (defined(invoker.load_native_on_get_impl) && |
| 59 | invoker.load_native_on_get_impl) { |
| 60 | args += [ "--load-native-on-get-impl" ] |
| 61 | } |
| 62 | |
Tibor Goldschwendt | ec181f5c | 2019-11-01 16:38:23 | [diff] [blame] | 63 | if (defined(invoker.paks)) { |
| 64 | _rebased_paks = [] |
| 65 | foreach(_pak, invoker.paks) { |
| 66 | _rebased_paks += [ rebase_path(_pak, root_out_dir) ] |
| 67 | } |
| 68 | args += [ "--paks=$_rebased_paks" ] |
| 69 | } |
Tibor Goldschwendt | c748dfca4 | 2019-10-24 19:39:05 | [diff] [blame] | 70 | } |
| 71 | |
| 72 | android_library(_target_name) { |
| 73 | deps = [ |
| 74 | "//base:base_java", |
| 75 | "//components/module_installer/android:module_installer_java", |
| 76 | ] |
| 77 | srcjar_deps = [ ":${_target_name}__srcjar" ] |
| 78 | } |
| 79 | } |