Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2617)

Unified Diff: build/config/android/internal_rules.gni

Issue 269943005: Add android_library template (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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"
+ ]
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698