| #TOSA serialization library |
| |
| # Copyright (c) 2020-2023, ARM Limited. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # Contains TOSA flatbuffer serialization library content. |
| |
| cmake_minimum_required(VERSION 3.13.4) |
| project(TosaSerialization) |
| |
| set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to") |
| set(CMAKE_CXX_STANDARD_REQUIRED YES) |
| |
| set(CMAKE_VERBOSE_MAKEFILE ON) |
| |
| option(BUILD_TESTS "Build test applications" ON) |
| option(FLATBUFFERS_ROOT "Location where the flatbuffers 'include' and 'lib' folders to be found" Off) |
| |
| include_directories(${PROJECT_SOURCE_DIR}/third_party/half/include) |
| |
| include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) |
| |
| add_library(tosa_serialization_lib |
| src/tosa_serialization_handler.cpp |
| src/numpy_utils.cpp |
| ) |
| |
| # Verify we have a valid flatbuffers include path. |
| # We will explicitly exclude the system include directories and only |
| # accept either a user supplied value or the local third_party/flatbuffers. |
| find_path(FLATBUFFERS_INCLUDE_PATH flatbuffers/flatbuffers.h |
| NO_DEFAULT_PATH |
| HINTS ${FLATBUFFERS_ROOT} ./third_party/flatbuffers |
| PATH_SUFFIXES include) |
| message(STATUS "Flatbuffers include located at: ${FLATBUFFERS_INCLUDE_PATH}") |
| include_directories(${FLATBUFFERS_INCLUDE_PATH}) |
| |
| # Next is the library. |
| # We will explicitly exclude the system lib directories and only accept |
| # either a user supplied value or the local third_party/flatbuffers. |
| find_library(FLATBUFFERS_LIBRARY |
| NAMES libflatbuffers.a flatbuffers |
| NO_DEFAULT_PATH |
| HINTS ${FLATBUFFERS_ROOT} ./third_party/flatbuffers |
| PATH_SUFFIXES lib) |
| |
| if(FLATBUFFERS_LIBRARY) |
| message(STATUS "Flatbuffers library located at: ${FLATBUFFERS_LIBRARY}") |
| target_link_libraries(tosa_serialization_lib PRIVATE ${FLATBUFFERS_LIBRARY}) |
| else() |
| # It's not there we treat third_party/flatbuffers as a sub project. |
| # In this case we'll need to build the downloaded source. |
| # Turn off unnecessary flatbuffers targets |
| set(FLATBUFFERS_BUILD_TESTS OFF) |
| add_subdirectory(third_party/flatbuffers) |
| target_link_libraries(tosa_serialization_lib PRIVATE flatbuffers) |
| endif() |
| |
| set(public_headers) |
| list(APPEND public_headers |
| include/attribute.h |
| include/attribute.def |
| include/numpy_utils.h |
| include/tosa_generated.h |
| include/tosa_serialization_handler.h |
| ) |
| |
| set_target_properties(tosa_serialization_lib PROPERTIES PUBLIC_HEADER "${public_headers}") |
| |
| # Optionally build test executables. |
| if (BUILD_TESTS) |
| add_executable(serialization_npy_test |
| test/src/serialization_npy_test.cpp |
| ) |
| |
| target_link_libraries(serialization_npy_test |
| tosa_serialization_lib |
| ) |
| endif() |
| |
| set(TOSA_SERIALIZATION_LIB_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/tosa_serialization_lib") |
| # Follow GNU packaging norms for installation directory structure. |
| include(GNUInstallDirs) |
| install( |
| TARGETS tosa_serialization_lib EXPORT TosaSerializationLibTargets |
| PUBLIC_HEADER |
| ARCHIVE |
| ) |
| |
| install(EXPORT TosaSerializationLibTargets |
| FILE TosaSerializationLibTargets.cmake |
| NAMESPACE tosa:: |
| DESTINATION ${TOSA_SERIALIZATION_LIB_CMAKE_DIR} |
| ) |