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" |
+ ] |
+ } |
+} |