From 2a3ca9398b7777caca3f28cf5e63a768d857489b Mon Sep 17 00:00:00 2001 From: Colm Donelan Date: Thu, 25 Aug 2022 16:00:19 +0100 Subject: 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 Change-Id: I780c3345b9e55ec7928b917648174c33fe29e7fb --- CMakeLists.txt | 88 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 file 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 -- cgit v1.2.1