aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColm Donelan <colm.donelan@arm.com>2022-08-25 16:00:19 +0100
committerColm Donelan <colm.donelan@arm.com>2022-08-25 16:00:19 +0100
commit2a3ca9398b7777caca3f28cf5e63a768d857489b (patch)
tree8321ce3430d630d99a15b50b5c894b28e2d33c47
parent49b1ca63975d4f1865ca312ed9c9b5e0008e13e0 (diff)
downloadserialization_lib-2a3ca9398b7777caca3f28cf5e63a768d857489b.tar.gz
Modify CMakeLists to ease integration with Arm NN.
* Add option to disable building test executables. * Add option to specify an external source of Flatbuffers library. * Allow third_party/flatbuffers to contain either source or prebuilt package. * Remove default STATIC and rely on cmake's BUILD_SHARED_LIBS. * Add PUBLIC_HEADERS to install target. * Specify use of GNU installation directory norms. Signed-off-by: Colm Donelan <colm.donelan@arm.com> Change-Id: I780c3345b9e55ec7928b917648174c33fe29e7fb
-rw-r--r--CMakeLists.txt88
1 files changed, 65 insertions, 23 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index aaba60e..87e0825 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
#TOSA serialization library
-# Copyright (c) 2020-2021, 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.
@@ -24,42 +24,84 @@ set(CMAKE_CXX_STANDARD_REQUIRED YES)
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)
-# 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
+# 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()
+
+set(public_headers)
+list(APPEND public_headers
+ include/attribute.h
+ include/attribute.def
+ 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_read_write
+ test/src/serialization_read_write.cpp
+ )
-target_link_libraries(serialization_npy_test
- tosa_serialization_lib
-)
+ target_link_libraries(serialization_read_write
+ tosa_serialization_lib
+ )
-set(TOSA_SERIALIZATION_LIB_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/tosa_serialization_lib")
+ add_executable(serialization_npy_test
+ test/src/serialization_npy_test.cpp
+ )
+ 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