From 91e1d89ad35ad081a4d5995d541791fbefdb3060 Mon Sep 17 00:00:00 2001 From: Rob Hughes Date: Fri, 23 Aug 2019 10:11:58 +0100 Subject: Fix Windows build: * CMake "install" commands require a RUNTIME argument for platforms with DLLs (e.g. Windows). * Replace use of non-standard variable length array with vector * Remove unnecessary #include of unistd.h * Add #ifdefs to dynamic backend code to disable for non-Unix platforms where you can't use dlopen etc. We could implement this properly for Windows later using LoadLibrary etc., but for now erroring is fine. * Add missing #include of Change-Id: Ic8ef5fd599b37bf8772510157b6e479819f6a1eb --- CMakeLists.txt | 12 ++++++++---- src/armnn/layers/StackLayer.cpp | 4 ++-- src/armnnTfLiteParser/CMakeLists.txt | 3 ++- src/armnnTfLiteParser/test/LoadModel.cpp | 2 -- src/backends/backendsCommon/DynamicBackendUtils.cpp | 12 ++++++++++++ src/backends/backendsCommon/DynamicBackendUtils.hpp | 12 +++++++++--- src/backends/reference/RefMemoryManager.cpp | 8 +++++--- 7 files changed, 38 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2236e2469e..420aabd365 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -449,18 +449,22 @@ target_link_libraries(armnn armnnUtils) target_link_libraries(armnn ${CMAKE_DL_LIBS}) install(TARGETS armnn - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) if(BUILD_CAFFE_PARSER) install(TARGETS armnnCaffeParser - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() if(BUILD_ONNX_PARSER) install(TARGETS armnnOnnxParser - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() if(BUILD_TF_PARSER) install(TARGETS armnnTfParser - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/src/armnn/layers/StackLayer.cpp b/src/armnn/layers/StackLayer.cpp index 7f1dbec461..43e0ac3134 100644 --- a/src/armnn/layers/StackLayer.cpp +++ b/src/armnn/layers/StackLayer.cpp @@ -38,7 +38,7 @@ std::vector StackLayer::InferOutputShapes(const std::vector dimensionSizes(inputNumDimensions + 1, 0); for (unsigned int i = 0; i < axis; ++i) { dimensionSizes[i] = inputShape[i]; @@ -51,7 +51,7 @@ std::vector StackLayer::InferOutputShapes(const std::vector({ targetShape }); } diff --git a/src/armnnTfLiteParser/CMakeLists.txt b/src/armnnTfLiteParser/CMakeLists.txt index 8ff0837e31..17d4cf68c2 100755 --- a/src/armnnTfLiteParser/CMakeLists.txt +++ b/src/armnnTfLiteParser/CMakeLists.txt @@ -22,5 +22,6 @@ if(BUILD_TF_LITE_PARSER) target_link_libraries(armnnTfLiteParser armnn ${FLATBUFFERS_LIBRARY}) install(TARGETS armnnTfLiteParser - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() diff --git a/src/armnnTfLiteParser/test/LoadModel.cpp b/src/armnnTfLiteParser/test/LoadModel.cpp index dac30efb1e..9ae3412a11 100644 --- a/src/armnnTfLiteParser/test/LoadModel.cpp +++ b/src/armnnTfLiteParser/test/LoadModel.cpp @@ -6,8 +6,6 @@ #include "ParserFlatbuffersFixture.hpp" #include "../TfLiteParser.hpp" -#include - using armnnTfLiteParser::TfLiteParser; using ModelPtr = TfLiteParser::ModelPtr; using SubgraphPtr = TfLiteParser::SubgraphPtr; diff --git a/src/backends/backendsCommon/DynamicBackendUtils.cpp b/src/backends/backendsCommon/DynamicBackendUtils.cpp index fc4336f4ac..da7c3244f1 100644 --- a/src/backends/backendsCommon/DynamicBackendUtils.cpp +++ b/src/backends/backendsCommon/DynamicBackendUtils.cpp @@ -16,6 +16,7 @@ namespace armnn void* DynamicBackendUtils::OpenHandle(const std::string& sharedObjectPath) { +#if defined(__unix__) if (sharedObjectPath.empty()) { throw RuntimeException("OpenHandle error: shared object path must not be empty"); @@ -28,16 +29,23 @@ void* DynamicBackendUtils::OpenHandle(const std::string& sharedObjectPath) } return sharedObjectHandle; +#else + throw RuntimeException("Dynamic backends not supported on this platform"); +#endif } void DynamicBackendUtils::CloseHandle(const void* sharedObjectHandle) { +#if defined(__unix__) if (!sharedObjectHandle) { return; } dlclose(const_cast(sharedObjectHandle)); +#else + throw RuntimeException("Dynamic backends not supported on this platform"); +#endif } bool DynamicBackendUtils::IsBackendCompatible(const BackendVersion &backendVersion) @@ -56,6 +64,7 @@ bool DynamicBackendUtils::IsBackendCompatibleImpl(const BackendVersion &backendA std::string DynamicBackendUtils::GetDlError() { +#if defined(__unix__) const char* errorMessage = dlerror(); if (!errorMessage) { @@ -63,6 +72,9 @@ std::string DynamicBackendUtils::GetDlError() } return std::string(errorMessage); +#else + throw RuntimeException("Dynamic backends not supported on this platform"); +#endif } std::vector DynamicBackendUtils::GetBackendPaths(const std::string& overrideBackendPath) diff --git a/src/backends/backendsCommon/DynamicBackendUtils.hpp b/src/backends/backendsCommon/DynamicBackendUtils.hpp index 0aa0ac8da5..6d9f11d215 100644 --- a/src/backends/backendsCommon/DynamicBackendUtils.hpp +++ b/src/backends/backendsCommon/DynamicBackendUtils.hpp @@ -10,11 +10,13 @@ #include +#include + #include -#include #include - -#include +#if defined(__unix__) +#include +#endif #if !defined(DYNAMIC_BACKEND_PATHS) #define DYNAMIC_BACKEND_PATHS "" @@ -58,6 +60,7 @@ private: template EntryPointType DynamicBackendUtils::GetEntryPoint(const void* sharedObjectHandle, const char* symbolName) { +#if defined(__unix__) if (sharedObjectHandle == nullptr) { throw RuntimeException("GetEntryPoint error: invalid handle"); @@ -75,6 +78,9 @@ EntryPointType DynamicBackendUtils::GetEntryPoint(const void* sharedObjectHandle } return entryPoint; +#else + throw RuntimeException("Dynamic backends not supported on this platform"); +#endif } } // namespace armnn diff --git a/src/backends/reference/RefMemoryManager.cpp b/src/backends/reference/RefMemoryManager.cpp index 0f4a289807..fdd008dbe6 100644 --- a/src/backends/reference/RefMemoryManager.cpp +++ b/src/backends/reference/RefMemoryManager.cpp @@ -6,6 +6,8 @@ #include +#include + namespace armnn { @@ -73,7 +75,7 @@ RefMemoryManager::Pool::~Pool() void* RefMemoryManager::Pool::GetPointer() { - BOOST_ASSERT_MSG(m_Pointer, "RefMemoryManager::Pool::GetPointer() called when memory not acquired"); + BOOST_ASSERT_MSG(m_Pointer, "RefMemoryManager::Pool::GetPointer() called when memory not acquired"); return m_Pointer; } @@ -85,14 +87,14 @@ void RefMemoryManager::Pool::Reserve(unsigned int numBytes) void RefMemoryManager::Pool::Acquire() { - BOOST_ASSERT_MSG(!m_Pointer, "RefMemoryManager::Pool::Acquire() called when memory already acquired"); + BOOST_ASSERT_MSG(!m_Pointer, "RefMemoryManager::Pool::Acquire() called when memory already acquired"); BOOST_ASSERT(m_Size >= 0); m_Pointer = ::operator new(size_t(m_Size)); } void RefMemoryManager::Pool::Release() { - BOOST_ASSERT_MSG(m_Pointer, "RefMemoryManager::Pool::Release() called when memory not acquired"); + BOOST_ASSERT_MSG(m_Pointer, "RefMemoryManager::Pool::Release() called when memory not acquired"); ::operator delete(m_Pointer); m_Pointer = nullptr; } -- cgit v1.2.1