diff --git a/aidl/IFoo.cpp b/aidl/IFoo.cpp
new file mode 100644
index 0000000..3184f01
--- /dev/null
+++ b/aidl/IFoo.cpp
@@ -0,0 +1,107 @@
+#include <foo/IFoo.h>
+#include <foo/BpFoo.h>
+
+namespace foo {
+
+IMPLEMENT_META_INTERFACE(Foo, "foo.IFoo")
+
+}  // namespace foo
+#include <foo/BpFoo.h>
+#include <binder/Parcel.h>
+
+namespace foo {
+
+BpFoo::BpFoo(const ::android::sp<::android::IBinder>& _aidl_impl)
+    : BpInterface<IFoo>(_aidl_impl){
+}
+
+::android::binder::Status BpFoo::add(int32_t a, int32_t b, int32_t* _aidl_return) {
+::android::Parcel _aidl_data;
+::android::Parcel _aidl_reply;
+::android::status_t _aidl_ret_status = ::android::OK;
+::android::binder::Status _aidl_status;
+_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
+if (((_aidl_ret_status) != (::android::OK))) {
+goto _aidl_error;
+}
+_aidl_ret_status = _aidl_data.writeInt32(a);
+if (((_aidl_ret_status) != (::android::OK))) {
+goto _aidl_error;
+}
+_aidl_ret_status = _aidl_data.writeInt32(b);
+if (((_aidl_ret_status) != (::android::OK))) {
+goto _aidl_error;
+}
+_aidl_ret_status = remote()->transact(IFoo::ADD, _aidl_data, &_aidl_reply);
+if (((_aidl_ret_status) != (::android::OK))) {
+goto _aidl_error;
+}
+_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
+if (((_aidl_ret_status) != (::android::OK))) {
+goto _aidl_error;
+}
+if (!_aidl_status.isOk()) {
+return _aidl_status;
+}
+_aidl_ret_status = _aidl_reply.readInt32(_aidl_return);
+if (((_aidl_ret_status) != (::android::OK))) {
+goto _aidl_error;
+}
+_aidl_error:
+_aidl_status.setFromStatusT(_aidl_ret_status);
+return _aidl_status;
+}
+
+}  // namespace foo
+#include <foo/BnFoo.h>
+#include <binder/Parcel.h>
+
+namespace foo {
+
+::android::status_t BnFoo::onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) {
+::android::status_t _aidl_ret_status = ::android::OK;
+switch (_aidl_code) {
+case Call::ADD:
+{
+int32_t in_a;
+int32_t in_b;
+int32_t _aidl_return;
+if (!(_aidl_data.checkInterface(this))) {
+_aidl_ret_status = ::android::BAD_TYPE;
+break;
+}
+_aidl_ret_status = _aidl_data.readInt32(&in_a);
+if (((_aidl_ret_status) != (::android::OK))) {
+break;
+}
+_aidl_ret_status = _aidl_data.readInt32(&in_b);
+if (((_aidl_ret_status) != (::android::OK))) {
+break;
+}
+::android::binder::Status _aidl_status(add(in_a, in_b, &_aidl_return));
+_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
+if (((_aidl_ret_status) != (::android::OK))) {
+break;
+}
+if (!_aidl_status.isOk()) {
+break;
+}
+_aidl_ret_status = _aidl_reply->writeInt32(_aidl_return);
+if (((_aidl_ret_status) != (::android::OK))) {
+break;
+}
+}
+break;
+default:
+{
+_aidl_ret_status = ::android::BBinder::onTransact(_aidl_code, _aidl_data, _aidl_reply, _aidl_flags);
+}
+break;
+}
+if (_aidl_ret_status == ::android::UNEXPECTED_NULL) {
+_aidl_ret_status = ::android::binder::Status::fromExceptionCode(::android::binder::Status::EX_NULL_POINTER).writeToParcel(_aidl_reply);
+}
+return _aidl_ret_status;
+}
+
+}  // namespace foo
diff --git a/aidl/include/foo/BnFoo.h b/aidl/include/foo/BnFoo.h
new file mode 100644
index 0000000..f4130e4
--- /dev/null
+++ b/aidl/include/foo/BnFoo.h
@@ -0,0 +1,16 @@
+#ifndef AIDL_GENERATED_FOO_BN_FOO_H_
+#define AIDL_GENERATED_FOO_BN_FOO_H_
+
+#include <binder/IInterface.h>
+#include <foo/IFoo.h>
+
+namespace foo {
+
+class BnFoo : public ::android::BnInterface<IFoo> {
+public:
+::android::status_t onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags = 0) override;
+};  // class BnFoo
+
+}  // namespace foo
+
+#endif  // AIDL_GENERATED_FOO_BN_FOO_H_
diff --git a/aidl/include/foo/BpFoo.h b/aidl/include/foo/BpFoo.h
new file mode 100644
index 0000000..d84da8a
--- /dev/null
+++ b/aidl/include/foo/BpFoo.h
@@ -0,0 +1,20 @@
+#ifndef AIDL_GENERATED_FOO_BP_FOO_H_
+#define AIDL_GENERATED_FOO_BP_FOO_H_
+
+#include <binder/IBinder.h>
+#include <binder/IInterface.h>
+#include <utils/Errors.h>
+#include <foo/IFoo.h>
+
+namespace foo {
+
+class BpFoo : public ::android::BpInterface<IFoo> {
+public:
+explicit BpFoo(const ::android::sp<::android::IBinder>& _aidl_impl);
+virtual ~BpFoo() = default;
+::android::binder::Status add(int32_t a, int32_t b, int32_t* _aidl_return) override;
+};  // class BpFoo
+
+}  // namespace foo
+
+#endif  // AIDL_GENERATED_FOO_BP_FOO_H_
diff --git a/aidl/include/foo/IFoo.h b/aidl/include/foo/IFoo.h
new file mode 100644
index 0000000..a25dd28
--- /dev/null
+++ b/aidl/include/foo/IFoo.h
@@ -0,0 +1,23 @@
+#ifndef AIDL_GENERATED_FOO_I_FOO_H_
+#define AIDL_GENERATED_FOO_I_FOO_H_
+
+#include <binder/IBinder.h>
+#include <binder/IInterface.h>
+#include <binder/Status.h>
+#include <cstdint>
+#include <utils/StrongPointer.h>
+
+namespace foo {
+
+class IFoo : public ::android::IInterface {
+public:
+DECLARE_META_INTERFACE(Foo)
+virtual ::android::binder::Status add(int32_t a, int32_t b, int32_t* _aidl_return) = 0;
+enum Call {
+  ADD = ::android::IBinder::FIRST_CALL_TRANSACTION + 0,
+};
+};  // class IFoo
+
+}  // namespace foo
+
+#endif  // AIDL_GENERATED_FOO_I_FOO_H_
