blob: 919028bea574b763d3a6f5855b9a65be1f1bae6a [file] [log] [blame]
Alex Perrycb7da4b2019-08-28 19:35:56 -07001#include <string>
2#include <vector>
3
4#include "aos/configuration.h"
5#include "aos/init.h"
6#include "aos/json_to_flatbuffer.h"
7#include "aos/util/file.h"
8#include "gflags/gflags.h"
9#include "glog/logging.h"
10
11namespace aos {
12
13int Main(int argc, char **argv) {
Austin Schuh83544222020-04-20 16:16:29 -070014 CHECK_GE(argc, 4) << ": Too few arguments";
Alex Perrycb7da4b2019-08-28 19:35:56 -070015
Austin Schuh83544222020-04-20 16:16:29 -070016 const char *full_output = argv[1];
17 const char *stripped_output = argv[2];
18 const char *config_path = argv[3];
19
20 VLOG(1) << "Reading " << config_path;
Alex Perrycb7da4b2019-08-28 19:35:56 -070021 FlatbufferDetachedBuffer<Configuration> config =
Austin Schuh83544222020-04-20 16:16:29 -070022 configuration::ReadConfig(config_path);
Alex Perrycb7da4b2019-08-28 19:35:56 -070023
24 std::vector<aos::FlatbufferString<reflection::Schema>> schemas;
25
Austin Schuh83544222020-04-20 16:16:29 -070026 for (int i = 4; i < argc; ++i) {
Alex Perrycb7da4b2019-08-28 19:35:56 -070027 schemas.emplace_back(util::ReadFileToStringOrDie(argv[i]));
28 }
29
30 const std::string merged_config = FlatbufferToJson(
31 &configuration::MergeConfiguration(config, schemas).message(), true);
32
33 // TODO(austin): Figure out how to squash the schemas onto 1 line so it is
Brian Silverman8533bac2020-01-31 17:44:27 -080034 // easier to read?
Alex Perrycb7da4b2019-08-28 19:35:56 -070035 VLOG(1) << "Flattened config is " << merged_config;
Austin Schuh83544222020-04-20 16:16:29 -070036 util::WriteStringToFileOrDie(full_output, merged_config);
37 util::WriteStringToFileOrDie(stripped_output,
38 FlatbufferToJson(&config.message(), true));
Alex Perrycb7da4b2019-08-28 19:35:56 -070039 return 0;
40}
41
42} // namespace aos
43
44int main(int argc, char **argv) {
45 aos::InitGoogle(&argc, &argv);
46 return aos::Main(argc, argv);
47}