blob: 5f4f8518ab9b32bc7750a29c9706552ffe38e090 [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
Tai Lyce911a22024-03-21 17:01:14 +000022set(CMAKE_CXX_STANDARD 17)
23set(CMAKE_CXX_STANDARD_REQUIRED ON)
Eric Kunze2364dcd2021-04-26 11:06:57 -070024
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
Tai Lyce911a22024-03-21 17:01:14 +000079 include/float_utils.h
Colm Donelan2a3ca932022-08-25 16:00:19 +010080 include/numpy_utils.h
81 include/tosa_generated.h
82 include/tosa_serialization_handler.h
Eric Kunze2364dcd2021-04-26 11:06:57 -070083)
84
Colm Donelan2a3ca932022-08-25 16:00:19 +010085set_target_properties(tosa_serialization_lib PROPERTIES PUBLIC_HEADER "${public_headers}")
Eric Kunze2364dcd2021-04-26 11:06:57 -070086
Colm Donelan2a3ca932022-08-25 16:00:19 +010087# Optionally build test executables.
88if (BUILD_TESTS)
Colm Donelan2a3ca932022-08-25 16:00:19 +010089 add_executable(serialization_npy_test
90 test/src/serialization_npy_test.cpp
91 )
92
93 target_link_libraries(serialization_npy_test
94 tosa_serialization_lib
95 )
96endif()
Kevin Cheng87de41f2021-11-03 22:09:42 -070097
98set(TOSA_SERIALIZATION_LIB_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/tosa_serialization_lib")
Colm Donelan2a3ca932022-08-25 16:00:19 +010099# Follow GNU packaging norms for installation directory structure.
100include(GNUInstallDirs)
Kevin Cheng87de41f2021-11-03 22:09:42 -0700101install(
102 TARGETS tosa_serialization_lib EXPORT TosaSerializationLibTargets
Colm Donelan2a3ca932022-08-25 16:00:19 +0100103 PUBLIC_HEADER
104 ARCHIVE
Kevin Cheng87de41f2021-11-03 22:09:42 -0700105)
106
107install(EXPORT TosaSerializationLibTargets
108 FILE TosaSerializationLibTargets.cmake
109 NAMESPACE tosa::
110 DESTINATION ${TOSA_SERIALIZATION_LIB_CMAKE_DIR}
Eric Kunze2364dcd2021-04-26 11:06:57 -0700111)