-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
147 lines (125 loc) · 4.69 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#TOSA serialization library
# Copyright (c) 2020-2024, 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 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
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
)
set(
PUBLIC_INCLUDE_DIRS
${CMAKE_CURRENT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/third_party/half/include
)
target_include_directories(
tosa_serialization_lib
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
PUBLIC
"$<BUILD_INTERFACE:${PUBLIC_INCLUDE_DIRS}>"
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
set(
PUBLIC_HEADERS
include/op.h
include/op.def
include/attribute.h
include/attribute.def
include/cfloat.h
include/numpy_utils.h
include/tosa_generated.h
include/tosa_serialization_handler.h
)
set_target_properties(
tosa_serialization_lib
PROPERTIES
PUBLIC_HEADER "${PUBLIC_HEADERS}"
INSTALL_RPATH "\$ORIGIN/../lib"
)
# If flatbuffers is built externally just link it
if (TARGET flatbuffers)
target_link_libraries(tosa_serialization_lib PRIVATE flatbuffers)
else()
# 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()
endif()
# 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
)
enable_testing()
add_subdirectory(test/gtests)
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 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tosa_serialization_lib
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(
EXPORT TosaSerializationLibTargets
FILE TosaSerializationLibTargets.cmake
NAMESPACE tosa::
DESTINATION ${TOSA_SERIALIZATION_LIB_CMAKE_DIR}
)
# Run the following script to generate tosa schema as a C/C++ header file
find_package(Python COMPONENTS Interpreter REQUIRED)
execute_process(
COMMAND ${Python_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/schema/convert_schema_to_header.py"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/schema"
)