#
# Copyright © 2017 Arm Ltd. All rights reserved.
# SPDX-License-Identifier: MIT
#
if(BUILD_TF_LITE_PARSER)
    set(armnn_tf_lite_parser_sources)
    list(APPEND armnn_tf_lite_parser_sources
        ../../include/armnnTfLiteParser/ITfLiteParser.hpp
        ../../include/armnnTfLiteParser/Version.hpp
        TfLiteParser.hpp
        TfLiteParser.cpp
        )

    add_library_ex(armnnTfLiteParser SHARED ${armnn_tf_lite_parser_sources})

    include_directories(SYSTEM "${FLATBUFFERS_INCLUDE_PATH}")
    set_target_properties(armnnTfLiteParser PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
    target_include_directories(armnnTfLiteParser PRIVATE ../armnn)
    target_include_directories(armnnTfLiteParser PRIVATE ../armnnUtils)
    target_include_directories(armnnTfLiteParser SYSTEM PRIVATE "${TF_LITE_SCHEMA_INCLUDE_PATH}")

    # If user has explicitly specified flatbuffers lib then use that,
    # otherwise search for it based on FLATBUFFERS_BUILD_DIR
    if (FLATBUFFERS_LIBRARY)
        target_link_libraries(armnnTfLiteParser armnn ${FLATBUFFERS_LIBRARY})
    else()
        # Use PATH_SUFFIXES to help find separate libs for debug/release on Windows builds
        find_library(FLATBUFFERS_LIBRARY_DEBUG NAMES flatbuffers
                     HINTS ${FLATBUFFERS_BUILD_DIR}
                     PATH_SUFFIXES "Debug")
        find_library(FLATBUFFERS_LIBRARY_RELEASE NAMES flatbuffers
                     HINTS ${FLATBUFFERS_BUILD_DIR}
                     PATH_SUFFIXES "Release")
        target_link_libraries(armnnTfLiteParser armnn debug ${FLATBUFFERS_LIBRARY_DEBUG} optimized ${FLATBUFFERS_LIBRARY_RELEASE})
    endif()

    set_target_properties(armnnTfLiteParser PROPERTIES VERSION ${TFLITE_PARSER_LIB_VERSION} SOVERSION ${TFLITE_PARSER_LIB_SOVERSION} )

    install(TARGETS armnnTfLiteParser
            LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
            RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
