hidl-gen: allow specifying root
Also, default root to $ANDROID_BUILD_TOP or pwd if that isn't defined.
Now hidl-gen can be run from anywhere, not just croot.
Test: manual
Change-Id: I8a8ef57612ff4235772fb0a24e543ffd8c7a78c1
Bugs: me
diff --git a/main.cpp b/main.cpp
index 03ae26e..cbd0708 100644
--- a/main.cpp
+++ b/main.cpp
@@ -515,9 +515,8 @@
return OK;
}
- std::string path =
- coordinator->getPackagePath(packageFQName, false /* relative */);
-
+ std::string path = coordinator->getRootPath();
+ path.append(coordinator->getPackagePath(packageFQName, false /* relative */));
path.append("Android.mk");
CHECK(Coordinator::MakeParentHierarchy(path));
@@ -734,9 +733,8 @@
ast->getImportedPackagesHierarchy(&importedPackagesHierarchy);
}
- std::string path =
- coordinator->getPackagePath(packageFQName, false /* relative */);
-
+ std::string path = coordinator->getRootPath();
+ path.append(coordinator->getPackagePath(packageFQName, false /* relative */));
path.append("Android.bp");
CHECK(Coordinator::MakeParentHierarchy(path));
@@ -1257,9 +1255,10 @@
static void usage(const char *me) {
fprintf(stderr,
- "usage: %s -o output-path -L <language> (-r interface-root)+ fqname+\n",
+ "usage: %s [-p root-path] -o output-path -L <language> (-r interface-root)+ fqname+\n",
me);
+ fprintf(stderr, " -p root path to android build system (defaults to $ANDROID_BUILD_TOP or pwd)\n");
fprintf(stderr, " -o output path\n");
fprintf(stderr, " -L <language> (one of");
@@ -1280,6 +1279,7 @@
int main(int argc, char **argv) {
std::string outputPath;
+ std::string rootPath;
std::vector<std::string> packageRootPaths;
std::vector<std::string> packageRoots;
@@ -1287,8 +1287,14 @@
OutputHandler *outputFormat = nullptr;
int res;
- while ((res = getopt(argc, argv, "ho:r:L:")) >= 0) {
+ while ((res = getopt(argc, argv, "hp:o:r:L:")) >= 0) {
switch (res) {
+ case 'p':
+ {
+ rootPath = optarg;
+ break;
+ }
+
case 'o':
{
outputPath = optarg;
@@ -1354,6 +1360,20 @@
argc -= optind;
argv += optind;
+ if (rootPath.empty()) {
+ const char *ANDROID_BUILD_TOP = getenv("ANDROID_BUILD_TOP");
+
+ if (ANDROID_BUILD_TOP != nullptr) {
+ rootPath = ANDROID_BUILD_TOP;
+ }
+
+ // else default to pwd
+ }
+
+ if (!rootPath.empty() && !StringHelper::EndsWith(rootPath, "/")) {
+ rootPath += "/";
+ }
+
if (packageRootPaths.empty()) {
// Pick reasonable defaults.
@@ -1398,7 +1418,7 @@
break;
}
- Coordinator coordinator(packageRootPaths, packageRoots);
+ Coordinator coordinator(packageRootPaths, packageRoots, rootPath);
for (int i = 0; i < argc; ++i) {
FQName fqName(argv[i]);