From d0dc770aeb9423081a1ef0245f7449dcf3fb2ee2 Mon Sep 17 00:00:00 2001 From: Matteo Martincigh Date: Thu, 1 Aug 2019 17:09:03 +0100 Subject: IVGCVSW-3561 Fix the linker issues of the test shared objects in the Android builds * Changed the test libs from SHARED to MODULE * Added IBackendInternal.cpp to separate the default implementation of OptimizeSubgraphView from the header file * Linked the modules against armnn to get the missing symbols * Renamed the test modules to avoid name clashing in the CI system * Moved the test shared objects to separate folders to keep the filesystem tidy Change-Id: I987c56d2d66bdb86f7b391a83c602d0dadf4c674 Signed-off-by: Matteo Martincigh --- src/backends/backendsCommon/CMakeLists.txt | 1 + src/backends/backendsCommon/IBackendInternal.cpp | 89 ++++++++++++++++++ src/backends/backendsCommon/IBackendInternal.hpp | 81 +++------------- src/backends/backendsCommon/common.mk | 1 + src/backends/backendsCommon/test/CMakeLists.txt | 89 ++++++++++-------- .../backendsCommon/test/DynamicBackendTests.hpp | 102 +++++++++++++++------ 6 files changed, 230 insertions(+), 133 deletions(-) create mode 100644 src/backends/backendsCommon/IBackendInternal.cpp diff --git a/src/backends/backendsCommon/CMakeLists.txt b/src/backends/backendsCommon/CMakeLists.txt index 4048c58956..653f3727ee 100644 --- a/src/backends/backendsCommon/CMakeLists.txt +++ b/src/backends/backendsCommon/CMakeLists.txt @@ -13,6 +13,7 @@ list(APPEND armnnBackendsCommon_sources DynamicBackend.hpp DynamicBackendUtils.cpp DynamicBackendUtils.hpp + IBackendInternal.cpp IBackendInternal.hpp IBackendContext.hpp ITensorHandleFactory.cpp diff --git a/src/backends/backendsCommon/IBackendInternal.cpp b/src/backends/backendsCommon/IBackendInternal.cpp new file mode 100644 index 0000000000..261613c490 --- /dev/null +++ b/src/backends/backendsCommon/IBackendInternal.cpp @@ -0,0 +1,89 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "IBackendInternal.hpp" + +namespace armnn +{ + +ARMNN_NO_DEPRECATE_WARN_BEGIN +IBackendInternal::ISubGraphConverterPtr IBackendInternal::CreateSubGraphConverter( + const std::shared_ptr& subGraph) const +{ + return ISubGraphConverterPtr{}; +} + +IBackendInternal::Optimizations IBackendInternal::GetOptimizations() const +{ + return Optimizations{}; +} + +IBackendInternal::SubGraphUniquePtr IBackendInternal::OptimizeSubGraph(const SubGraph& subGraph, + bool& optimizationAttempted) const +{ + optimizationAttempted = false; + return nullptr; +} +ARMNN_NO_DEPRECATE_WARN_END + +IMemoryManagerUniquePtr IBackendInternal::CreateMemoryManager() const +{ + return IMemoryManagerUniquePtr(); +} + +IBackendInternal::IBackendContextPtr IBackendInternal::CreateBackendContext(const IRuntime::CreationOptions&) const +{ + return IBackendContextPtr{}; +} + +// Default implementation of OptimizeSubgraphView for backward compatibility with the old API. +// Override this method with a custom optimization implementation. +OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph) const +{ + bool optimizationAttempted = false; + + ARMNN_NO_DEPRECATE_WARN_BEGIN + SubGraphUniquePtr optSubgraph = OptimizeSubGraph(subgraph, optimizationAttempted); + ARMNN_NO_DEPRECATE_WARN_END + + OptimizationViews result; + if (!optimizationAttempted) + { + result.AddUntouchedSubgraph(SubgraphView(subgraph)); + } + else if (optSubgraph) + { + result.AddSubstitution({subgraph, SubgraphView(*optSubgraph.get())}); + } + else + { + result.AddFailedSubgraph(SubgraphView(subgraph)); + } + + return result; +} + +bool IBackendInternal::SupportsTensorAllocatorAPI() const +{ + return !GetHandleFactoryPreferences().empty(); +} + +ITensorHandleFactory::FactoryId IBackendInternal::GetBackwardCompatibleFavoriteHandleFactory() +{ + auto favorites = GetHandleFactoryPreferences(); + if (favorites.empty()) + { + return ITensorHandleFactory::LegacyFactoryId; + } + + return favorites[0]; +} + +std::vector IBackendInternal::GetHandleFactoryPreferences() const +{ + return std::vector(); +} + +} // namespace armnn diff --git a/src/backends/backendsCommon/IBackendInternal.hpp b/src/backends/backendsCommon/IBackendInternal.hpp index c548683e3e..f8f9df5beb 100644 --- a/src/backends/backendsCommon/IBackendInternal.hpp +++ b/src/backends/backendsCommon/IBackendInternal.hpp @@ -2,6 +2,7 @@ // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // + #pragma once #include @@ -18,6 +19,7 @@ #include "OptimizationViews.hpp" #include +#include namespace armnn { @@ -30,11 +32,11 @@ struct BackendVersion uint32_t m_Major; uint32_t m_Minor; - BackendVersion() + constexpr BackendVersion() : m_Major(0) , m_Minor(0) {} - BackendVersion(uint32_t major, uint32_t minor) + constexpr BackendVersion(uint32_t major, uint32_t minor) : m_Major(major) , m_Minor(minor) {} @@ -92,87 +94,32 @@ public: = std::unique_ptr; ARMNN_DEPRECATED_MSG("This method is no longer supported") - virtual ISubGraphConverterPtr CreateSubGraphConverter(const std::shared_ptr& subGraph) const - { - return ISubGraphConverterPtr{}; - } + virtual ISubGraphConverterPtr CreateSubGraphConverter(const std::shared_ptr& subGraph) const; ARMNN_DEPRECATED_MSG("Use \"OptimizationViews OptimizeSubgraphView(const SubgraphView&)\" instead") - virtual Optimizations GetOptimizations() const - { - return Optimizations{}; - } + virtual Optimizations GetOptimizations() const; ARMNN_DEPRECATED_MSG("Use \"OptimizationViews OptimizeSubgraphView(const SubgraphView&)\" instead") - virtual SubGraphUniquePtr OptimizeSubGraph(const SubGraph& subGraph, bool& optimizationAttempted) const - { - optimizationAttempted = false; - return nullptr; - } + virtual SubGraphUniquePtr OptimizeSubGraph(const SubGraph& subGraph, bool& optimizationAttempted) const; ARMNN_NO_DEPRECATE_WARN_END - - virtual IMemoryManagerUniquePtr CreateMemoryManager() const - { - return IMemoryManagerUniquePtr(); - } + virtual IMemoryManagerUniquePtr CreateMemoryManager() const; virtual IWorkloadFactoryPtr CreateWorkloadFactory( const IMemoryManagerSharedPtr& memoryManager = nullptr) const = 0; - virtual IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const - { - return IBackendContextPtr{}; - } + virtual IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const; virtual ILayerSupportSharedPtr GetLayerSupport() const = 0; - // Default implementation of OptimizeSubgraphView for backward compatibility with the old API. - // Override this method with a custom optimization implementation. - virtual OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph) const - { - bool optimizationAttempted = false; - - ARMNN_NO_DEPRECATE_WARN_BEGIN - SubGraphUniquePtr optSubgraph = OptimizeSubGraph(subgraph, optimizationAttempted); - ARMNN_NO_DEPRECATE_WARN_END - - OptimizationViews result; - if (!optimizationAttempted) - { - result.AddUntouchedSubgraph(SubgraphView(subgraph)); - } - else - { - if (optSubgraph) - { - result.AddSubstitution({subgraph, SubgraphView(*optSubgraph.get())}); - } - else - { - result.AddFailedSubgraph(SubgraphView(subgraph)); - } - } - return result; - } + virtual OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph) const; - bool SupportsTensorAllocatorAPI() const { return GetHandleFactoryPreferences().empty() == false; } + bool SupportsTensorAllocatorAPI() const; - ITensorHandleFactory::FactoryId GetBackwardCompatibleFavoriteHandleFactory() - { - auto favorites = GetHandleFactoryPreferences(); - if (favorites.empty()) - { - return ITensorHandleFactory::LegacyFactoryId; - } - return favorites[0]; - } + ITensorHandleFactory::FactoryId GetBackwardCompatibleFavoriteHandleFactory(); /// (Optional) Returns a vector of supported TensorHandleFactory ids in preference order. - virtual std::vector GetHandleFactoryPreferences() const - { - return std::vector(); - } + virtual std::vector GetHandleFactoryPreferences() const; /// (Optional) Register TensorHandleFactories /// Either this method or CreateMemoryManager() and @@ -180,7 +127,7 @@ public: virtual void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) {} /// Returns the version of the Backend API - static BackendVersion GetApiVersion() { return { 1, 0 }; } + static constexpr BackendVersion GetApiVersion() { return BackendVersion(1, 0); } }; using IBackendInternalUniquePtr = std::unique_ptr; diff --git a/src/backends/backendsCommon/common.mk b/src/backends/backendsCommon/common.mk index 8df5ab9203..69bde81b0a 100644 --- a/src/backends/backendsCommon/common.mk +++ b/src/backends/backendsCommon/common.mk @@ -10,6 +10,7 @@ COMMON_SOURCES := \ BackendRegistry.cpp \ CpuTensorHandle.cpp \ + IBackendInternal.cpp \ ITensorHandleFactory.cpp \ LayerSupportBase.cpp \ MemCopyWorkload.cpp \ diff --git a/src/backends/backendsCommon/test/CMakeLists.txt b/src/backends/backendsCommon/test/CMakeLists.txt index 8c9644ff94..930157f572 100644 --- a/src/backends/backendsCommon/test/CMakeLists.txt +++ b/src/backends/backendsCommon/test/CMakeLists.txt @@ -68,59 +68,76 @@ target_include_directories(armnnBackendsCommonUnitTests PRIVATE ${PROJECT_SOURCE # Dummy shared object for testing. # This is a simple library used to test the utility functions that will be used to handle the shared objects. -list(APPEND armnnTestSharedObject_sources +list(APPEND testSharedObject_sources TestSharedObject.cpp TestSharedObject.hpp ) -add_library_ex(armnnTestSharedObject SHARED ${armnnTestSharedObject_sources}) -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/libarmnnNoSharedObject.txt "This is not a shared object") +add_library_ex(TestSharedObject MODULE ${testSharedObject_sources}) +set_target_properties(TestSharedObject PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testSharedObject) +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/testSharedObject/libNoSharedObject.txt "This is not a shared object") # Dummy dynamic backends for testing. # Both a valid and a number of invalid dummy dynamic backends (covering various use cases) share the # same source code. The various test cases are put together in the code using compiler directives. -list(APPEND armnnTestDynamicBackend_sources +list(APPEND testDynamicBackend_sources TestDynamicBackend.cpp TestDynamicBackend.hpp ) -add_library_ex(armnnValidTestDynamicBackend SHARED ${armnnTestDynamicBackend_sources}) -target_compile_definitions(armnnValidTestDynamicBackend PRIVATE -DVALID_TEST_DYNAMIC_BACKEND) -target_include_directories(armnnValidTestDynamicBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) -target_include_directories(armnnValidTestDynamicBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +add_library_ex(ValidTestDynamicBackend MODULE ${testDynamicBackend_sources}) +target_compile_definitions(ValidTestDynamicBackend PRIVATE -DVALID_TEST_DYNAMIC_BACKEND) +target_include_directories(ValidTestDynamicBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) +target_include_directories(ValidTestDynamicBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +target_link_libraries(ValidTestDynamicBackend armnn) +set_target_properties(ValidTestDynamicBackend PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend) -add_library_ex(armnnInvalidTestDynamicBackend1 SHARED ${armnnTestDynamicBackend_sources}) -target_compile_definitions(armnnInvalidTestDynamicBackend1 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_1) -target_include_directories(armnnInvalidTestDynamicBackend1 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) -target_include_directories(armnnInvalidTestDynamicBackend1 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +add_library_ex(InvalidTestDynamicBackend1 MODULE ${testDynamicBackend_sources}) +target_compile_definitions(InvalidTestDynamicBackend1 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_1) +target_include_directories(InvalidTestDynamicBackend1 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) +target_include_directories(InvalidTestDynamicBackend1 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +target_link_libraries(InvalidTestDynamicBackend1 armnn) +set_target_properties(InvalidTestDynamicBackend1 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend) -add_library_ex(armnnInvalidTestDynamicBackend2 SHARED ${armnnTestDynamicBackend_sources}) -target_compile_definitions(armnnInvalidTestDynamicBackend2 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_2) -target_include_directories(armnnInvalidTestDynamicBackend2 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) -target_include_directories(armnnInvalidTestDynamicBackend2 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +add_library_ex(InvalidTestDynamicBackend2 MODULE ${testDynamicBackend_sources}) +target_compile_definitions(InvalidTestDynamicBackend2 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_2) +target_include_directories(InvalidTestDynamicBackend2 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) +target_include_directories(InvalidTestDynamicBackend2 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +target_link_libraries(InvalidTestDynamicBackend2 armnn) +set_target_properties(InvalidTestDynamicBackend2 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend) -add_library_ex(armnnInvalidTestDynamicBackend3 SHARED ${armnnTestDynamicBackend_sources}) -target_compile_definitions(armnnInvalidTestDynamicBackend3 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_3) -target_include_directories(armnnInvalidTestDynamicBackend3 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) -target_include_directories(armnnInvalidTestDynamicBackend3 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +add_library_ex(InvalidTestDynamicBackend3 MODULE ${testDynamicBackend_sources}) +target_compile_definitions(InvalidTestDynamicBackend3 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_3) +target_include_directories(InvalidTestDynamicBackend3 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) +target_include_directories(InvalidTestDynamicBackend3 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +target_link_libraries(InvalidTestDynamicBackend3 armnn) +set_target_properties(InvalidTestDynamicBackend3 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend) -add_library_ex(armnnInvalidTestDynamicBackend4 SHARED ${armnnTestDynamicBackend_sources}) -target_compile_definitions(armnnInvalidTestDynamicBackend4 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_4) -target_include_directories(armnnInvalidTestDynamicBackend4 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) -target_include_directories(armnnInvalidTestDynamicBackend4 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +add_library_ex(InvalidTestDynamicBackend4 MODULE ${testDynamicBackend_sources}) +target_compile_definitions(InvalidTestDynamicBackend4 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_4) +target_include_directories(InvalidTestDynamicBackend4 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) +target_include_directories(InvalidTestDynamicBackend4 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +target_link_libraries(InvalidTestDynamicBackend4 armnn) +set_target_properties(InvalidTestDynamicBackend4 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend) -add_library_ex(armnnInvalidTestDynamicBackend5 SHARED ${armnnTestDynamicBackend_sources}) -target_compile_definitions(armnnInvalidTestDynamicBackend5 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_5) -target_include_directories(armnnInvalidTestDynamicBackend5 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) -target_include_directories(armnnInvalidTestDynamicBackend5 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +add_library_ex(InvalidTestDynamicBackend5 MODULE ${testDynamicBackend_sources}) +target_compile_definitions(InvalidTestDynamicBackend5 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_5) +target_include_directories(InvalidTestDynamicBackend5 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) +target_include_directories(InvalidTestDynamicBackend5 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +target_link_libraries(InvalidTestDynamicBackend5 armnn) +set_target_properties(InvalidTestDynamicBackend5 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend) -add_library_ex(armnnInvalidTestDynamicBackend6 SHARED ${armnnTestDynamicBackend_sources}) -target_compile_definitions(armnnInvalidTestDynamicBackend6 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_6) -target_include_directories(armnnInvalidTestDynamicBackend6 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) -target_include_directories(armnnInvalidTestDynamicBackend6 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +add_library_ex(InvalidTestDynamicBackend6 MODULE ${testDynamicBackend_sources}) +target_compile_definitions(InvalidTestDynamicBackend6 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_6) +target_include_directories(InvalidTestDynamicBackend6 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) +target_include_directories(InvalidTestDynamicBackend6 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +target_link_libraries(InvalidTestDynamicBackend6 armnn) +set_target_properties(InvalidTestDynamicBackend6 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend) -add_library_ex(armnnInvalidTestDynamicBackend7 SHARED ${armnnTestDynamicBackend_sources}) -target_compile_definitions(armnnInvalidTestDynamicBackend7 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_7) -target_include_directories(armnnInvalidTestDynamicBackend7 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) -target_include_directories(armnnInvalidTestDynamicBackend7 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +add_library_ex(InvalidTestDynamicBackend7 MODULE ${testDynamicBackend_sources}) +target_compile_definitions(InvalidTestDynamicBackend7 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_7) +target_include_directories(InvalidTestDynamicBackend7 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) +target_include_directories(InvalidTestDynamicBackend7 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) +target_link_libraries(InvalidTestDynamicBackend7 armnn) +set_target_properties(InvalidTestDynamicBackend7 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend) diff --git a/src/backends/backendsCommon/test/DynamicBackendTests.hpp b/src/backends/backendsCommon/test/DynamicBackendTests.hpp index 2bc4558500..55f90d48eb 100644 --- a/src/backends/backendsCommon/test/DynamicBackendTests.hpp +++ b/src/backends/backendsCommon/test/DynamicBackendTests.hpp @@ -17,34 +17,63 @@ #include #include -static std::string g_TestSharedObjectSubDir = "src/backends/backendsCommon/test/"; -static std::string g_TestSharedObjectFileName = "libarmnnTestSharedObject.so"; -static std::string g_TestValidTestDynamicBackendFileName = "libarmnnValidTestDynamicBackend.so"; -static std::string g_TestInvalidTestDynamicBackend1FileName = "libarmnnInvalidTestDynamicBackend1.so"; -static std::string g_TestInvalidTestDynamicBackend2FileName = "libarmnnInvalidTestDynamicBackend2.so"; -static std::string g_TestInvalidTestDynamicBackend3FileName = "libarmnnInvalidTestDynamicBackend3.so"; -static std::string g_TestInvalidTestDynamicBackend4FileName = "libarmnnInvalidTestDynamicBackend4.so"; -static std::string g_TestInvalidTestDynamicBackend5FileName = "libarmnnInvalidTestDynamicBackend5.so"; -static std::string g_TestInvalidTestDynamicBackend6FileName = "libarmnnInvalidTestDynamicBackend6.so"; -static std::string g_TestInvalidTestDynamicBackend7FileName = "libarmnnInvalidTestDynamicBackend7.so"; - -std::string GetTestFilePath(const std::string& fileName) +static std::string g_TestBaseDir = "src/backends/backendsCommon/test/"; + +static std::string g_TestSharedObjectSubDir = "testSharedObject/"; +static std::string g_TestDynamicBackendSubDir = "testDynamicBackend/"; + +static std::string g_TestSharedObjectFileName = "libTestSharedObject.so"; +static std::string g_TestNoSharedObjectFileName = "libNoSharedObject.txt"; + +static std::string g_TestValidTestDynamicBackendFileName = "libValidTestDynamicBackend.so"; +static std::string g_TestInvalidTestDynamicBackend1FileName = "libInvalidTestDynamicBackend1.so"; +static std::string g_TestInvalidTestDynamicBackend2FileName = "libInvalidTestDynamicBackend2.so"; +static std::string g_TestInvalidTestDynamicBackend3FileName = "libInvalidTestDynamicBackend3.so"; +static std::string g_TestInvalidTestDynamicBackend4FileName = "libInvalidTestDynamicBackend4.so"; +static std::string g_TestInvalidTestDynamicBackend5FileName = "libInvalidTestDynamicBackend5.so"; +static std::string g_TestInvalidTestDynamicBackend6FileName = "libInvalidTestDynamicBackend6.so"; +static std::string g_TestInvalidTestDynamicBackend7FileName = "libInvalidTestDynamicBackend7.so"; + +std::string GetTestDirectoryBasePath() { using namespace boost::filesystem; path programLocation = boost::dll::program_location().parent_path(); - path sharedObjectPath = programLocation.append(g_TestSharedObjectSubDir); - path sharedObjectFile = sharedObjectPath.append(fileName); - BOOST_TEST(exists(sharedObjectFile)); + path sharedObjectPath = programLocation.append(g_TestBaseDir); + BOOST_CHECK(exists(sharedObjectPath)); + + return sharedObjectPath.string(); +} + +std::string GetTestSubDirectory(const std::string& subdir) +{ + using namespace boost::filesystem; + + std::string testDynamicBackendsBaseDir = GetTestDirectoryBasePath(); + path testDynamicBackendsBasePath(testDynamicBackendsBaseDir); + path testDynamicBackendsSubDir = testDynamicBackendsBasePath.append(subdir); + // Do not check that the sub-directory exists because for testing reasons we may use non-existing paths + + return testDynamicBackendsSubDir.string(); +} + +std::string GetTestFilePath(const std::string& directory, const std::string& fileName) +{ + using namespace boost::filesystem; + + path directoryPath(directory); + path fileNamePath = directoryPath.append(fileName); + BOOST_CHECK(exists(fileNamePath)); - return sharedObjectFile.string(); + return fileNamePath.string(); } void OpenCloseHandleTestImpl() { using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestSharedObjectFileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestSharedObjectFileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -83,7 +112,8 @@ void OpenNotSharedObjectTestImpl() { using namespace armnn; - std::string notSharedObjectFilePath = GetTestFilePath("libarmnnNoSharedObject.txt"); + std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir); + std::string notSharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestNoSharedObjectFileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(notSharedObjectFilePath), RuntimeException); @@ -94,7 +124,8 @@ void GetValidEntryPointTestImpl() { using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestSharedObjectFileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestSharedObjectFileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -114,7 +145,8 @@ void GetNameMangledEntryPointTestImpl() { using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestSharedObjectFileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestSharedObjectFileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -134,7 +166,8 @@ void GetNoExternEntryPointTestImpl() { using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestSharedObjectFileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestSharedObjectFileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -154,7 +187,8 @@ void GetNotExistingEntryPointTestImpl() { using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestSharedObjectFileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestSharedObjectFileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -230,7 +264,8 @@ void CreateValidDynamicBackendObjectTestImpl() using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestValidTestDynamicBackendFileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestValidTestDynamicBackendFileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -274,7 +309,8 @@ void CreateDynamicBackendObjectInvalidInterface1TestImpl() using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend1FileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend1FileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -293,7 +329,8 @@ void CreateDynamicBackendObjectInvalidInterface2TestImpl() using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend2FileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend2FileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -312,7 +349,8 @@ void CreateDynamicBackendObjectInvalidInterface3TestImpl() using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend3FileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend3FileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -331,7 +369,8 @@ void CreateDynamicBackendObjectInvalidInterface4TestImpl() using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend4FileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend4FileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -351,7 +390,8 @@ void CreateDynamicBackendObjectInvalidInterface5TestImpl() using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend5FileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend5FileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -371,7 +411,8 @@ void CreateDynamicBackendObjectInvalidInterface6TestImpl() using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend6FileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend6FileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); @@ -403,7 +444,8 @@ void CreateDynamicBackendObjectInvalidInterface7TestImpl() using namespace armnn; - std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend7FileName); + std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir); + std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend7FileName); void* sharedObjectHandle = nullptr; BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); -- cgit v1.2.1