aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <gardener@tensorflow.org>2018-01-16 10:03:00 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-01-16 10:07:08 -0800
commiteee4473a676886c3193960cba0966fc078974c33 (patch)
tree32fd74fef28fda422b2c1cefe414a45f15c21719
parent90d4f16040a062d85c6f7c1f08e6ef22b0c00bc9 (diff)
Add one single target to bundle jar & so for TensorFlow Lite
PiperOrigin-RevId: 182071549
-rw-r--r--tensorflow/contrib/lite/java/BUILD10
-rw-r--r--tensorflow/contrib/lite/java/aar_with_jni.bzl47
2 files changed, 57 insertions, 0 deletions
diff --git a/tensorflow/contrib/lite/java/BUILD b/tensorflow/contrib/lite/java/BUILD
index c949c1efb5..9a1a888b93 100644
--- a/tensorflow/contrib/lite/java/BUILD
+++ b/tensorflow/contrib/lite/java/BUILD
@@ -7,6 +7,16 @@ licenses(["notice"]) # Apache 2.0
load("//tensorflow/java:build_defs.bzl", "JAVACOPTS")
load("//tensorflow/contrib/lite:build_def.bzl", "tflite_jni_binary")
+load("//tensorflow/contrib/lite/java:aar_with_jni.bzl", "aar_with_jni")
+
+# Building tensorflow-lite.aar including 4 variants of .so
+# To build an aar for release, run below command:
+# bazel build --cxxopt='--std=c++11' -c opt --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
+# tensorflow/contrib/lite/java:tensorflow-lite
+aar_with_jni(
+ name = "tensorflow-lite",
+ android_library = ":tensorflowlite",
+)
android_library(
name = "tensorflowlite",
diff --git a/tensorflow/contrib/lite/java/aar_with_jni.bzl b/tensorflow/contrib/lite/java/aar_with_jni.bzl
new file mode 100644
index 0000000000..4450bc9085
--- /dev/null
+++ b/tensorflow/contrib/lite/java/aar_with_jni.bzl
@@ -0,0 +1,47 @@
+"""Generate zipped aar file including different variants of .so in jni folder."""
+
+def aar_with_jni(name, android_library):
+ # Generate dummy AndroidManifest.xml for dummy apk usage
+ # (dummy apk is generated by <name>_dummy_app_for_so target below)
+ native.genrule(
+ name = name + "_binary_manifest_generator",
+ outs = [name + "_generated_AndroidManifest.xml"],
+ cmd = """
+cat > $(OUTS) <<EOF
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ package="dummy.package.for.so">
+ <uses-sdk android:minSdkVersion="999"/>
+</manifest>
+EOF
+""",
+ )
+
+ # Generate dummy apk including .so files and later we extract out
+ # .so files and throw away the apk.
+ native.android_binary(
+ name = name + "_dummy_app_for_so",
+ manifest = name + "_generated_AndroidManifest.xml",
+ custom_package = "dummy.package.for.so",
+ deps = [android_library],
+ # In some platforms we don't have an Android SDK/NDK and this target
+ # can't be built. We need to prevent the build system from trying to
+ # use the target in that case.
+ tags = ["manual"],
+ )
+
+ native.genrule(
+ name = name,
+ srcs = [android_library + ".aar", name + "_dummy_app_for_so_unsigned.apk"],
+ outs = [name + ".aar"],
+ tags = ["manual"],
+ cmd = """
+cp $(location {}.aar) $(location :{}.aar)
+chmod +w $(location :{}.aar)
+origdir=$$PWD
+cd $$(mktemp -d)
+unzip $$origdir/$(location :{}_dummy_app_for_so_unsigned.apk) "lib/*"
+cp -r lib jni
+zip -r $$origdir/$(location :{}.aar) jni/*/*.so
+""".format(android_library, name, name, name, name),
+ )