blob: 20faae955eef93b81fd4f6357a2bf7c6d54a4893 [file] [log] [blame]
Ruomei Yandb7c3912019-03-08 17:50:25 +00001#
Ryan OSheab5540542022-07-06 09:52:52 +01002# Copyright © 2017, 2019-2020, 2022-2023 Arm Ltd and Contributors. All rights reserved.
Ruomei Yandb7c3912019-03-08 17:50:25 +00003# SPDX-License-Identifier: MIT
4#
5if(BUILD_ARMNN_SERIALIZER)
Colm Donelan718966f2022-10-10 10:06:12 +01006 # We're using NO_SYSTEM_ENVIRONMENT_PATH to prevent a system installed
7 # flatc being found and used.
Matthew Bentham68947182019-06-10 17:11:31 +01008 find_program(FLATC flatc
9 HINTS ${FLATC_DIR}
Colm Donelan718966f2022-10-10 10:06:12 +010010 NO_SYSTEM_ENVIRONMENT_PATH
Matthew Bentham68947182019-06-10 17:11:31 +010011 DOC "Path to 'flatc', the flatbuffers compiler")
Colm Donelan718966f2022-10-10 10:06:12 +010012
Matthew Bentham68947182019-06-10 17:11:31 +010013 if (NOT FLATC)
14 message(SEND_ERROR "flatc not found. Specify the full path of the flatc executable with -DFLATC=<flatc path>")
Colm Donelan718966f2022-10-10 10:06:12 +010015 else()
16 message("Using flatc was from: ${FLATC}")
Matthew Bentham68947182019-06-10 17:11:31 +010017 endif()
18
Matteo Martincigh286080f2019-05-31 13:02:11 +010019 add_custom_command(
20 # Generate an ArmnnSchema_generated.h file if it doesn't exist, or update it when necessary otherwise
Mike Kellyf74937e2022-05-20 17:18:59 +010021 OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/../../generated/ArmnnSchema_generated.h DEPENDS ArmnnSchema.fbs
22 COMMAND ${FLATC} -o ${CMAKE_CURRENT_SOURCE_DIR}/../../generated --cpp ${CMAKE_CURRENT_SOURCE_DIR}/ArmnnSchema.fbs
Ruomei Yandb7c3912019-03-08 17:50:25 +000023 )
Mike Kellyf74937e2022-05-20 17:18:59 +010024 set_property(SOURCE Serializer.cpp APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../../generated/ArmnnSchema_generated.h)
25 set_directory_properties(PROPERTIES ADDITIONAL_CLEAN_FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../generated/)
Ruomei Yandb7c3912019-03-08 17:50:25 +000026
27 set(armnn_serializer_sources)
28 list(APPEND armnn_serializer_sources
29 ../../include/armnnSerializer/ISerializer.hpp
30 ../../include/armnnDeserializer/IDeserializer.hpp
Ruomei Yandb7c3912019-03-08 17:50:25 +000031 Serializer.hpp
32 Serializer.cpp
33 SerializerUtils.hpp
34 SerializerUtils.cpp
35 ../armnnDeserializer/Deserializer.hpp
36 ../armnnDeserializer/Deserializer.cpp
37 )
38
Ryan OSheaa3dc95e2023-03-20 11:10:40 +000039 include_directories(SYSTEM "${FLATBUFFERS_INCLUDE_PATH}")
40
41 if(BUILD_SHARED_LIBS)
Francis Murtaghcb223b72022-12-13 17:21:55 +000042 # We're going to export both a STATIC library and a SHARED library here.
Sadik Armagan8f397a12022-06-17 15:38:22 +010043 # In some instances it's easier to include the serializer directly into
44 # the target executable or library rather than have yet another .so.
Francis Murtaghcb223b72022-12-13 17:21:55 +000045 add_library(armnnSerializer-static STATIC ${armnn_serializer_sources})
Jim Flynn870b96c2022-03-25 21:24:56 +000046 add_library_ex(armnnSerializer SHARED ${armnn_serializer_sources})
Ruomei Yandb7c3912019-03-08 17:50:25 +000047
Ryan OSheab5540542022-07-06 09:52:52 +010048 target_include_directories(armnnSerializer-static PRIVATE ../armnn)
49 target_include_directories(armnnSerializer-static PRIVATE ../armnnUtils)
50 target_include_directories(armnnSerializer-static PRIVATE ../../generated)
Ryan OSheaa3dc95e2023-03-20 11:10:40 +000051
52 set_target_properties(armnnSerializer PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
53 set_target_properties(armnnSerializer-static PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
54 else()
55 add_library_ex(armnnSerializer STATIC ${armnn_serializer_sources})
56 set_target_properties(armnnSerializer PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
Ryan OSheab5540542022-07-06 09:52:52 +010057 endif()
Mike Kellyf74937e2022-05-20 17:18:59 +010058
Ryan OSheaa3dc95e2023-03-20 11:10:40 +000059 target_include_directories(armnnSerializer PRIVATE ../armnn)
60 target_include_directories(armnnSerializer PRIVATE ../armnnUtils)
61 target_include_directories(armnnSerializer PRIVATE ../../generated)
62
Mike Kellyf74937e2022-05-20 17:18:59 +010063 list(APPEND armnn_serializer_sources
64 ArmnnSchema_generated.h
65 )
Ruomei Yandb7c3912019-03-08 17:50:25 +000066
67 # System include to suppress warnings for flatbuffers generated files
68 target_include_directories(armnnSerializer SYSTEM PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
69
70 target_link_libraries(armnnSerializer armnn ${FLATBUFFERS_LIBRARY})
Ryan OSheaa3dc95e2023-03-20 11:10:40 +000071 if (BUILD_SHARED_LIBS)
Ryan OSheab5540542022-07-06 09:52:52 +010072 install(TARGETS armnnSerializer-static
73 EXPORT armnn-targets
74 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
75 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
76 )
77 endif()
Sadik Armagan8f397a12022-06-17 15:38:22 +010078
Matthew Benthama7b79282019-06-03 13:00:50 +010079 install(TARGETS armnnSerializer
Derek Lambertieac4adb2020-08-25 13:05:59 +010080 EXPORT armnn-targets
81 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
82 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
83 )
Matteo Martincighbccc3452019-10-18 14:59:19 +010084 set_target_properties(armnnSerializer PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION} )
Matthew Benthama7b79282019-06-03 13:00:50 +010085endif()