aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt92
1 files changed, 67 insertions, 25 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index aaba60e..679603d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
#TOSA serialization library
-# Copyright (c) 2020-2021, ARM Limited.
+# Copyright (c) 2020-2023, ARM Limited.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -19,47 +19,89 @@
cmake_minimum_required(VERSION 3.13.4)
project(TosaSerialization)
-set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to")
-set(CMAKE_CXX_STANDARD_REQUIRED YES)
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_VERBOSE_MAKEFILE ON)
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
-include_directories(${PROJECT_SOURCE_DIR}/third_party/flatbuffers/include)
+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)
-# Turn off unnecessary flatbuffers targets
-set(FLATBUFFERS_BUILD_TESTS OFF)
-add_subdirectory(third_party/flatbuffers)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
-add_library(tosa_serialization_lib STATIC
+add_library(tosa_serialization_lib
src/tosa_serialization_handler.cpp
src/numpy_utils.cpp
)
-target_link_libraries(tosa_serialization_lib PRIVATE flatbuffers)
-
-add_executable(serialization_read_write
- test/src/serialization_read_write.cpp
+# 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()
+
+set(public_headers)
+list(APPEND public_headers
+ include/attribute.h
+ include/attribute.def
+ include/cfloat.h
+ include/numpy_utils.h
+ include/tosa_generated.h
+ include/tosa_serialization_handler.h
)
-target_link_libraries(serialization_read_write
- tosa_serialization_lib
-)
+set_target_properties(tosa_serialization_lib PROPERTIES PUBLIC_HEADER "${public_headers}")
-add_executable(serialization_npy_test
- test/src/serialization_npy_test.cpp
-)
+# 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
-)
+ target_link_libraries(serialization_npy_test
+ tosa_serialization_lib
+ )
+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
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ PUBLIC_HEADER
+ ARCHIVE
)
install(EXPORT TosaSerializationLibTargets