Support multiple fbs files & no root types in static flatbuffers

In order to improve parity with the existing flatbuffer bazel rules, add
support for:
* Multiple srcs files.
* Generating code for files where no root_type has been specified.

Change-Id: I77d909978fd0bf5125b9e789162c7b629d0fe00d
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/flatbuffers/static_flatbuffers.cc b/aos/flatbuffers/static_flatbuffers.cc
index 7b42ef6..019afda 100644
--- a/aos/flatbuffers/static_flatbuffers.cc
+++ b/aos/flatbuffers/static_flatbuffers.cc
@@ -807,12 +807,16 @@
 }
 }  // namespace
 
-std::string GenerateCodeForRootTableFile(const reflection::Schema *schema) {
-  const reflection::Object *root_object = CHECK_NOTNULL(GetObject(schema, -1));
+std::string GenerateCodeForRootTableFile(const reflection::Schema *schema,
+                                         std::string_view file_hint) {
+  const reflection::Object *root_object = GetObject(schema, -1);
   const std::string_view root_file =
-      root_object->declaration_file()->string_view();
-  std::vector<GeneratedObject> objects = {
-      GenerateCodeForObject(schema, root_object)};
+      (root_object == nullptr) ? file_hint
+                               : root_object->declaration_file()->string_view();
+  std::vector<GeneratedObject> objects;
+  if (root_object != nullptr) {
+    objects.push_back(GenerateCodeForObject(schema, root_object));
+  }
   for (const reflection::Object *object : *schema->objects()) {
     if (object->is_struct()) {
       continue;