blob: ac34b758dd39b487ac7b79daa25b7fa215ebca12 [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
Davide Grohmannaac87832023-11-07 09:47:55 +010039# If flatbuffers is built externally just link it
40if (TARGET flatbuffers)
41 target_link_libraries(tosa_serialization_lib PRIVATE flatbuffers)
Colm Donelan2a3ca932022-08-25 16:00:19 +010042else()
Davide Grohmannaac87832023-11-07 09:47:55 +010043 # Verify we have a valid flatbuffers include path.
44 # We will explicitly exclude the system include directories and only
45 # accept either a user supplied value or the local third_party/flatbuffers.
46 find_path(FLATBUFFERS_INCLUDE_PATH flatbuffers/flatbuffers.h
47 NO_DEFAULT_PATH
48 HINTS ${FLATBUFFERS_ROOT} ./third_party/flatbuffers
49 PATH_SUFFIXES include)
50 message(STATUS "Flatbuffers include located at: ${FLATBUFFERS_INCLUDE_PATH}")
51 include_directories(${FLATBUFFERS_INCLUDE_PATH})
52
53 # Next is the library.
54 # We will explicitly exclude the system lib directories and only accept
55 # either a user supplied value or the local third_party/flatbuffers.
56 find_library(FLATBUFFERS_LIBRARY
57 NAMES libflatbuffers.a flatbuffers
58 NO_DEFAULT_PATH
59 HINTS ${FLATBUFFERS_ROOT} ./third_party/flatbuffers
60 PATH_SUFFIXES lib)
61
62 if(FLATBUFFERS_LIBRARY)
63 message(STATUS "Flatbuffers library located at: ${FLATBUFFERS_LIBRARY}")
64 target_link_libraries(tosa_serialization_lib PRIVATE ${FLATBUFFERS_LIBRARY})
65 else()
66 # It's not there we treat third_party/flatbuffers as a sub project.
67 # In this case we'll need to build the downloaded source.
68 # Turn off unnecessary flatbuffers targets
69 set(FLATBUFFERS_BUILD_TESTS OFF)
70 add_subdirectory(third_party/flatbuffers)
71 target_link_libraries(tosa_serialization_lib PRIVATE flatbuffers)
72 endif()
Colm Donelan2a3ca932022-08-25 16:00:19 +010073endif()
74
75set(public_headers)
76list(APPEND public_headers
77 include/attribute.h
78 include/attribute.def
79 include/numpy_utils.h
80 include/tosa_generated.h
81 include/tosa_serialization_handler.h
Eric Kunze2364dcd2021-04-26 11:06:57 -070082)
83
Colm Donelan2a3ca932022-08-25 16:00:19 +010084set_target_properties(tosa_serialization_lib PROPERTIES PUBLIC_HEADER "${public_headers}")
Eric Kunze2364dcd2021-04-26 11:06:57 -070085
Colm Donelan2a3ca932022-08-25 16:00:19 +010086# Optionally build test executables.
87if (BUILD_TESTS)
Colm Donelan2a3ca932022-08-25 16:00:19 +010088 add_executable(serialization_npy_test
89 test/src/serialization_npy_test.cpp
90 )
91
92 target_link_libraries(serialization_npy_test
93 tosa_serialization_lib
94 )
95endif()
Kevin Cheng87de41f2021-11-03 22:09:42 -070096
97set(TOSA_SERIALIZATION_LIB_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/tosa_serialization_lib")
Colm Donelan2a3ca932022-08-25 16:00:19 +010098# Follow GNU packaging norms for installation directory structure.
99include(GNUInstallDirs)
Kevin Cheng87de41f2021-11-03 22:09:42 -0700100install(
101 TARGETS tosa_serialization_lib EXPORT TosaSerializationLibTargets
Colm Donelan2a3ca932022-08-25 16:00:19 +0100102 PUBLIC_HEADER
103 ARCHIVE
Kevin Cheng87de41f2021-11-03 22:09:42 -0700104)
105
106install(EXPORT TosaSerializationLibTargets
107 FILE TosaSerializationLibTargets.cmake
108 NAMESPACE tosa::
109 DESTINATION ${TOSA_SERIALIZATION_LIB_CMAKE_DIR}
Eric Kunze2364dcd2021-04-26 11:06:57 -0700110)