Extend hidl-gen to support generate vts file.
b/30762234
TODO: add regression test.
Change-Id: I1c31fd9a85805cd450ea03cc0ccc750a756d1009
diff --git a/main.cpp b/main.cpp
index 9b0bfab..50edcae 100644
--- a/main.cpp
+++ b/main.cpp
@@ -32,8 +32,7 @@
const char *,
Coordinator *coordinator,
const std::string &outputDir,
- bool java = false) {
-
+ const std::string &lang) {
CHECK(fqName.isFullyQualified());
AST *ast = coordinator->parse(fqName);
@@ -46,10 +45,17 @@
return UNKNOWN_ERROR;
}
- status_t err =
- java ? ast->generateJava(outputDir) : ast->generateCpp(outputDir);
-
- return err;
+ if (lang == "c++") {
+ return ast->generateCpp(outputDir);
+ }
+ if (lang == "java") {
+ return ast->generateJava(outputDir);
+ }
+ if (lang == "vts") {
+ return ast->generateVts(outputDir);
+ }
+ // Unknown language.
+ return UNKNOWN_ERROR;
}
static status_t generateSourcesForPackage(
@@ -57,11 +63,10 @@
const char *hidl_gen,
Coordinator *coordinator,
const std::string &outputDir,
- bool java = false) {
-
+ const std::string &lang) {
CHECK(packageFQName.isValid() &&
- !packageFQName.isFullyQualified() &&
- packageFQName.name().empty());
+ !packageFQName.isFullyQualified() &&
+ packageFQName.name().empty());
std::vector<FQName> packageInterfaces;
@@ -75,8 +80,7 @@
for (const auto &fqName : packageInterfaces) {
err = generateSourcesForFile(
- fqName, hidl_gen, coordinator, outputDir, java);
-
+ fqName, hidl_gen, coordinator, outputDir, lang);
if (err != OK) {
return err;
}
@@ -227,7 +231,7 @@
return OutputHandler::PASS_PACKAGE;
}
-OutputHandler::ValRes validateForCppOrJava(const FQName &fqName) {
+OutputHandler::ValRes validateForSource(const FQName &fqName) {
if (fqName.package().empty()) {
fprintf(stderr, "Expecting package name\n");
return OutputHandler::FAILED;
@@ -246,28 +250,27 @@
static std::vector<OutputHandler> formats = {
{"c++",
true /* mNeedsOutputDir */,
- validateForCppOrJava,
+ 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);
- }
- else {
- return generateSourcesForPackage(fqName,
- hidl_gen,
- coordinator,
- outputDir);
+ return generateSourcesForFile(fqName,
+ hidl_gen,
+ coordinator,
+ outputDir, "c++");
+ } else {
+ return generateSourcesForPackage(fqName,
+ hidl_gen,
+ coordinator,
+ outputDir, "c++");
}
}
},
{"java",
true /* mNeedsOutputDir */,
- validateForCppOrJava,
+ validateForSource,
[](const FQName &fqName,
const char *hidl_gen, Coordinator *coordinator,
const std::string &outputDir) -> status_t {
@@ -275,19 +278,38 @@
return generateSourcesForFile(fqName,
hidl_gen,
coordinator,
- outputDir,
- true /* java */);
+ outputDir, "java");
}
else {
return generateSourcesForPackage(fqName,
hidl_gen,
coordinator,
- outputDir,
- true /* java */);
+ outputDir, "java");
}
}
},
+ {"vts",
+ true,
+ 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, "vts");
+ } else {
+ return generateSourcesForPackage(fqName,
+ hidl_gen,
+ coordinator,
+ outputDir, "vts");
+ }
+ }
+ },
+
{"makefile",
false /* mNeedsOutputDir */,
validateForMakefile,