diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 92 |
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 |