From ba3ef18cb6117c49fcdbf177dce5991d6d679cbc Mon Sep 17 00:00:00 2001 From: Jan Eilers Date: Fri, 25 Sep 2020 08:36:44 +0100 Subject: IVGCVSW-5295 Change fmt to be a header-only interface library * Fix non-virtual-dtor warnings in fmt * Fix wrong fmt include in TfParser * Make fmt work in nn-driver * Make fmt a header-only interface library * Link fmt where necessary Signed-off-by: Jan Eilers Change-Id: I9db7cd9a133a81262cbf79f04fb419ab97b88ea8 --- Android.mk | 3 +- CMakeLists.txt | 8 ++--- src/armnnTfParser/TfParser.cpp | 2 +- tests/CMakeLists.txt | 3 ++ third-party/fmt/CMakeLists.txt | 19 ++++++++++++ third-party/fmt/core.h | 2 +- third-party/fmt/src/format.cc | 69 ------------------------------------------ 7 files changed, 30 insertions(+), 76 deletions(-) create mode 100644 third-party/fmt/CMakeLists.txt delete mode 100644 third-party/fmt/src/format.cc diff --git a/Android.mk b/Android.mk index 2d3aa96d9c..f767b20d68 100644 --- a/Android.mk +++ b/Android.mk @@ -249,7 +249,8 @@ LOCAL_CFLAGS := \ -std=$(CPP_VERSION) \ -fexceptions \ -Wno-unused-parameter \ - -frtti + -frtti \ + -DFMT_HEADER_ONLY # The variable to enable/disable the CL backend (ARMNN_COMPUTE_CL_ENABLED) is declared in android-nn-driver/Android.mk ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1) diff --git a/CMakeLists.txt b/CMakeLists.txt index 48405327c2..c935e6b52d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -541,10 +541,6 @@ list(APPEND armnn_sources src/profiling/backends/BackendProfiling.cpp src/profiling/backends/BackendProfiling.hpp third-party/cxxopts/cxxopts.hpp - third-party/fmt/core.h - third-party/fmt/format.h - third-party/fmt/format-inl.h - third-party/fmt/src/format.cc third-party/ghc/filesystem.hpp third-party/half/half.hpp ) @@ -587,6 +583,10 @@ if ("${CMAKE_SYSTEM_NAME}" STREQUAL Windows) target_link_libraries(armnn Ws2_32.lib) endif() +# Link fmt third-party library +add_subdirectory(third-party/fmt) +target_link_libraries(armnn fmt) + if(BUILD_CAFFE_PARSER) install(TARGETS armnnCaffeParser LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} diff --git a/src/armnnTfParser/TfParser.cpp b/src/armnnTfParser/TfParser.cpp index 8046a5521c..6cf1df1b07 100755 --- a/src/armnnTfParser/TfParser.cpp +++ b/src/armnnTfParser/TfParser.cpp @@ -24,7 +24,7 @@ #include #include -#include +#include #include using namespace armnnUtils; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5bbec11158..b3496b42ee 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -16,6 +16,9 @@ target_include_directories(inferenceTest PRIVATE ../src/armnnUtils) target_include_directories(inferenceTest PRIVATE ../src/backends) target_include_directories(inferenceTest PRIVATE ../third-party/stb) +# Link fmt third-party library +target_link_libraries(inferenceTest fmt) + if(BUILD_CAFFE_PARSER) macro(CaffeParserTest testName sources) add_executable_ex(${testName} ${sources}) diff --git a/third-party/fmt/CMakeLists.txt b/third-party/fmt/CMakeLists.txt new file mode 100644 index 0000000000..496ae1fbc6 --- /dev/null +++ b/third-party/fmt/CMakeLists.txt @@ -0,0 +1,19 @@ +# +# Copyright © 2020 Arm Ltd. All rights reserved. +# SPDX-License-Identifier: MIT +# + +add_library(fmt INTERFACE) + +target_compile_definitions(fmt INTERFACE FMT_HEADER_ONLY=1) + +target_include_directories(fmt SYSTEM INTERFACE + $ + $) + +install( + TARGETS fmt + EXPORT armnn-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) \ No newline at end of file diff --git a/third-party/fmt/core.h b/third-party/fmt/core.h index 32923ee4b4..338e0c708c 100644 --- a/third-party/fmt/core.h +++ b/third-party/fmt/core.h @@ -668,7 +668,7 @@ template class buffer { size_(sz), capacity_(cap) {} - ~buffer() = default; + virtual ~buffer() = default; /** Sets the buffer data and capacity. */ void set(T* buf_data, size_t buf_capacity) FMT_NOEXCEPT { diff --git a/third-party/fmt/src/format.cc b/third-party/fmt/src/format.cc deleted file mode 100644 index a64a1f3893..0000000000 --- a/third-party/fmt/src/format.cc +++ /dev/null @@ -1,69 +0,0 @@ -// Formatting library for C++ -// -// Copyright (c) 2012 - 2016, Victor Zverovich -// All rights reserved. -// -// For the license information refer to format.h. - -#include "fmt/format-inl.h" - -FMT_BEGIN_NAMESPACE -namespace detail { - -template -int format_float(char* buf, std::size_t size, const char* format, int precision, - T value) { -#ifdef FMT_FUZZ - if (precision > 100000) - throw std::runtime_error( - "fuzz mode - avoid large allocation inside snprintf"); -#endif - // Suppress the warning about nonliteral format string. - int (*snprintf_ptr)(char*, size_t, const char*, ...) = FMT_SNPRINTF; - return precision < 0 ? snprintf_ptr(buf, size, format, value) - : snprintf_ptr(buf, size, format, precision, value); -} -} // namespace detail - -template struct FMT_INSTANTIATION_DEF_API detail::basic_data; - -// Workaround a bug in MSVC2013 that prevents instantiation of format_float. -int (*instantiate_format_float)(double, int, detail::float_specs, - detail::buffer&) = detail::format_float; - -#ifndef FMT_STATIC_THOUSANDS_SEPARATOR -template FMT_API detail::locale_ref::locale_ref(const std::locale& loc); -template FMT_API std::locale detail::locale_ref::get() const; -#endif - -// Explicit instantiations for char. - -template FMT_API std::string detail::grouping_impl(locale_ref); -template FMT_API char detail::thousands_sep_impl(locale_ref); -template FMT_API char detail::decimal_point_impl(locale_ref); - -template FMT_API void detail::buffer::append(const char*, const char*); - -template FMT_API FMT_BUFFER_CONTEXT(char)::iterator detail::vformat_to( - detail::buffer&, string_view, - basic_format_args); - -template FMT_API int detail::snprintf_float(double, int, detail::float_specs, - detail::buffer&); -template FMT_API int detail::snprintf_float(long double, int, - detail::float_specs, - detail::buffer&); -template FMT_API int detail::format_float(double, int, detail::float_specs, - detail::buffer&); -template FMT_API int detail::format_float(long double, int, detail::float_specs, - detail::buffer&); - -// Explicit instantiations for wchar_t. - -template FMT_API std::string detail::grouping_impl(locale_ref); -template FMT_API wchar_t detail::thousands_sep_impl(locale_ref); -template FMT_API wchar_t detail::decimal_point_impl(locale_ref); - -template FMT_API void detail::buffer::append(const wchar_t*, - const wchar_t*); -FMT_END_NAMESPACE -- cgit v1.2.1