blob: d373694fe9e4b33f61861d88872ce311ad32b8cb [file] [log] [blame]
Eric Kunze2364dcd2021-04-26 11:06:57 -07001#TOSA serialization library
2
Eric Kunze9d0c2332023-01-04 21:31:56 +00003# Copyright (c) 2020-2023, ARM Limited.
Eric Kunze2364dcd2021-04-26 11:06:57 -07004#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17# Contains TOSA flatbuffer serialization library content.
18
19cmake_minimum_required(VERSION 3.13.4)
20project(TosaSerialization)
21
22set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to")
23set(CMAKE_CXX_STANDARD_REQUIRED YES)
24
25set(CMAKE_VERBOSE_MAKEFILE ON)
26
Colm Donelan2a3ca932022-08-25 16:00:19 +010027option(BUILD_TESTS "Build test applications" ON)
28option(FLATBUFFERS_ROOT "Location where the flatbuffers 'include' and 'lib' folders to be found" Off)
29
James Ward485a11d2022-08-05 13:48:37 +010030include_directories(${PROJECT_SOURCE_DIR}/third_party/half/include)
31
Eric Kunze2364dcd2021-04-26 11:06:57 -070032include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
Eric Kunze2364dcd2021-04-26 11:06:57 -070033
Colm Donelan2a3ca932022-08-25 16:00:19 +010034add_library(tosa_serialization_lib
Eric Kunze2364dcd2021-04-26 11:06:57 -070035 src/tosa_serialization_handler.cpp
36 src/numpy_utils.cpp
Kevin Cheng87de41f2021-11-03 22:09:42 -070037)
Eric Kunze2364dcd2021-04-26 11:06:57 -070038
Colm Donelan2a3ca932022-08-25 16:00:19 +010039# Verify we have a valid flatbuffers include path.
40# We will explicitly exclude the system include directories and only
41# accept either a user supplied value or the local third_party/flatbuffers.
42find_path(FLATBUFFERS_INCLUDE_PATH flatbuffers/flatbuffers.h
43 NO_DEFAULT_PATH
44 HINTS ${FLATBUFFERS_ROOT} ./third_party/flatbuffers
45 PATH_SUFFIXES include)
46message(STATUS "Flatbuffers include located at: ${FLATBUFFERS_INCLUDE_PATH}")
47include_directories(${FLATBUFFERS_INCLUDE_PATH})
Eric Kunze2364dcd2021-04-26 11:06:57 -070048
Colm Donelan2a3ca932022-08-25 16:00:19 +010049# Next is the library.
50# We will explicitly exclude the system lib directories and only accept
51# either a user supplied value or the local third_party/flatbuffers.
52find_library(FLATBUFFERS_LIBRARY
53 NAMES libflatbuffers.a flatbuffers
54 NO_DEFAULT_PATH
55 HINTS ${FLATBUFFERS_ROOT} ./third_party/flatbuffers
56 PATH_SUFFIXES lib)
57
58if(FLATBUFFERS_LIBRARY)
59 message(STATUS "Flatbuffers library located at: ${FLATBUFFERS_LIBRARY}")
60 target_link_libraries(tosa_serialization_lib PRIVATE ${FLATBUFFERS_LIBRARY})
61else()
62 # It's not there we treat third_party/flatbuffers as a sub project.
63 # In this case we'll need to build the downloaded source.
64 # Turn off unnecessary flatbuffers targets
65 set(FLATBUFFERS_BUILD_TESTS OFF)
66 add_subdirectory(third_party/flatbuffers)
67 target_link_libraries(tosa_serialization_lib PRIVATE flatbuffers)
68endif()
69
70set(public_headers)
71list(APPEND public_headers
72 include/attribute.h
73 include/attribute.def
74 include/numpy_utils.h
75 include/tosa_generated.h
76 include/tosa_serialization_handler.h
Eric Kunze2364dcd2021-04-26 11:06:57 -070077)
78
Colm Donelan2a3ca932022-08-25 16:00:19 +010079set_target_properties(tosa_serialization_lib PROPERTIES PUBLIC_HEADER "${public_headers}")
Eric Kunze2364dcd2021-04-26 11:06:57 -070080
Colm Donelan2a3ca932022-08-25 16:00:19 +010081# Optionally build test executables.
82if (BUILD_TESTS)
Colm Donelan2a3ca932022-08-25 16:00:19 +010083 add_executable(serialization_npy_test
84 test/src/serialization_npy_test.cpp
85 )
86
87 target_link_libraries(serialization_npy_test
88 tosa_serialization_lib
89 )
90endif()
Kevin Cheng87de41f2021-11-03 22:09:42 -070091
92set(TOSA_SERIALIZATION_LIB_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/tosa_serialization_lib")
Colm Donelan2a3ca932022-08-25 16:00:19 +010093# Follow GNU packaging norms for installation directory structure.
94include(GNUInstallDirs)
Kevin Cheng87de41f2021-11-03 22:09:42 -070095install(
96 TARGETS tosa_serialization_lib EXPORT TosaSerializationLibTargets
Colm Donelan2a3ca932022-08-25 16:00:19 +010097 PUBLIC_HEADER
98 ARCHIVE
Kevin Cheng87de41f2021-11-03 22:09:42 -070099)
100
101install(EXPORT TosaSerializationLibTargets
102 FILE TosaSerializationLibTargets.cmake
103 NAMESPACE tosa::
104 DESTINATION ${TOSA_SERIALIZATION_LIB_CMAKE_DIR}
Eric Kunze2364dcd2021-04-26 11:06:57 -0700105)