Explicitly generate _vendor library.
Explicitly create '_vendor' copies of libraries so that
vendor code can link against the extensions. When this is
used, framework code should link against vendor.awesome.foo@1.0
and code on the vendor image should link against
vendor.awesome.foo@1.0_vendor. For libraries with the below extensions,
they will be available even on the generic system image.
Because of this, they should always be referenced without the
'_vendor' name suffix.
Note: vendor_available is still outputted even though
it is for the time being a no-op
Bug: 35813011
Bug: 62616897
Test: system hidl lib definitions are unchanged
Test: vendor hidl lib definitions include vendor definition
Change-Id: I9fcc4b4b6f2093fadec7a832413ae168d1ebcfb9
diff --git a/main.cpp b/main.cpp
index 69da62d..7c529a9 100644
--- a/main.cpp
+++ b/main.cpp
@@ -643,6 +643,11 @@
return true;
}
+bool isHidlTransportPackage(const FQName &package) {
+ return package == gIBasePackageFqName ||
+ package == gIManagerPackageFqName;
+}
+
static void generateAndroidBpGenSection(
Formatter &out,
const FQName &packageFQName,
@@ -685,9 +690,66 @@
out << "}\n\n";
}
-bool isHidlTransportPackage(const FQName &package) {
- return package == gIBasePackageFqName ||
- package == gIManagerPackageFqName;
+static void generateAndroidBpLibSection(
+ Formatter &out,
+ bool generateVendor,
+ const std::string &libraryName,
+ const std::string &genSourceName,
+ const std::string &genHeaderName,
+ const std::set<FQName> &importedPackagesHierarchy) {
+
+ // C++ library definition
+ out << "cc_library_shared {\n";
+ out.indent();
+ out << "name: \"" << libraryName << (generateVendor ? "_vendor" : "") << "\",\n"
+ << "defaults: [\"hidl-module-defaults\"],\n"
+ << "generated_sources: [\"" << genSourceName << "\"],\n"
+ << "generated_headers: [\"" << genHeaderName << "\"],\n"
+ << "export_generated_headers: [\"" << genHeaderName << "\"],\n";
+
+ if (generateVendor) {
+ out << "vendor: true,\n";
+ } else {
+ out << "vendor_available: true,\n";
+ }
+ out << "shared_libs: [\n";
+
+ out.indent();
+ out << "\"libhidlbase\",\n"
+ << "\"libhidltransport\",\n"
+ << "\"libhwbinder\",\n"
+ << "\"liblog\",\n"
+ << "\"libutils\",\n"
+ << "\"libcutils\",\n";
+ for (const auto &importedPackage : importedPackagesHierarchy) {
+ if (isHidlTransportPackage(importedPackage)) {
+ continue;
+ }
+
+ out << "\"" << makeLibraryName(importedPackage) << "\",\n";
+ }
+ out.unindent();
+
+ out << "],\n";
+
+ out << "export_shared_lib_headers: [\n";
+ out.indent();
+ out << "\"libhidlbase\",\n"
+ << "\"libhidltransport\",\n"
+ << "\"libhwbinder\",\n"
+ << "\"libutils\",\n";
+ for (const auto &importedPackage : importedPackagesHierarchy) {
+ if (isHidlTransportPackage(importedPackage)) {
+ continue;
+ }
+
+ out << "\"" << makeLibraryName(importedPackage) << "\",\n";
+ }
+ out.unindent();
+ out << "],\n";
+ out.unindent();
+
+ out << "}\n";
}
static status_t generateAndroidBpForPackage(
@@ -813,64 +875,40 @@
if (isHidlTransportPackage(packageFQName)) {
out << "// " << packageFQName.string() << " is exported from libhidltransport\n";
} else {
- // C++ library definition
- out << "cc_library_shared {\n";
- out.indent();
- out << "name: \"" << libraryName << "\",\n"
- << "defaults: [\"hidl-module-defaults\"],\n"
- << "generated_sources: [\"" << genSourceName << "\"],\n"
- << "generated_headers: [\"" << genHeaderName << "\"],\n"
- << "export_generated_headers: [\"" << genHeaderName << "\"],\n";
+ generateAndroidBpLibSection(
+ out,
+ false /* generateVendor */,
+ libraryName,
+ genSourceName,
+ genHeaderName,
+ importedPackagesHierarchy);
- // TODO(b/35813011): make always vendor_available
- // Explicitly mark libraries vendor until BOARD_VNDK_VERSION can
- // be enabled.
- if (packageFQName.inPackage("android.hidl") ||
+ // TODO(b/35813011): make all libraries vendor_available
+ // Explicitly create '_vendor' copies of libraries so that
+ // vendor code can link against the extensions. When this is
+ // used, framework code should link against vendor.awesome.foo@1.0
+ // and code on the vendor image should link against
+ // vendor.awesome.foo@1.0_vendor. For libraries with the below extensions,
+ // they will be available even on the generic system image.
+ // Because of this, they should always be referenced without the
+ // '_vendor' name suffix.
+ if (!(packageFQName.inPackage("android.hidl") ||
packageFQName.inPackage("android.system") ||
packageFQName.inPackage("android.frameworks") ||
- packageFQName.inPackage("android.hardware")) {
- out << "vendor_available: true,\n";
- } else {
- out << "vendor: true,\n";
+ packageFQName.inPackage("android.hardware"))) {
+
+ // Note, not using cc_defaults here since it's already not used and
+ // because generating this libraries will be removed when the VNDK
+ // is enabled (done by the build system itself).
+ out.endl();
+ generateAndroidBpLibSection(
+ out,
+ true /* generateVendor */,
+ libraryName,
+ genSourceName,
+ genHeaderName,
+ importedPackagesHierarchy);
}
- out << "shared_libs: [\n";
-
- out.indent();
- out << "\"libhidlbase\",\n"
- << "\"libhidltransport\",\n"
- << "\"libhwbinder\",\n"
- << "\"liblog\",\n"
- << "\"libutils\",\n"
- << "\"libcutils\",\n";
- for (const auto &importedPackage : importedPackagesHierarchy) {
- if (isHidlTransportPackage(importedPackage)) {
- continue;
- }
-
- out << "\"" << makeLibraryName(importedPackage) << "\",\n";
- }
- out.unindent();
-
- out << "],\n";
-
- out << "export_shared_lib_headers: [\n";
- out.indent();
- out << "\"libhidlbase\",\n"
- << "\"libhidltransport\",\n"
- << "\"libhwbinder\",\n"
- << "\"libutils\",\n";
- for (const auto &importedPackage : importedPackagesHierarchy) {
- if (isHidlTransportPackage(importedPackage)) {
- continue;
- }
-
- out << "\"" << makeLibraryName(importedPackage) << "\",\n";
- }
- out.unindent();
- out << "],\n";
- out.unindent();
-
- out << "}\n";
}
return OK;