c++-impl: gen server stub boilerplate
-Lc++-impl now generates a default implementation for all
the interfaces in the specified package. The method
implementations are all left empty.
The default implementation also contains a special function,
HIDL_FETCH_IFOO(), which is used to retrieve an instance of
a particular interface in pass-through mode. For that to work,
the default implementation must live in a shared-library with
a well-known name, eg android.hardware.tests.foo@1.0.impl.so.
Sample invocation:
hidl-gen -o tmp/impl/ -Lc++-impl -randroid.hardware:hardware/interfaces
android.hardware.tests.foo@1.0
Bug: 31228745
Change-Id: I747aa47cb76931eed85179b8131d2efd3f887471
diff --git a/AST.h b/AST.h
index f62425a..3040c22 100644
--- a/AST.h
+++ b/AST.h
@@ -72,6 +72,7 @@
void addImportedAST(AST *ast);
status_t generateCpp(const std::string &outputPath) const;
+ status_t generateCppImpl(const std::string &outputPath) const;
status_t generateJava(
const std::string &outputPath, const char *limitToType) const;
@@ -146,9 +147,14 @@
enum MethodLocation {
PROXY_HEADER,
- STUB_HEADER
+ STUB_HEADER,
+ IMPL_HEADER,
+ IMPL_SOURCE
};
+ status_t generateStubImplHeader(const std::string &outputPath) const;
+ status_t generateStubImplSource(const std::string &outputPath) const;
+
status_t generateMethods(Formatter &out,
const std::string &className,
MethodLocation type,
@@ -157,10 +163,20 @@
const std::string &className,
const Method *method,
bool specifyNamespaces) const;
- status_t generateProxyMethod(Formatter &out,
- const std::string &className,
- const Method *method,
- bool specifyNamespaces) const;
+ status_t generateProxyDeclaration(Formatter &out,
+ const std::string &className,
+ const Method *method,
+ bool specifyNamespaces) const;
+ status_t generateStubImplDeclaration(Formatter &out,
+ const std::string &className,
+ const Method *method,
+ bool specifyNamespaces) const;
+ status_t generateStubImplMethod(Formatter &out,
+ const std::string &className,
+ const Method *method,
+ bool specifyNamespaces) const;
+
+ void generateFetchSymbol(Formatter &out, const std::string &ifaceName) const;
status_t generateProxySource(
Formatter &out, const std::string &baseName) const;