hidl-gen: Add -Lcheck.

This allows interfaces to be quickly checked that they can be
parsed and pass interface requirements (such as those placed
on versioning and also hashing) without having to compile
the entire module.

Test: hidl-gen  -L check -r android.hidl:system/libhidl/transport \
  -r android.hardware:hardware/interfaces android.hardware.nfc@1.0

Change-Id: I4b708f546bc8ce9cea2eb3f259bb4b6efc94c0a8
diff --git a/main.cpp b/main.cpp
index 545d26a..7e4a81b 100644
--- a/main.cpp
+++ b/main.cpp
@@ -82,6 +82,9 @@
         return UNKNOWN_ERROR;
     }
 
+    if (lang == "check") {
+        return OK; // only parsing, not generating
+    }
     if (lang == "c++") {
         return ast->generateCpp(outputDir);
     }
@@ -1088,6 +1091,28 @@
 }
 
 static std::vector<OutputHandler> formats = {
+    {"check",
+     OutputHandler::NOT_NEEDED /* mOutputMode */,
+     validateForSource,
+     [](const FQName &fqName,
+        const char *hidl_gen, Coordinator *coordinator,
+        const std::string &outputDir) -> status_t {
+            if (fqName.isFullyQualified()) {
+                        return generateSourcesForFile(fqName,
+                                                      hidl_gen,
+                                                      coordinator,
+                                                      outputDir,
+                                                      "check");
+            } else {
+                        return generateSourcesForPackage(fqName,
+                                                         hidl_gen,
+                                                         coordinator,
+                                                         outputDir,
+                                                         "check");
+            }
+        }
+    },
+
     {"c++",
      OutputHandler::NEEDS_DIR /* mOutputMode */,
      validateForSource,