diff --git a/assemble_vintf.cpp b/assemble_vintf.cpp
index d3846a2..cfa9bf6 100644
--- a/assemble_vintf.cpp
+++ b/assemble_vintf.cpp
@@ -49,7 +49,9 @@
         return true;
     }
 
-    static bool assemble(std::basic_istream<char>& inFile, std::basic_ostream<char>& outFile) {
+    static bool assemble(std::basic_istream<char>& inFile,
+                         std::basic_ostream<char>& outFile,
+                         bool isMatrix) {
         std::stringstream ss;
         ss << inFile.rdbuf();
         std::string fileContent = ss.str();
@@ -67,8 +69,25 @@
             }
         }
 
-        std::string outFileContent = gHalManifestConverter(halManifest);
-        outFile << outFileContent;
+        if (isMatrix) {
+            CompatibilityMatrix mat = halManifest.generateCompatibleMatrix();
+            std::string error;
+            if (!halManifest.checkCompatibility(mat, &error)) {
+                std::cerr << "FATAL ERROR: cannot generate a compatible matrix: "
+                          << error << std::endl;
+            }
+            outFile << "<!-- \n"
+                       "    Autogenerated skeleton compatibility matrix. \n"
+                       "    Use with caution. Modify it to suit your needs.\n"
+                       "    All HALs are set to optional.\n"
+                       "    Many entries other than HALs are zero-filled and\n"
+                       "    require human attention. \n"
+                       "-->\n"
+                    << gCompatibilityMatrixConverter(mat);
+        } else {
+            outFile << gHalManifestConverter(halManifest);
+        }
+
         outFile.flush();
 
         return true;
@@ -82,17 +101,20 @@
     std::cerr <<
         "assemble_vintf -h\n"
         "               Display this help text.\n"
-        "assemble_vintf -i <input file> [-o <output file>]\n"
+        "assemble_vintf -i <input file> [-o <output file>] [-m]\n"
         "               Fill in build-time flags into the given manifest.\n"
-        "               If no designated output file, write to stdout.\n";
+        "               If no designated output file, write to stdout.\n"
+        "               If -m is set, a compatible compatibility matrix is\n"
+        "               generated instead.\n";
 }
 
 int main(int argc, char **argv) {
     std::ifstream inFile;
     std::ofstream outFile;
     std::ostream* outFileRef = &std::cout;
+    bool isMatrix = false;
     int res;
-    while((res = getopt(argc, argv, "hi:o:v:")) >= 0) {
+    while((res = getopt(argc, argv, "hi:o:m")) >= 0) {
         switch (res) {
             case 'i': {
                 inFile.open(optarg);
@@ -111,6 +133,10 @@
                 outFileRef = &outFile;
             } break;
 
+            case 'm': {
+                isMatrix = true;
+            } break;
+
             case 'h':
             default: {
                 help();
@@ -125,7 +151,7 @@
         return 1;
     }
 
-    return ::android::vintf::AssembleVintf::assemble(inFile, *outFileRef)
+    return ::android::vintf::AssembleVintf::assemble(inFile, *outFileRef, isMatrix)
             ? 0 : 1;
 }
 
