Consolidate the vendor space misc usage for Pixels

The layout of the vendor space /misc partition was pretty confusing and
lead to some usage conflicts. To formalize the layout, we create a pixel
specific library with the definition & offset of various flags. The new
library also handles the R/W. As a result, we will leave system domain
/misc definitions in the libbootloader_message.

We also switch the misc_writer binary to use more specific options
instead of writing an arbitrary hex string. So we can avoid redefining
the string & offset in both init script and recovery ui.

Bug: 131775112
Test: unit tests pass, run misc_writer and check contents of /misc
Change-Id: I00f8842a81d1929e31a1de4d5eb09575ffad47c0
diff --git a/misc_writer/Android.bp b/misc_writer/Android.bp
index 567143c..73c44d2 100644
--- a/misc_writer/Android.bp
+++ b/misc_writer/Android.bp
@@ -14,14 +14,9 @@
 // limitations under the License.
 //
 
-cc_binary {
-    name: "misc_writer",
+cc_defaults {
+    name: "misc_writer_defaults",
     vendor: true,
-
-    srcs: [
-        "misc_writer.cpp",
-    ],
-
     cpp_std: "experimental",
 
     cflags: [
@@ -38,3 +33,78 @@
         "libfstab",
     ],
 }
+
+// TODO(xunchang) Remove duplicates after we convert the device specific librecovery_ui to recovery
+// module. Then libmisc_writer can build as a vendor module available in recovery.
+cc_library_static {
+    name: "libmisc_writer",
+    cpp_std: "experimental",
+
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+
+    shared_libs: [
+        "libbase",
+    ],
+
+    static_libs: [
+        "libbootloader_message",
+        "libfstab",
+    ],
+
+    srcs: [
+        "misc_writer.cpp",
+    ],
+
+    export_include_dirs: [
+        "include",
+    ],
+}
+
+cc_library_static {
+    name: "libmisc_writer_vendor",
+    defaults: [
+        "misc_writer_defaults",
+    ],
+
+    srcs: [
+        "misc_writer.cpp",
+    ],
+
+    export_include_dirs: [
+        "include",
+    ],
+}
+
+cc_binary {
+    name: "misc_writer",
+    defaults: [
+        "misc_writer_defaults",
+    ],
+
+    srcs: [
+        "misc_writer_main.cpp",
+    ],
+
+    static_libs: [
+        "libmisc_writer_vendor",
+    ]
+}
+
+cc_test {
+    name: "misc_writer_test",
+    defaults: [
+        "misc_writer_defaults",
+    ],
+
+    srcs: [
+        "misc_writer_test.cpp",
+    ],
+    test_suites: ["device-tests"],
+
+    static_libs: [
+        "libmisc_writer_vendor",
+    ]
+}