From 398ba750a47377b9216e02ccb6473c1952ea6f65 Mon Sep 17 00:00:00 2001 From: gasoonjia Date: Wed, 11 Jun 2025 15:49:50 -0700 Subject: [PATCH] hacky solution to solve D73564127's duplicate dependency issues to unblock pybinding backend migration Pull Request resolved: https://github.com/pytorch/executorch/pull/11566 This diff creates different namespace for Module and BundledModule under different mode (aten or portable) to hacky solve the duplicated symbol issues in D73564127 since the their are too many complex dependency issues to solve, and lots of users are asking for pybinding backend migration. In the future this impl should be replaced by shim-like layers. ghstack-source-id: 289817083 Differential Revision: [D76405701](https://our.internmc.facebook.com/intern/diff/D76405701/) --- extension/module/bundled_module.cpp | 4 +++- extension/module/bundled_module.h | 11 ++++++++++ extension/module/module.cpp | 2 ++ extension/module/module.h | 21 +++++++++++++++++-- extension/module/test/bundled_module_test.cpp | 2 +- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/extension/module/bundled_module.cpp b/extension/module/bundled_module.cpp index 083aef141a0..50dbfe69237 100644 --- a/extension/module/bundled_module.cpp +++ b/extension/module/bundled_module.cpp @@ -27,6 +27,8 @@ std::unique_ptr program_data_loader( } } // namespace +namespace ET_BUNDLED_MODULE_NAMESPACE { + BundledModule::BundledModule( const void* bundled_program_ptr, std::unique_ptr memory_allocator, @@ -107,6 +109,6 @@ runtime::Error BundledModule::verify_method_outputs( return executorch::BUNDLED_PROGRAM_NAMESPACE::verify_method_outputs( *method, bundled_program_ptr_, testset_idx, rtol, atol); } - +} // namespace ET_BUNDLED_MODULE_NAMESPACE } // namespace extension } // namespace executorch diff --git a/extension/module/bundled_module.h b/extension/module/bundled_module.h index d254a2cdcb5..c75d83bcbad 100644 --- a/extension/module/bundled_module.h +++ b/extension/module/bundled_module.h @@ -10,9 +10,19 @@ #include +#ifdef USE_ATEN_LIB +#define ET_BUNDLED_MODULE_NAMESPACE bundled_module::aten +#else // !USE_ATEN_LIB +#define ET_BUNDLED_MODULE_NAMESPACE bundled_module +#endif // USE_ATEN_LIB + namespace executorch { namespace extension { +using ET_MODULE_NAMESPACE::Module; + +namespace ET_BUNDLED_MODULE_NAMESPACE { + /** * A facade class for loading bundled programs and executing methods within * them. @@ -119,5 +129,6 @@ class BundledModule : public Module { bool is_loaded_from_file_ = false; }; +} // namespace ET_BUNDLED_MODULE_NAMESPACE } // namespace extension } // namespace executorch diff --git a/extension/module/module.cpp b/extension/module/module.cpp index 721e9e5b89e..3212077d2ee 100644 --- a/extension/module/module.cpp +++ b/extension/module/module.cpp @@ -36,6 +36,7 @@ namespace executorch { namespace extension { +namespace ET_MODULE_NAMESPACE { using ET_RUNTIME_NAMESPACE::MethodMeta; using ET_RUNTIME_NAMESPACE::Program; @@ -308,5 +309,6 @@ runtime::Error Module::set_output( output_tensor.mutable_data_ptr(), output_tensor.nbytes(), output_index); } +} // namespace ET_MODULE_NAMESPACE } // namespace extension } // namespace executorch diff --git a/extension/module/module.h b/extension/module/module.h index e75d8383115..080ae53f43a 100644 --- a/extension/module/module.h +++ b/extension/module/module.h @@ -16,6 +16,12 @@ #include +#ifdef USE_ATEN_LIB +#define ET_MODULE_NAMESPACE module::aten +#else // !USE_ATEN_LIB +#define ET_MODULE_NAMESPACE module +#endif // USE_ATEN_LIB + namespace executorch { namespace extension { @@ -24,6 +30,9 @@ using ET_RUNTIME_NAMESPACE::MethodMeta; using ET_RUNTIME_NAMESPACE::NamedDataMap; using ET_RUNTIME_NAMESPACE::Program; +class ExecuTorchJni; + +namespace ET_MODULE_NAMESPACE { /** * A facade class for loading programs and executing methods within them. */ @@ -493,9 +502,10 @@ class Module { protected: std::unordered_map methods_; - friend class ExecuTorchJni; + friend class executorch::extension::ExecuTorchJni; }; +} // namespace ET_MODULE_NAMESPACE } // namespace extension } // namespace executorch @@ -503,6 +513,13 @@ namespace torch { namespace executor { // TODO(T197294990): Remove these deprecated aliases once all users have moved // to the new `::executorch` namespaces. -using ::executorch::extension::Module; +using ::executorch::extension::ET_MODULE_NAMESPACE::Module; } // namespace executor } // namespace torch + +namespace executorch { +namespace extension { +// backward compatible namespace alias +using ::executorch::extension::ET_MODULE_NAMESPACE::Module; +} // namespace extension +} // namespace executorch diff --git a/extension/module/test/bundled_module_test.cpp b/extension/module/test/bundled_module_test.cpp index a07c5dd5486..0009c15d69e 100644 --- a/extension/module/test/bundled_module_test.cpp +++ b/extension/module/test/bundled_module_test.cpp @@ -9,7 +9,7 @@ #include #include -using namespace ::executorch::extension; +using namespace ::executorch::extension::ET_BUNDLED_MODULE_NAMESPACE; using namespace ::executorch::runtime; class BundledModuleTest : public ::testing::Test {