blob: 87e0825aac16db561918a618046d630a18b14434 [file] [log] [blame]
#TOSA serialization library
# Copyright (c) 2020-2022, 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(${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_read_write
test/src/serialization_read_write.cpp
)
target_link_libraries(serialization_read_write
tosa_serialization_lib
)
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}
)