aboutsummaryrefslogtreecommitdiff
path: root/reference_model/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'reference_model/CMakeLists.txt')
-rw-r--r--reference_model/CMakeLists.txt221
1 files changed, 185 insertions, 36 deletions
diff --git a/reference_model/CMakeLists.txt b/reference_model/CMakeLists.txt
index 6fdaa1c..a790968 100644
--- a/reference_model/CMakeLists.txt
+++ b/reference_model/CMakeLists.txt
@@ -1,6 +1,6 @@
cmake_minimum_required (VERSION 3.4)
-# Copyright (c) 2020, ARM Limited.
+# Copyright (c) 2020-2022, ARM Limited.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -14,7 +14,6 @@ cmake_minimum_required (VERSION 3.4)
# See the License for the specific language governing permissions and
# limitations under the License.
-
project(tosa_reference_model LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
@@ -26,52 +25,202 @@ else()
set(CMAKE_CXX_FLAGS "-Wall -Wno-ignored-attributes")
endif()
-set(FLATBUFFERS_DIR "../thirdparty/serialization_lib/third_party/flatbuffers/")
-set(SERIALIZATION_DIR "../thirdparty/serialization_lib/")
-
-set (CXX_SOURCE
- src/main.cpp
- src/tensor.cc
- src/graph_node.cc
- src/subgraph_traverser.cc
- src/func_debug.cc
- src/func_config.cc
- src/ops/op_factory.cc
- src/ops/tensor_ops.cc
- src/ops/activation_funcs.cc
- src/ops/ewise_binary.cc
- src/ops/ewise_unary.cc
- src/ops/ewise_ternary.cc
- src/ops/comparison.cc
- src/ops/reduction.cc
- src/ops/data_layout.cc
- src/ops/scatter_gather.cc
- src/ops/image.cc
- src/ops/type_conversion.cc
- src/ops/data_nodes.cc
- src/ops/custom.cc
- src/ops/control_flow.cc
+# If Serialization Library path is specified, look for library so it doesn't have to be built again.
+# Otherwise, set the Serialization Library related paths to thirdparty directory.
+if(SERIALIZATION_DIR)
+ find_library(SERIALIZATION_LIB
+ NAMES libtosa_serialization_lib.a tosa_serialization_lib
+ NO_DEFAULT_PATH
+ HINTS ${SERIALIZATION_DIR}
+ PATH_SUFFIXES lib)
+
+ if(NOT SERIALIZATION_LIB)
+ message(FATAL_ERROR "TOSA Serialization Library location was specified but not found at: ${SERIALIZATION_LIB_DIR}")
+ endif()
+else()
+ # Build from third party directory if not found.
+ set(SERIALIZATION_LIB tosa_serialization_lib)
+ set(SERIALIZATION_DIR "../thirdparty/serialization_lib/")
+endif()
+
+# If Flatbuffers or Eigen path isn't specified, set to thirdparty directory.
+if(NOT FLATBUFFERS_DIR)
+ set(FLATBUFFERS_DIR "../thirdparty/serialization_lib/third_party/flatbuffers/")
+endif()
+
+if(NOT EIGEN_DIR)
+ set(EIGEN_DIR "../thirdparty/eigen/")
+endif()
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+# Common sources required for TOSA Reference Model library, executable and unit tests
+set(CXX_SOURCE
+ src/model_runner.cc
+ src/model_runner_impl.cc
+ src/tensor.cc
+ src/graph_node.cc
+ src/subgraph_traverser.cc
+ src/func_debug.cc
+ src/ops/op_factory.cc
+ src/ops/tensor_ops.cc
+ src/ops/activation_funcs.cc
+ src/ops/ewise_binary.cc
+ src/ops/ewise_unary.cc
+ src/ops/ewise_ternary.cc
+ src/ops/comparison.cc
+ src/ops/reduction.cc
+ src/ops/data_layout.cc
+ src/ops/scatter_gather.cc
+ src/ops/image.cc
+ src/ops/type_conversion.cc
+ src/ops/data_nodes.cc
+ src/ops/custom.cc
+ src/ops/control_flow.cc
)
-add_executable(tosa_reference_model ${CXX_SOURCE})
+# Build TOSA Reference Model library
+add_library(tosa_reference_model_lib ${CXX_SOURCE})
-target_include_directories(tosa_reference_model
+target_include_directories(tosa_reference_model_lib
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SRC_DIR}/include>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${FLATBUFFERS_DIR}/include
- ../thirdparty/eigen/
- ../thirdparty/eigen/unsupported/
+ ${EIGEN_DIR}
+ ${EIGEN_DIR}/unsupported/
${SERIALIZATION_DIR}/include
)
-target_link_libraries(tosa_reference_model
+target_link_libraries(tosa_reference_model_lib
PRIVATE
- tosa_serialization_lib
- nlohmann_json::nlohmann_json
- cxxopts
+ ${SERIALIZATION_LIB}
+)
+
+set(PUBLIC_HEADERS)
+list(APPEND PUBLIC_HEADERS
+ include/debug_modes.def
+ include/debug_types.h
+ include/func_config.h
+ include/func_debug.h
+ include/graph_status.h
+ include/model_common.h
+ include/model_runner.h
+ include/version.h
+)
+
+set_target_properties(tosa_reference_model_lib PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADERS}")
+
+# Build TOSA Refererence Model executable
+if(BUILD_TOSA_REFERENCE_MODEL_EXECUTABLE)
+ set(CXX_SOURCE_EX src/main.cpp)
+ list(APPEND CXX_SOURCE_EX ${CXX_SOURCE})
+
+ add_executable(tosa_reference_model ${CXX_SOURCE_EX})
+
+ target_include_directories(tosa_reference_model
+ PUBLIC
+ $<INSTALL_INTERFACE:include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SRC_DIR}/include>
+ PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${FLATBUFFERS_DIR}/include
+ ${EIGEN_DIR}
+ ${EIGEN_DIR}/unsupported/
+ ${SERIALIZATION_DIR}/include
+ )
+
+ target_link_libraries(tosa_reference_model
+ PRIVATE
+ ${SERIALIZATION_LIB}
+ nlohmann_json::nlohmann_json
+ cxxopts
+ )
+
+ install(TARGETS tosa_reference_model DESTINATION bin)
+endif()
+
+if(BUILD_TOSA_REFERENCE_MODEL_TESTS)
+ # Set definition so unit tests can find examples directory.
+ add_definitions(-DPROJECT_ROOT=\"${CMAKE_CURRENT_SOURCE_DIR}/\")
+
+ # Set doctest location if not specified.
+ if(NOT DOCTEST_DIR)
+ set(DOCTEST_DIR "../thirdparty/doctest/doctest")
+ endif()
+
+ # Sources only required for unit tests.
+ set(CXX_SOURCE_TESTS
+ test/model_runner_tests.cpp
+ ${DOCTEST_DIR}/doctest.h
+ )
+
+ list(APPEND CXX_SOURCE_TESTS ${CXX_SOURCE})
+
+ add_executable(unit_tests ${CXX_SOURCE_TESTS})
+
+ target_include_directories(unit_tests
+ PUBLIC
+ $<INSTALL_INTERFACE:include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SRC_DIR}/include>
+ PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${FLATBUFFERS_DIR}/include
+ ${EIGEN_DIR}
+ ${EIGEN_DIR}/unsupported/
+ ${SERIALIZATION_DIR}/include
+ ${DOCTEST_DIR}
+ )
+
+ target_link_libraries(unit_tests
+ PRIVATE
+ ${SERIALIZATION_LIB}
+ )
+endif()
+
+if(BUILD_MODEL_RUNNER_SAMPLE)
+ # Set definition so sample executable can find examples directory.
+ add_definitions(-DPROJECT_ROOT=\"${CMAKE_CURRENT_SOURCE_DIR}/\")
+
+ # Sources only required for example executable.
+ set(CXX_SOURCE_SAMPLE
+ samples/model_runner_simple_sample.cpp
+ )
+
+ list(APPEND CXX_SOURCE_SAMPLE ${CXX_SOURCE})
+
+ add_executable(model_runner_sample ${CXX_SOURCE_SAMPLE})
+
+ target_include_directories(model_runner_sample
+ PUBLIC
+ $<INSTALL_INTERFACE:include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SRC_DIR}/include>
+ PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${FLATBUFFERS_DIR}/include
+ ${EIGEN_DIR}
+ ${EIGEN_DIR}/unsupported/
+ ${SERIALIZATION_DIR}/include
+ )
+
+ target_link_libraries(model_runner_sample
+ PRIVATE
+ ${SERIALIZATION_LIB}
+ )
+endif()
+
+# Follow GNU packaging norms for installation directory structure.
+include(GNUInstallDirs)
+install(
+ TARGETS tosa_reference_model_lib EXPORT TosaReferenceModelLibTargets
+ PUBLIC_HEADER
+ ARCHIVE
)
-install (TARGETS tosa_reference_model DESTINATION bin)
+install(EXPORT TosaReferenceModelLibTargets
+ FILE TosaReferenceModelLibTargets.cmake
+ NAMESPACE TosaReference::
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tosa_reference_model_lib"
+) \ No newline at end of file