blob: b7807819af912ac847608c9786e800b1f1453c94 [file] [log] [blame]
Eric Kunze89ff71d2024-01-10 00:23:43 +00001cmake_minimum_required (VERSION 3.16)
Eric Kunzee5e26762020-10-13 16:11:07 -07002
Dmitrii Agibov2936f132024-01-02 15:41:01 +00003# Copyright (c) 2020-2024, ARM Limited.
Eric Kunzee5e26762020-10-13 16:11:07 -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
Eric Kunzee5e26762020-10-13 16:11:07 -070017project(tosa_reference_model LANGUAGES CXX)
18
19set(CMAKE_CXX_STANDARD 17)
20set(CMAKE_CXX_STANDARD_REQUIRED ON)
21
22if(CMAKE_CXX_COMPILER_ID STREQUAL GNU)
23 set(CMAKE_CXX_FLAGS "-Wall -Wno-ignored-attributes -Wno-format-truncation")
24else()
25 set(CMAKE_CXX_FLAGS "-Wall -Wno-ignored-attributes")
26endif()
27
Matthew Sloyanba5fad32022-09-26 13:31:43 +010028# If Serialization Library path is specified, look for library so it doesn't have to be built again.
29# Otherwise, set the Serialization Library related paths to thirdparty directory.
30if(SERIALIZATION_DIR)
31 find_library(SERIALIZATION_LIB
32 NAMES libtosa_serialization_lib.a tosa_serialization_lib
33 NO_DEFAULT_PATH
34 HINTS ${SERIALIZATION_DIR}
35 PATH_SUFFIXES lib)
Eric Kunzee5e26762020-10-13 16:11:07 -070036
Matthew Sloyanba5fad32022-09-26 13:31:43 +010037 if(NOT SERIALIZATION_LIB)
38 message(FATAL_ERROR "TOSA Serialization Library location was specified but not found at: ${SERIALIZATION_LIB_DIR}")
39 endif()
40else()
41 # Build from third party directory if not found.
42 set(SERIALIZATION_LIB tosa_serialization_lib)
43 set(SERIALIZATION_DIR "../thirdparty/serialization_lib/")
44endif()
45
James Ward8b390432022-08-12 20:48:56 +010046# If Flatbuffers, Eigen, Half path isn't specified, set to thirdparty directory.
Matthew Sloyanba5fad32022-09-26 13:31:43 +010047if(NOT FLATBUFFERS_DIR)
48 set(FLATBUFFERS_DIR "../thirdparty/serialization_lib/third_party/flatbuffers/")
49endif()
50
51if(NOT EIGEN_DIR)
52 set(EIGEN_DIR "../thirdparty/eigen/")
53endif()
54
James Ward8b390432022-08-12 20:48:56 +010055if(NOT HALF_DIR)
56 set(HALF_DIR "../thirdparty/serialization_lib/third_party/half")
57endif()
58
Georgios Pinitas7021ef02023-08-22 08:25:57 +010059if(NOT JSON_DIR)
60 set(JSON_DIR "../thirdparty/json")
61endif()
62
Matthew Sloyanba5fad32022-09-26 13:31:43 +010063include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
64
65# Common sources required for TOSA Reference Model library, executable and unit tests
66set(CXX_SOURCE
Matthew Sloyanba5fad32022-09-26 13:31:43 +010067 src/func_debug.cc
Georgios Pinitas41df4282023-05-30 12:20:31 +010068 src/graph_node.cc
69 src/model_runner_impl.cc
70 src/model_runner.cc
Georgios Pinitas41df4282023-05-30 12:20:31 +010071 src/subgraph_traverser.cc
72 src/tensor.cc
Jeremy Johnsonb20b0c92023-10-04 14:17:55 +010073 src/generate/generate_dot_product_states.cc
74 src/generate/generate_dot_product.cc
Jeremy Johnsond41feb72023-10-12 16:03:15 +010075 src/generate/generate_pseudo_random.cc
Won Jeon64e4bfe2024-01-18 06:31:55 +000076 src/generate/generate_fixed_data.cc
evacha019c96eef2024-02-07 11:21:55 +000077 src/generate/generate_full_range.cc
Jeremy Johnsonb20b0c92023-10-04 14:17:55 +010078 src/generate/generate_entry.cc
79 src/generate/generate_utils.cc
Jeremy Johnson9a758382023-11-07 16:27:35 +000080 src/verify/verify_abs_error.cc
Georgios Pinitas7021ef02023-08-22 08:25:57 +010081 src/verify/verify_dot_product.cc
82 src/verify/verify_entry.cc
Jack Franklandaafc8502023-09-13 11:03:50 +010083 src/verify/verify_exact.cc
Jack Frankland12ee1a72023-09-20 09:08:34 +010084 src/verify/verify_reduce_product.cc
Jeremy Johnson32d0b5a2024-02-01 15:54:07 +000085 src/verify/verify_relative.cc
Jack Frankland62737b12023-09-13 15:47:48 +010086 src/verify/verify_ulp.cc
Georgios Pinitas7021ef02023-08-22 08:25:57 +010087 src/verify/verify_utils.cc
Matthew Sloyanba5fad32022-09-26 13:31:43 +010088 src/ops/op_factory.cc
89 src/ops/tensor_ops.cc
90 src/ops/activation_funcs.cc
91 src/ops/ewise_binary.cc
92 src/ops/ewise_unary.cc
93 src/ops/ewise_ternary.cc
94 src/ops/comparison.cc
95 src/ops/reduction.cc
96 src/ops/data_layout.cc
97 src/ops/scatter_gather.cc
98 src/ops/image.cc
99 src/ops/type_conversion.cc
100 src/ops/data_nodes.cc
101 src/ops/custom.cc
102 src/ops/control_flow.cc
Tai Ly8690a082023-12-18 20:40:24 +0000103 src/ops/shape.cc
Eric Kunzee5e26762020-10-13 16:11:07 -0700104)
105
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100106set(PUBLIC_INCLUDE_DIRS
Eric Kunzee5e26762020-10-13 16:11:07 -0700107 $<INSTALL_INTERFACE:include>
108 $<BUILD_INTERFACE:${CMAKE_CURRENT_SRC_DIR}/include>
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100109)
110set(PRIVATE_INCLUDE_DIRS
Eric Kunzee5e26762020-10-13 16:11:07 -0700111 ${CMAKE_CURRENT_SOURCE_DIR}/src
112 ${FLATBUFFERS_DIR}/include
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100113 ${EIGEN_DIR}
114 ${EIGEN_DIR}/unsupported/
Kevin Cheng550ccc52021-03-03 11:21:43 -0800115 ${SERIALIZATION_DIR}/include
James Ward8b390432022-08-12 20:48:56 +0100116 ${HALF_DIR}/include
Georgios Pinitas7021ef02023-08-22 08:25:57 +0100117 ${JSON_DIR}/single_include
Eric Kunzee5e26762020-10-13 16:11:07 -0700118)
119
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100120# Build TOSA Reference Model library
121add_library(tosa_reference_model_lib STATIC ${CXX_SOURCE})
122
123target_include_directories(tosa_reference_model_lib
124 PUBLIC
125 ${PUBLIC_INCLUDE_DIRS}
126 PRIVATE
127 ${PRIVATE_INCLUDE_DIRS}
128)
129
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100130target_link_libraries(tosa_reference_model_lib
Eric Kunzee5e26762020-10-13 16:11:07 -0700131 PRIVATE
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100132 ${SERIALIZATION_LIB}
Eric Kunzee5e26762020-10-13 16:11:07 -0700133)
134
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100135set(PUBLIC_HEADERS)
136list(APPEND PUBLIC_HEADERS
Jerry Ge5637a862023-10-30 10:18:45 -0700137 include/custom_op_interface.h
138 include/custom_registry.h
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100139 include/debug_modes.def
140 include/debug_types.h
Tai Lya4d748b2023-03-28 22:06:56 +0000141 include/dtype.h
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100142 include/func_config.h
143 include/func_debug.h
Jeremy Johnsonb20b0c92023-10-04 14:17:55 +0100144 include/generate.h
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100145 include/graph_status.h
146 include/model_common.h
147 include/model_runner.h
Georgios Pinitas7021ef02023-08-22 08:25:57 +0100148 include/types.h
Georgios Pinitas41df4282023-05-30 12:20:31 +0100149 include/verify.h
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100150 include/version.h
151)
152
153set_target_properties(tosa_reference_model_lib PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADERS}")
154
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100155# Build TOSA verification library
156add_library(tosa_reference_verify_lib SHARED
Jeremy Johnson9a758382023-11-07 16:27:35 +0000157 src/verify/verify_abs_error.cc
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100158 src/verify/verify_dot_product.cc
159 src/verify/verify_entry.cc
Jack Franklandaafc8502023-09-13 11:03:50 +0100160 src/verify/verify_exact.cc
Jack Frankland12ee1a72023-09-20 09:08:34 +0100161 src/verify/verify_reduce_product.cc
Jeremy Johnson32d0b5a2024-02-01 15:54:07 +0000162 src/verify/verify_relative.cc
Jack Frankland62737b12023-09-13 15:47:48 +0100163 src/verify/verify_ulp.cc
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100164 src/verify/verify_utils.cc
165 src/verify/verify_config.cc
166 src/func_debug.cc
167)
168target_include_directories(tosa_reference_verify_lib
169 PUBLIC
170 ${PUBLIC_INCLUDE_DIRS}
171 PRIVATE
172 ${PRIVATE_INCLUDE_DIRS}
173)
174
Jeremy Johnsonb20b0c92023-10-04 14:17:55 +0100175# Build TOSA generator library
176add_library(tosa_reference_generate_lib SHARED
177 src/generate/generate_dot_product_states.cc
178 src/generate/generate_dot_product.cc
Jeremy Johnsond41feb72023-10-12 16:03:15 +0100179 src/generate/generate_pseudo_random.cc
Won Jeon64e4bfe2024-01-18 06:31:55 +0000180 src/generate/generate_fixed_data.cc
evacha019c96eef2024-02-07 11:21:55 +0000181 src/generate/generate_full_range.cc
Jeremy Johnsonb20b0c92023-10-04 14:17:55 +0100182 src/generate/generate_entry.cc
183 src/generate/generate_utils.cc
Jeremy Johnson65ba8092023-10-09 16:31:13 +0100184 src/generate/generate_config.cc
Jeremy Johnsonb20b0c92023-10-04 14:17:55 +0100185 src/func_debug.cc
186)
187target_include_directories(tosa_reference_generate_lib
188 PUBLIC
189 ${PUBLIC_INCLUDE_DIRS}
190 PRIVATE
191 ${PRIVATE_INCLUDE_DIRS}
192)
193
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100194# Build TOSA Refererence Model executable
195if(BUILD_TOSA_REFERENCE_MODEL_EXECUTABLE)
196 set(CXX_SOURCE_EX src/main.cpp)
197 list(APPEND CXX_SOURCE_EX ${CXX_SOURCE})
198
199 add_executable(tosa_reference_model ${CXX_SOURCE_EX})
200
201 target_include_directories(tosa_reference_model
202 PUBLIC
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100203 ${PUBLIC_INCLUDE_DIRS}
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100204 PRIVATE
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100205 ${PRIVATE_INCLUDE_DIRS}
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100206 )
207
208 target_link_libraries(tosa_reference_model
209 PRIVATE
210 ${SERIALIZATION_LIB}
211 nlohmann_json::nlohmann_json
212 cxxopts
Jerry Ge5637a862023-10-30 10:18:45 -0700213 ${CMAKE_DL_LIBS}
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100214 )
215
216 install(TARGETS tosa_reference_model DESTINATION bin)
217endif()
218
219if(BUILD_TOSA_REFERENCE_MODEL_TESTS)
220 # Set definition so unit tests can find examples directory.
221 add_definitions(-DPROJECT_ROOT=\"${CMAKE_CURRENT_SOURCE_DIR}/\")
222
223 # Set doctest location if not specified.
224 if(NOT DOCTEST_DIR)
225 set(DOCTEST_DIR "../thirdparty/doctest/doctest")
226 endif()
227
228 # Sources only required for unit tests.
229 set(CXX_SOURCE_TESTS
Jeremy Johnsonb20b0c92023-10-04 14:17:55 +0100230 test/generate_tests.cpp
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100231 test/model_runner_tests.cpp
Georgios Pinitas41df4282023-05-30 12:20:31 +0100232 test/verify_tests.cpp
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100233 ${DOCTEST_DIR}/doctest.h
234 )
235
236 list(APPEND CXX_SOURCE_TESTS ${CXX_SOURCE})
237
238 add_executable(unit_tests ${CXX_SOURCE_TESTS})
239
240 target_include_directories(unit_tests
241 PUBLIC
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100242 ${PUBLIC_INCLUDE_DIRS}
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100243 PRIVATE
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100244 ${PRIVATE_INCLUDE_DIRS}
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100245 ${DOCTEST_DIR}
246 )
247
248 target_link_libraries(unit_tests
249 PRIVATE
250 ${SERIALIZATION_LIB}
251 )
252endif()
253
254if(BUILD_MODEL_RUNNER_SAMPLE)
255 # Set definition so sample executable can find examples directory.
256 add_definitions(-DPROJECT_ROOT=\"${CMAKE_CURRENT_SOURCE_DIR}/\")
257
258 # Sources only required for example executable.
259 set(CXX_SOURCE_SAMPLE
260 samples/model_runner_simple_sample.cpp
261 )
262
263 list(APPEND CXX_SOURCE_SAMPLE ${CXX_SOURCE})
264
265 add_executable(model_runner_sample ${CXX_SOURCE_SAMPLE})
266
267 target_include_directories(model_runner_sample
268 PUBLIC
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100269 ${PUBLIC_INCLUDE_DIRS}
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100270 PRIVATE
Jeremy Johnson48df8c72023-09-12 14:52:34 +0100271 ${PRIVATE_INCLUDE_DIRS}
Matthew Sloyanba5fad32022-09-26 13:31:43 +0100272 )
273
274 target_link_libraries(model_runner_sample
275 PRIVATE
276 ${SERIALIZATION_LIB}
277 )
278endif()
279
280# Follow GNU packaging norms for installation directory structure.
281include(GNUInstallDirs)
282install(
283 TARGETS tosa_reference_model_lib EXPORT TosaReferenceModelLibTargets
284 PUBLIC_HEADER
285 ARCHIVE
286)
287
288install(EXPORT TosaReferenceModelLibTargets
289 FILE TosaReferenceModelLibTargets.cmake
290 NAMESPACE TosaReference::
291 DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tosa_reference_model_lib"
Jack Franklandaafc8502023-09-13 11:03:50 +0100292)