Add -L hash
Test: with -Lhash:
hidl-gen -L hash -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport android.hardware.nfc@1.0::types
hidl-gen -L hash -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport android.hardware.nfc@1.0::INfc
hidl-gen -L hash -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport android.hardware.nfc@1.0::INfcClientCallback
hidl-gen -L hash -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport android.hardware.nfc@1.0
Bug: 34178341
Merged-In: Ibe3707e40c501bec307204b603ba5b596b9fc049
Change-Id: Ibe3707e40c501bec307204b603ba5b596b9fc049
diff --git a/main.cpp b/main.cpp
index 68e033c..30ad85f 100644
--- a/main.cpp
+++ b/main.cpp
@@ -16,6 +16,7 @@
#include "AST.h"
#include "Coordinator.h"
+#include "Hash.h"
#include "Scope.h"
#include <hidl-util/Formatter.h>
@@ -1048,6 +1049,43 @@
return OK;
}
+static status_t generateHashOutput(const FQName &fqName,
+ const char* /*hidl_gen*/,
+ Coordinator *coordinator,
+ const std::string & /*outputDir*/) {
+
+ status_t err;
+ std::vector<FQName> packageInterfaces;
+
+ if (fqName.isFullyQualified()) {
+ packageInterfaces = {fqName};
+ } else {
+ err = coordinator->appendPackageInterfacesToVector(
+ fqName, &packageInterfaces);
+ if (err != OK) {
+ return err;
+ }
+ }
+
+ for (const auto ¤tFqName : packageInterfaces) {
+ AST *ast = coordinator->parse(currentFqName);
+
+ if (ast == NULL) {
+ fprintf(stderr,
+ "ERROR: Could not parse %s. Aborting.\n",
+ currentFqName.string().c_str());
+
+ return UNKNOWN_ERROR;
+ }
+
+ printf("%s %s\n",
+ Hash::getHash(ast->getFilename()).hexString().c_str(),
+ currentFqName.string().c_str());
+ }
+
+ return OK;
+}
+
static std::vector<OutputHandler> formats = {
{"c++",
OutputHandler::NEEDS_DIR /* mOutputMode */,
@@ -1186,7 +1224,13 @@
OutputHandler::NEEDS_DIR /* mOutputMode */,
validateForMakefile,
generateAndroidBpImplForPackage,
- }
+ },
+
+ {"hash",
+ OutputHandler::NOT_NEEDED /* mOutputMode */,
+ validateForSource,
+ generateHashOutput,
+ },
};
static void usage(const char *me) {
@@ -1328,6 +1372,8 @@
outputFormat->validate(fqName, outputFormat->mKey);
if (valid == OutputHandler::FAILED) {
+ fprintf(stderr,
+ "ERROR: output handler failed.\n");
exit(1);
}