Compile 'minijail0' on Brillo/Android.

We're not currently using the 'minijail0' executable on Brillo or
Android, but given that upstream Minijail is in AOSP, it's useful to
be able to build all Minijail targets in a Brillo or Android checkout.
Make it an "optional" target so that it doesn't get included on regular
builds.

This requires fixing one case of assigning 'const char*' to 'char*',
setting an invalid PRELOADPATH variable, and disabling
'missing-field-initializers' warnings.

Bug: 26798535
Change-Id: I1fe61f5ac2687d3a185d971a699fa4237a4b6a10
diff --git a/Android.mk b/Android.mk
index 021fef0..186e569 100644
--- a/Android.mk
+++ b/Android.mk
@@ -16,7 +16,7 @@
 
 
 # Common variables.
-# ========================================================
+# =========================================================
 libminijailSrcFiles := \
 	bpf.c \
 	libminijail.c \
@@ -35,8 +35,9 @@
 minijailCommonCFlags += -DUSE_SECCOMP_SOFTFAIL
 endif
 
+
 # Static library for generated code.
-# ========================================================
+# =========================================================
 include $(CLEAR_VARS)
 LOCAL_MODULE := libminijail_generated
 
@@ -87,7 +88,7 @@
 
 
 # libminijail shared library for target.
-# ========================================================
+# =========================================================
 include $(CLEAR_VARS)
 LOCAL_MODULE := libminijail
 
@@ -102,7 +103,7 @@
 
 
 # libminijail static library for target.
-# ========================================================
+# =========================================================
 include $(CLEAR_VARS)
 LOCAL_MODULE := libminijail
 
@@ -117,7 +118,7 @@
 
 # libminijail native unit tests. Run with:
 # adb shell /data/nativetest/libminijail_unittest/libminijail_unittest
-# ========================================================
+# =========================================================
 include $(CLEAR_VARS)
 LOCAL_MODULE := libminijail_unittest
 ifdef BRILLO
@@ -141,7 +142,7 @@
 
 # Syscall filtering native unit tests. Run with:
 # adb shell /data/nativetest/syscall_filter_unittest/syscall_filter_unittest
-# ========================================================
+# =========================================================
 include $(CLEAR_VARS)
 LOCAL_MODULE := syscall_filter_unittest
 ifdef BRILLO
@@ -162,7 +163,7 @@
 
 
 # libminijail usage example.
-# ========================================================
+# =========================================================
 include $(CLEAR_VARS)
 LOCAL_MODULE := drop_privs
 LOCAL_MODULE_TAGS := optional
@@ -173,3 +174,23 @@
 
 LOCAL_SHARED_LIBRARIES := libbase libminijail
 include $(BUILD_EXECUTABLE)
+
+
+# minijail0 executable.
+# This is not currently used on Brillo/Android,
+# but it's convenient to be able to build it.
+# =========================================================
+include $(CLEAR_VARS)
+LOCAL_MODULE := minijail0
+LOCAL_MODULE_TAGS := optional
+LOCAL_CFLAGS := \
+	$(minijailCommonCFlags) -Wno-missing-field-initializers \
+	-DPRELOADPATH=\"/invalidminijailpreload.so\"
+LOCAL_CLANG := true
+LOCAL_SRC_FILES := \
+	elfparse.c \
+	minijail0.c \
+
+LOCAL_STATIC_LIBRARIES := libminijail_generated
+LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries) libminijail
+include $(BUILD_EXECUTABLE)
diff --git a/elfparse.h b/elfparse.h
index 6b65eae..599eb11 100644
--- a/elfparse.h
+++ b/elfparse.h
@@ -24,7 +24,9 @@
  * The compiler could mess with aligmment depending on arch
  * so I'm redefining them here and packing them to 1-byte alignment.
  */
+#if !defined(EI_NIDENT)
 #define EI_NIDENT (16)
+#endif
 #pragma pack(push)
 #pragma pack(1)
 typedef struct
diff --git a/minijail0.c b/minijail0.c
index fb0b3b3..442934c 100644
--- a/minijail0.c
+++ b/minijail0.c
@@ -331,7 +331,7 @@
 int main(int argc, char *argv[])
 {
 	struct minijail *j = minijail_new();
-	char *dl_mesg = NULL;
+	const char *dl_mesg = NULL;
 	int exit_immediately = 0;
 	char *program_path;
 	int consumed = parse_args(j, argc, argv, &exit_immediately);