Eric Kunze | 89ff71d | 2024-01-10 00:23:43 +0000 | [diff] [blame] | 1 | cmake_minimum_required (VERSION 3.16) |
Eric Kunze | e5e2676 | 2020-10-13 16:11:07 -0700 | [diff] [blame] | 2 | |
Dmitrii Agibov | 2936f13 | 2024-01-02 15:41:01 +0000 | [diff] [blame] | 3 | # Copyright (c) 2020-2024, ARM Limited. |
Eric Kunze | e5e2676 | 2020-10-13 16:11:07 -0700 | [diff] [blame] | 4 | # |
| 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 Kunze | e5e2676 | 2020-10-13 16:11:07 -0700 | [diff] [blame] | 17 | project(tosa_reference_model LANGUAGES CXX) |
| 18 | |
| 19 | set(CMAKE_CXX_STANDARD 17) |
| 20 | set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 21 | |
| 22 | if(CMAKE_CXX_COMPILER_ID STREQUAL GNU) |
| 23 | set(CMAKE_CXX_FLAGS "-Wall -Wno-ignored-attributes -Wno-format-truncation") |
| 24 | else() |
| 25 | set(CMAKE_CXX_FLAGS "-Wall -Wno-ignored-attributes") |
| 26 | endif() |
| 27 | |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 28 | # 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. |
| 30 | if(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 Kunze | e5e2676 | 2020-10-13 16:11:07 -0700 | [diff] [blame] | 36 | |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 37 | if(NOT SERIALIZATION_LIB) |
| 38 | message(FATAL_ERROR "TOSA Serialization Library location was specified but not found at: ${SERIALIZATION_LIB_DIR}") |
| 39 | endif() |
| 40 | else() |
| 41 | # Build from third party directory if not found. |
| 42 | set(SERIALIZATION_LIB tosa_serialization_lib) |
| 43 | set(SERIALIZATION_DIR "../thirdparty/serialization_lib/") |
| 44 | endif() |
| 45 | |
James Ward | 8b39043 | 2022-08-12 20:48:56 +0100 | [diff] [blame] | 46 | # If Flatbuffers, Eigen, Half path isn't specified, set to thirdparty directory. |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 47 | if(NOT FLATBUFFERS_DIR) |
| 48 | set(FLATBUFFERS_DIR "../thirdparty/serialization_lib/third_party/flatbuffers/") |
| 49 | endif() |
| 50 | |
| 51 | if(NOT EIGEN_DIR) |
| 52 | set(EIGEN_DIR "../thirdparty/eigen/") |
| 53 | endif() |
| 54 | |
James Ward | 8b39043 | 2022-08-12 20:48:56 +0100 | [diff] [blame] | 55 | if(NOT HALF_DIR) |
| 56 | set(HALF_DIR "../thirdparty/serialization_lib/third_party/half") |
| 57 | endif() |
| 58 | |
Georgios Pinitas | 7021ef0 | 2023-08-22 08:25:57 +0100 | [diff] [blame] | 59 | if(NOT JSON_DIR) |
| 60 | set(JSON_DIR "../thirdparty/json") |
| 61 | endif() |
| 62 | |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 63 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) |
| 64 | |
| 65 | # Common sources required for TOSA Reference Model library, executable and unit tests |
| 66 | set(CXX_SOURCE |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 67 | src/func_debug.cc |
Georgios Pinitas | 41df428 | 2023-05-30 12:20:31 +0100 | [diff] [blame] | 68 | src/graph_node.cc |
| 69 | src/model_runner_impl.cc |
| 70 | src/model_runner.cc |
Georgios Pinitas | 41df428 | 2023-05-30 12:20:31 +0100 | [diff] [blame] | 71 | src/subgraph_traverser.cc |
| 72 | src/tensor.cc |
Jeremy Johnson | b20b0c9 | 2023-10-04 14:17:55 +0100 | [diff] [blame] | 73 | src/generate/generate_dot_product_states.cc |
| 74 | src/generate/generate_dot_product.cc |
Jeremy Johnson | d41feb7 | 2023-10-12 16:03:15 +0100 | [diff] [blame] | 75 | src/generate/generate_pseudo_random.cc |
Won Jeon | 64e4bfe | 2024-01-18 06:31:55 +0000 | [diff] [blame] | 76 | src/generate/generate_fixed_data.cc |
Jeremy Johnson | b20b0c9 | 2023-10-04 14:17:55 +0100 | [diff] [blame] | 77 | src/generate/generate_entry.cc |
| 78 | src/generate/generate_utils.cc |
Jeremy Johnson | 9a75838 | 2023-11-07 16:27:35 +0000 | [diff] [blame] | 79 | src/verify/verify_abs_error.cc |
Georgios Pinitas | 7021ef0 | 2023-08-22 08:25:57 +0100 | [diff] [blame] | 80 | src/verify/verify_dot_product.cc |
| 81 | src/verify/verify_entry.cc |
Jack Frankland | aafc850 | 2023-09-13 11:03:50 +0100 | [diff] [blame] | 82 | src/verify/verify_exact.cc |
Jack Frankland | 12ee1a7 | 2023-09-20 09:08:34 +0100 | [diff] [blame] | 83 | src/verify/verify_reduce_product.cc |
Jack Frankland | 62737b1 | 2023-09-13 15:47:48 +0100 | [diff] [blame] | 84 | src/verify/verify_ulp.cc |
Georgios Pinitas | 7021ef0 | 2023-08-22 08:25:57 +0100 | [diff] [blame] | 85 | src/verify/verify_utils.cc |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 86 | src/ops/op_factory.cc |
| 87 | src/ops/tensor_ops.cc |
| 88 | src/ops/activation_funcs.cc |
| 89 | src/ops/ewise_binary.cc |
| 90 | src/ops/ewise_unary.cc |
| 91 | src/ops/ewise_ternary.cc |
| 92 | src/ops/comparison.cc |
| 93 | src/ops/reduction.cc |
| 94 | src/ops/data_layout.cc |
| 95 | src/ops/scatter_gather.cc |
| 96 | src/ops/image.cc |
| 97 | src/ops/type_conversion.cc |
| 98 | src/ops/data_nodes.cc |
| 99 | src/ops/custom.cc |
| 100 | src/ops/control_flow.cc |
Tai Ly | 8690a08 | 2023-12-18 20:40:24 +0000 | [diff] [blame] | 101 | src/ops/shape.cc |
Eric Kunze | e5e2676 | 2020-10-13 16:11:07 -0700 | [diff] [blame] | 102 | ) |
| 103 | |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 104 | set(PUBLIC_INCLUDE_DIRS |
Eric Kunze | e5e2676 | 2020-10-13 16:11:07 -0700 | [diff] [blame] | 105 | $<INSTALL_INTERFACE:include> |
| 106 | $<BUILD_INTERFACE:${CMAKE_CURRENT_SRC_DIR}/include> |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 107 | ) |
| 108 | set(PRIVATE_INCLUDE_DIRS |
Eric Kunze | e5e2676 | 2020-10-13 16:11:07 -0700 | [diff] [blame] | 109 | ${CMAKE_CURRENT_SOURCE_DIR}/src |
| 110 | ${FLATBUFFERS_DIR}/include |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 111 | ${EIGEN_DIR} |
| 112 | ${EIGEN_DIR}/unsupported/ |
Kevin Cheng | 550ccc5 | 2021-03-03 11:21:43 -0800 | [diff] [blame] | 113 | ${SERIALIZATION_DIR}/include |
James Ward | 8b39043 | 2022-08-12 20:48:56 +0100 | [diff] [blame] | 114 | ${HALF_DIR}/include |
Georgios Pinitas | 7021ef0 | 2023-08-22 08:25:57 +0100 | [diff] [blame] | 115 | ${JSON_DIR}/single_include |
Eric Kunze | e5e2676 | 2020-10-13 16:11:07 -0700 | [diff] [blame] | 116 | ) |
| 117 | |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 118 | # Build TOSA Reference Model library |
| 119 | add_library(tosa_reference_model_lib STATIC ${CXX_SOURCE}) |
| 120 | |
| 121 | target_include_directories(tosa_reference_model_lib |
| 122 | PUBLIC |
| 123 | ${PUBLIC_INCLUDE_DIRS} |
| 124 | PRIVATE |
| 125 | ${PRIVATE_INCLUDE_DIRS} |
| 126 | ) |
| 127 | |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 128 | target_link_libraries(tosa_reference_model_lib |
Eric Kunze | e5e2676 | 2020-10-13 16:11:07 -0700 | [diff] [blame] | 129 | PRIVATE |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 130 | ${SERIALIZATION_LIB} |
Eric Kunze | e5e2676 | 2020-10-13 16:11:07 -0700 | [diff] [blame] | 131 | ) |
| 132 | |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 133 | set(PUBLIC_HEADERS) |
| 134 | list(APPEND PUBLIC_HEADERS |
Jerry Ge | 5637a86 | 2023-10-30 10:18:45 -0700 | [diff] [blame] | 135 | include/custom_op_interface.h |
| 136 | include/custom_registry.h |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 137 | include/debug_modes.def |
| 138 | include/debug_types.h |
Tai Ly | a4d748b | 2023-03-28 22:06:56 +0000 | [diff] [blame] | 139 | include/dtype.h |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 140 | include/func_config.h |
| 141 | include/func_debug.h |
Jeremy Johnson | b20b0c9 | 2023-10-04 14:17:55 +0100 | [diff] [blame] | 142 | include/generate.h |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 143 | include/graph_status.h |
| 144 | include/model_common.h |
| 145 | include/model_runner.h |
Georgios Pinitas | 7021ef0 | 2023-08-22 08:25:57 +0100 | [diff] [blame] | 146 | include/types.h |
Georgios Pinitas | 41df428 | 2023-05-30 12:20:31 +0100 | [diff] [blame] | 147 | include/verify.h |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 148 | include/version.h |
| 149 | ) |
| 150 | |
| 151 | set_target_properties(tosa_reference_model_lib PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADERS}") |
| 152 | |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 153 | # Build TOSA verification library |
| 154 | add_library(tosa_reference_verify_lib SHARED |
Jeremy Johnson | 9a75838 | 2023-11-07 16:27:35 +0000 | [diff] [blame] | 155 | src/verify/verify_abs_error.cc |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 156 | src/verify/verify_dot_product.cc |
| 157 | src/verify/verify_entry.cc |
Jack Frankland | aafc850 | 2023-09-13 11:03:50 +0100 | [diff] [blame] | 158 | src/verify/verify_exact.cc |
Jack Frankland | 12ee1a7 | 2023-09-20 09:08:34 +0100 | [diff] [blame] | 159 | src/verify/verify_reduce_product.cc |
Jack Frankland | 62737b1 | 2023-09-13 15:47:48 +0100 | [diff] [blame] | 160 | src/verify/verify_ulp.cc |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 161 | src/verify/verify_utils.cc |
| 162 | src/verify/verify_config.cc |
| 163 | src/func_debug.cc |
| 164 | ) |
| 165 | target_include_directories(tosa_reference_verify_lib |
| 166 | PUBLIC |
| 167 | ${PUBLIC_INCLUDE_DIRS} |
| 168 | PRIVATE |
| 169 | ${PRIVATE_INCLUDE_DIRS} |
| 170 | ) |
| 171 | |
Jeremy Johnson | b20b0c9 | 2023-10-04 14:17:55 +0100 | [diff] [blame] | 172 | # Build TOSA generator library |
| 173 | add_library(tosa_reference_generate_lib SHARED |
| 174 | src/generate/generate_dot_product_states.cc |
| 175 | src/generate/generate_dot_product.cc |
Jeremy Johnson | d41feb7 | 2023-10-12 16:03:15 +0100 | [diff] [blame] | 176 | src/generate/generate_pseudo_random.cc |
Won Jeon | 64e4bfe | 2024-01-18 06:31:55 +0000 | [diff] [blame] | 177 | src/generate/generate_fixed_data.cc |
Jeremy Johnson | b20b0c9 | 2023-10-04 14:17:55 +0100 | [diff] [blame] | 178 | src/generate/generate_entry.cc |
| 179 | src/generate/generate_utils.cc |
Jeremy Johnson | 65ba809 | 2023-10-09 16:31:13 +0100 | [diff] [blame] | 180 | src/generate/generate_config.cc |
Jeremy Johnson | b20b0c9 | 2023-10-04 14:17:55 +0100 | [diff] [blame] | 181 | src/func_debug.cc |
| 182 | ) |
| 183 | target_include_directories(tosa_reference_generate_lib |
| 184 | PUBLIC |
| 185 | ${PUBLIC_INCLUDE_DIRS} |
| 186 | PRIVATE |
| 187 | ${PRIVATE_INCLUDE_DIRS} |
| 188 | ) |
| 189 | |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 190 | # Build TOSA Refererence Model executable |
| 191 | if(BUILD_TOSA_REFERENCE_MODEL_EXECUTABLE) |
| 192 | set(CXX_SOURCE_EX src/main.cpp) |
| 193 | list(APPEND CXX_SOURCE_EX ${CXX_SOURCE}) |
| 194 | |
| 195 | add_executable(tosa_reference_model ${CXX_SOURCE_EX}) |
| 196 | |
| 197 | target_include_directories(tosa_reference_model |
| 198 | PUBLIC |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 199 | ${PUBLIC_INCLUDE_DIRS} |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 200 | PRIVATE |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 201 | ${PRIVATE_INCLUDE_DIRS} |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 202 | ) |
| 203 | |
| 204 | target_link_libraries(tosa_reference_model |
| 205 | PRIVATE |
| 206 | ${SERIALIZATION_LIB} |
| 207 | nlohmann_json::nlohmann_json |
| 208 | cxxopts |
Jerry Ge | 5637a86 | 2023-10-30 10:18:45 -0700 | [diff] [blame] | 209 | ${CMAKE_DL_LIBS} |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 210 | ) |
| 211 | |
| 212 | install(TARGETS tosa_reference_model DESTINATION bin) |
| 213 | endif() |
| 214 | |
| 215 | if(BUILD_TOSA_REFERENCE_MODEL_TESTS) |
| 216 | # Set definition so unit tests can find examples directory. |
| 217 | add_definitions(-DPROJECT_ROOT=\"${CMAKE_CURRENT_SOURCE_DIR}/\") |
| 218 | |
| 219 | # Set doctest location if not specified. |
| 220 | if(NOT DOCTEST_DIR) |
| 221 | set(DOCTEST_DIR "../thirdparty/doctest/doctest") |
| 222 | endif() |
| 223 | |
| 224 | # Sources only required for unit tests. |
| 225 | set(CXX_SOURCE_TESTS |
Jeremy Johnson | b20b0c9 | 2023-10-04 14:17:55 +0100 | [diff] [blame] | 226 | test/generate_tests.cpp |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 227 | test/model_runner_tests.cpp |
Georgios Pinitas | 41df428 | 2023-05-30 12:20:31 +0100 | [diff] [blame] | 228 | test/verify_tests.cpp |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 229 | ${DOCTEST_DIR}/doctest.h |
| 230 | ) |
| 231 | |
| 232 | list(APPEND CXX_SOURCE_TESTS ${CXX_SOURCE}) |
| 233 | |
| 234 | add_executable(unit_tests ${CXX_SOURCE_TESTS}) |
| 235 | |
| 236 | target_include_directories(unit_tests |
| 237 | PUBLIC |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 238 | ${PUBLIC_INCLUDE_DIRS} |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 239 | PRIVATE |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 240 | ${PRIVATE_INCLUDE_DIRS} |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 241 | ${DOCTEST_DIR} |
| 242 | ) |
| 243 | |
| 244 | target_link_libraries(unit_tests |
| 245 | PRIVATE |
| 246 | ${SERIALIZATION_LIB} |
| 247 | ) |
| 248 | endif() |
| 249 | |
| 250 | if(BUILD_MODEL_RUNNER_SAMPLE) |
| 251 | # Set definition so sample executable can find examples directory. |
| 252 | add_definitions(-DPROJECT_ROOT=\"${CMAKE_CURRENT_SOURCE_DIR}/\") |
| 253 | |
| 254 | # Sources only required for example executable. |
| 255 | set(CXX_SOURCE_SAMPLE |
| 256 | samples/model_runner_simple_sample.cpp |
| 257 | ) |
| 258 | |
| 259 | list(APPEND CXX_SOURCE_SAMPLE ${CXX_SOURCE}) |
| 260 | |
| 261 | add_executable(model_runner_sample ${CXX_SOURCE_SAMPLE}) |
| 262 | |
| 263 | target_include_directories(model_runner_sample |
| 264 | PUBLIC |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 265 | ${PUBLIC_INCLUDE_DIRS} |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 266 | PRIVATE |
Jeremy Johnson | 48df8c7 | 2023-09-12 14:52:34 +0100 | [diff] [blame] | 267 | ${PRIVATE_INCLUDE_DIRS} |
Matthew Sloyan | ba5fad3 | 2022-09-26 13:31:43 +0100 | [diff] [blame] | 268 | ) |
| 269 | |
| 270 | target_link_libraries(model_runner_sample |
| 271 | PRIVATE |
| 272 | ${SERIALIZATION_LIB} |
| 273 | ) |
| 274 | endif() |
| 275 | |
| 276 | # Follow GNU packaging norms for installation directory structure. |
| 277 | include(GNUInstallDirs) |
| 278 | install( |
| 279 | TARGETS tosa_reference_model_lib EXPORT TosaReferenceModelLibTargets |
| 280 | PUBLIC_HEADER |
| 281 | ARCHIVE |
| 282 | ) |
| 283 | |
| 284 | install(EXPORT TosaReferenceModelLibTargets |
| 285 | FILE TosaReferenceModelLibTargets.cmake |
| 286 | NAMESPACE TosaReference:: |
| 287 | DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tosa_reference_model_lib" |
Jack Frankland | aafc850 | 2023-09-13 11:03:50 +0100 | [diff] [blame] | 288 | ) |