Merge "Compile javamicro as a plugin"
diff --git a/Android.bp b/Android.bp
index 1c06b82..e356419 100644
--- a/Android.bp
+++ b/Android.bp
@@ -263,8 +263,10 @@
 
 // Compiler library for the host
 // =======================================================
-cc_library_host_shared {
+cc_library {
     name: "libprotoc",
+    host_supported: true,
+    device_supported: false,
     defaults: ["libprotobuf-cpp-full-defaults"],
 
     srcs: [
@@ -386,15 +388,6 @@
         "src/google/protobuf/compiler/java/java_shared_code_generator.cc",
         "src/google/protobuf/compiler/java/java_string_field.cc",
         "src/google/protobuf/compiler/java/java_string_field_lite.cc",
-        "src/google/protobuf/compiler/javamicro/javamicro_enum.cc",
-        "src/google/protobuf/compiler/javamicro/javamicro_enum_field.cc",
-        "src/google/protobuf/compiler/javamicro/javamicro_field.cc",
-        "src/google/protobuf/compiler/javamicro/javamicro_file.cc",
-        "src/google/protobuf/compiler/javamicro/javamicro_generator.cc",
-        "src/google/protobuf/compiler/javamicro/javamicro_helpers.cc",
-        "src/google/protobuf/compiler/javamicro/javamicro_message.cc",
-        "src/google/protobuf/compiler/javamicro/javamicro_message_field.cc",
-        "src/google/protobuf/compiler/javamicro/javamicro_primitive_field.cc",
         "src/google/protobuf/compiler/javanano/javanano_enum.cc",
         "src/google/protobuf/compiler/javanano/javanano_enum_field.cc",
         "src/google/protobuf/compiler/javanano/javanano_extension.cc",
@@ -762,3 +755,30 @@
         enabled: false,
     },
 }
+
+// Java micro generator plugin
+// =======================================================
+cc_binary_host {
+    name: "protoc-gen-javamicro",
+    defaults: ["protobuf-cflags-defaults"],
+    srcs: [
+        "src/google/protobuf/compiler/javamicro/javamicro_enum.cc",
+        "src/google/protobuf/compiler/javamicro/javamicro_enum_field.cc",
+        "src/google/protobuf/compiler/javamicro/javamicro_field.cc",
+        "src/google/protobuf/compiler/javamicro/javamicro_file.cc",
+        "src/google/protobuf/compiler/javamicro/javamicro_generator.cc",
+        "src/google/protobuf/compiler/javamicro/javamicro_helpers.cc",
+        "src/google/protobuf/compiler/javamicro/javamicro_main.cc",
+        "src/google/protobuf/compiler/javamicro/javamicro_message.cc",
+        "src/google/protobuf/compiler/javamicro/javamicro_message_field.cc",
+        "src/google/protobuf/compiler/javamicro/javamicro_primitive_field.cc",
+    ],
+    local_include_dirs: ["src"],
+    static_libs: [
+        "libprotoc",
+        "libz",
+    ],
+    stl: "libc++_static",
+
+    cflags: IGNORED_WARNINGS,
+}
diff --git a/src/google/protobuf/compiler/javamicro/javamicro_file.cc b/src/google/protobuf/compiler/javamicro/javamicro_file.cc
index 43bf012..3d64e04 100644
--- a/src/google/protobuf/compiler/javamicro/javamicro_file.cc
+++ b/src/google/protobuf/compiler/javamicro/javamicro_file.cc
@@ -118,8 +118,8 @@
   if (!params_.has_java_outer_classname(file_->name())
       && file_->message_type_count() == 1
       && file_->enum_type_count() == 0 && file_->extension_count() == 0) {
-    cout << "INFO: " << file_->name() << ":" << endl;
-    cout << "Javamicro generator has changed to align with java generator. "
+    cerr << "INFO: " << file_->name() << ":" << endl;
+    cerr << "Javamicro generator has changed to align with java generator. "
         "An outer class will be created for this file and the single message "
         "in the file will become a nested class. Use java_multiple_files to "
         "skip generating the outer class, or set an explicit "
diff --git a/src/google/protobuf/compiler/javamicro/javamicro_main.cc b/src/google/protobuf/compiler/javamicro/javamicro_main.cc
new file mode 100644
index 0000000..4a75044
--- /dev/null
+++ b/src/google/protobuf/compiler/javamicro/javamicro_main.cc
@@ -0,0 +1,8 @@
+#include <google/protobuf/compiler/code_generator.h>
+#include <google/protobuf/compiler/javamicro/javamicro_generator.h>
+#include <google/protobuf/compiler/plugin.h>
+
+int main(int argc, char* argv[]) {
+  google::protobuf::compiler::javamicro::JavaMicroGenerator generator;
+  return google::protobuf::compiler::PluginMain(argc, argv, &generator);
+}
diff --git a/src/google/protobuf/compiler/main.cc b/src/google/protobuf/compiler/main.cc
index 400c556..66ad13b 100644
--- a/src/google/protobuf/compiler/main.cc
+++ b/src/google/protobuf/compiler/main.cc
@@ -34,7 +34,6 @@
 #include <google/protobuf/compiler/cpp/cpp_generator.h>
 #include <google/protobuf/compiler/python/python_generator.h>
 #include <google/protobuf/compiler/java/java_generator.h>
-#include <google/protobuf/compiler/javamicro/javamicro_generator.h>
 #include <google/protobuf/compiler/javanano/javanano_generator.h>
 #include <google/protobuf/compiler/ruby/ruby_generator.h>
 #include <google/protobuf/compiler/csharp/csharp_generator.h>
@@ -67,11 +66,6 @@
   cli.RegisterGenerator("--javanano_out", &javanano_generator,
                         "Generate Java Nano source file.");
 
-  // Java Micro
-  google::protobuf::compiler::javamicro::JavaMicroGenerator javamicro_generator;
-  cli.RegisterGenerator("--javamicro_out", &javamicro_generator,
-                        "Generate Java Micro source file.");
-
   // Ruby
   google::protobuf::compiler::ruby::Generator rb_generator;
   cli.RegisterGenerator("--ruby_out", &rb_generator,