Chromium Code Reviews| Index: build/config/android/internal_rules.gni |
| diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni |
| index 3bcf4930caeeab8bf390fa63b7755bfb8e563706..2677201c088cb2492cc43d98d3069453ff766af8 100644 |
| --- a/build/config/android/internal_rules.gni |
| +++ b/build/config/android/internal_rules.gni |
| @@ -1,3 +1,4 @@ |
| +import("config.gni") |
| # Creates a zip archive of the inputs. |
| # If base_dir is provided, the archive paths will be relative to it. |
| @@ -23,3 +24,129 @@ template("_zip") { |
| } |
| } |
| +# Compiles and jars a set of java_files. |
| +# |
| +# Also, creates the .jar.TOC file for the final .jar output. |
| +# |
| +# Variables |
| +# java_files: List of .java files to compile. |
| +# java_deps: List of java dependencies. These should all have a .jar output |
| +# at get_target_gen_path(dep, ".jar"). |
| +# chromium_code: If 1, enable extra warnings. |
| +# srcjar_deps: List of srcjar dependencies. The .java files contained in the |
| +# dependencies srcjar outputs will be compiled and added to the output jar. |
| +# jar_path: Use this to explicitly set the output jar path. Defaults to |
| +# get_target_gen_path(":$target_name", ".jar") |
| +template("_java_library") { |
| + assert(defined(invoker.java_files)) |
| + java_files = invoker.java_files |
| + |
| + if (defined(invoker.java_deps)) { |
| + java_deps = invoker.java_deps + [] |
| + } else { |
| + java_deps = [] |
| + } |
| + |
| + if (defined(invoker.chromium_code)) { |
| + chromium_code = invoker.chromium_code + 0 |
|
Nico
2014/05/05 22:17:51
Why "+ 0"? Looks asm.js-y :-D
cjhopman
2014/06/25 01:20:04
This was sort of just type-checking. It would prov
|
| + } else { |
| + chromium_code = 0 |
| + } |
| + |
| + if (defined(invoker.srcjar_deps)) { |
| + srcjar_deps = invoker.srcjar_deps + [] |
|
Nico
2014/05/05 22:17:51
Same question (/me is a gn noob)
|
| + } else { |
| + srcjar_deps = [] |
| + } |
| + java_srcjars = get_target_gen_path(srcjar_deps, ".srcjar") |
| + |
| + if (defined(invoker.jar_path)) { |
| + jar_path = invoker.jar_path |
| + } else { |
| + jar_path = get_target_gen_path(":${target_name}", ".jar") |
| + } |
| + jar_toc_path = jar_path + ".TOC" |
| + |
| + dependency_jars = get_target_gen_path(java_deps, ".jar") |
| + dependency_jar_tocs = get_target_gen_path(java_deps, ".jar.TOC") |
| + |
| + rebase_java_files = rebase_path(java_files) |
| + rebase_jar_path = rebase_path(jar_path) |
| + |
| + android_jar = "${android_sdk}/android.jar" |
| + action("${target_name}__javac") { |
| + script = "//build/android/gn/javac.py" |
| + depfile = "$target_gen_dir/$target_name.d" |
| + outputs = [jar_path, jar_path + ".md5.stamp"] |
| + source_prereqs = java_files + dependency_jar_tocs + [android_jar] + java_srcjars |
|
Nico
2014/05/05 22:17:51
"""In an action the "sources" and "source_prereqs"
cjhopman
2014/06/25 01:20:03
Done (I think). I'd rather there weren't two names
|
| + |
| + rebase_dependency_jars = rebase_path(dependency_jars + [android_jar]) |
| + rebase_java_srcjars = rebase_path(java_srcjars) |
| + args = [ |
| + "--depfile", rebase_path(depfile, root_build_dir), |
| + "--classpath-jars=$rebase_dependency_jars", |
| + "--java-files=$rebase_java_files", |
| + "--jar-path=$rebase_jar_path", |
| + "--java-srcjars=$rebase_java_srcjars", |
| + "--chromium-code=$chromium_code", |
| + ] |
| + } |
| + |
| + # TODO(cjhopman): proguard |
| + |
| + rebase_jar_toc_path = rebase_path(jar_toc_path) |
| + action("${target_name}__jar_toc") { |
| + script = "//build/android/gyp/jar_toc.py" |
| + outputs = [jar_toc_path, jar_toc_path + ".md5.stamp"] |
| + depfile = "$target_gen_dir/$target_name.d" |
| + source_prereqs = [jar_path] |
| + args = [ |
| + "--depfile", rebase_path(depfile, root_build_dir), |
| + "--jar-path=${rebase_jar_path}", |
| + "--toc-path=${rebase_jar_toc_path}", |
| + ] |
| + } |
| + |
| + group(target_name) { |
| + deps = [ |
| + ":${target_name}__javac", |
|
Nico
2014/05/05 22:17:51
Do you need this? __jar_toc already depends on it,
cjhopman
2014/06/25 01:20:04
I don't think gn is smart about this, but I would
|
| + ":${target_name}__jar_toc", |
| + ] + java_deps + srcjar_deps |
| + } |
| +} |
| + |
| +# This adds Android-specific parts to the java_library template. |
| +# |
| +# Runs Android lint against the compiled java files. |
| +# Dexes the output jar for inclusion in an APK. |
| +template("_android_java_library") { |
| + if (defined(invoker.library_deps)) { |
| + library_deps = invoker.library_deps + [] |
| + } else { |
| + library_deps = [] |
| + } |
| + |
| + |
| + assert(defined(invoker.java_files)) |
| + |
| + _java_library("${target_name}__java_library") { |
| + if (defined(invoker.jar_path)) { |
| + jar_path = invoker.jar_path |
| + } |
| + java_deps = library_deps |
| + java_files = invoker.java_files |
| + |
| + if (defined(invoker.srcjar_deps)) { |
| + srcjar_deps = invoker.srcjar_deps |
| + } |
| + } |
| + |
| + # TODO(cjhopman): lint |
| + # TODO(cjhopman): dex |
| + |
| + group(target_name) { |
| + deps = [ |
| + ":${target_name}__java_library" |
| + ] |
| + } |
| +} |