blob: edf39d98653267abf678f28afe8f2e346e1a468a [file] [log] [blame]
Tibor Goldschwendtc748dfca42019-10-24 19:39:051# 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
5import("//build/config/android/rules.gni")
6import("//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 Goldschwendtec181f5c2019-11-01 16:38:2320# paks: (Optional) PAK files going into the module.
Samuel Huang7130b4a42020-02-20 23:36:4521# load_native_on_get_impl: (Optional) Whether the module's native libraries /
22# resources are automatically loaded when Module.getImpl() is called.
Tibor Goldschwendtc748dfca42019-10-24 19:39:0523template("module_desc_java") {
24 _target_name = target_name
25
Andrew Grieve71bd025e2020-06-25 05:23:1826 _libraries_file = "${target_gen_dir}/${_target_name}.libraries"
Tibor Goldschwendtc748dfca42019-10-24 19:39:0527 generated_file("${_target_name}__libraries") {
28 if (defined(invoker.shared_libraries)) {
29 deps = invoker.shared_libraries
30 }
Andrew Grieve71bd025e2020-06-25 05:23:1831 outputs = [ _libraries_file ]
Tibor Goldschwendtc748dfca42019-10-24 19:39:0532 data_keys = [ "shared_libraries" ]
33 walk_keys = [ "shared_libraries_barrier" ]
34 rebase = root_build_dir
Andrew Grieve71bd025e2020-06-25 05:23:1835 output_conversion = "value"
Tibor Goldschwendtc748dfca42019-10-24 19:39:0536 }
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 Weber8e873042020-01-13 20:41:2541 outputs = [ _srcjar ]
Andrew Grieve71bd025e2020-06-25 05:23:1842
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 Goldschwendtc748dfca42019-10-24 19:39:0547 args = [
48 "--module",
49 invoker.module_name,
Andrew Grieve71bd025e2020-06-25 05:23:1850 "--libraries-file",
51 rebase_path(_libraries_file, root_out_dir),
Tibor Goldschwendtc748dfca42019-10-24 19:39:0552 "--output",
53 rebase_path(_srcjar, root_out_dir),
Andrew Grieve71bd025e2020-06-25 05:23:1854 "--depfile",
55 rebase_path(depfile, root_out_dir),
Tibor Goldschwendtc748dfca42019-10-24 19:39:0556 ]
Samuel Huang7130b4a42020-02-20 23:36:4557
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 Goldschwendtec181f5c2019-11-01 16:38:2363 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 Goldschwendtc748dfca42019-10-24 19:39:0570 }
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}