#
#
# ***********************************************************************************
# * Copyright (C) 2020 - 2020, BlockSettle AB
# * Distributed under the GNU Affero General Public License (AGPL v3)
# * See LICENSE or http://www.gnu.org/licenses/agpl.html
# *
# **********************************************************************************
#
#
PROJECT( ${BLOCKSETTLE_HW_LIBRARY_NAME} )

SET(BLOCKSETTLE_HW_ROOT ${CMAKE_CURRENT_SOURCE_DIR})

file(COPY ${THIRD_PARTY_COMMON_DIR}/hidapi/hidapi.h
    DESTINATION ${BLOCKSETTLE_HW_ROOT}/ledger/hidapi)
file(COPY ${THIRD_PARTY_COMMON_DIR}/hidapi/hid.c
    DESTINATION ${BLOCKSETTLE_HW_ROOT}/ledger/hidapi)

FILE(GLOB SOURCES
   *.cpp
   trezor/*.cpp
   ledger/*.cpp
   ledger/hidapi/*.c
)

FILE(GLOB HEADERS
   *.h
   trezor/*.h
   ledger/*.h
   ledger/hidapi/*.h
)

INCLUDE_DIRECTORIES( ${WALLET_LIB_INCLUDE_DIR} )
INCLUDE_DIRECTORIES( ${BS_NETWORK_INCLUDE_DIR} )
INCLUDE_DIRECTORIES( ${COMMON_LIB_INCLUDE_DIR} )

if (UNIX)
    INCLUDE_DIRECTORIES( ${LIBUSB_INCLUDE_DIR} )
endif (UNIX)

SET(GENERATED_SOURCE_FILES "")
SET(GENERATED_HEADER_FILES "")
SET(GENERATED_INCLUDE_DIRS "")

FUNCTION(GENERATE_PROTO IN_DIR OUT_DIR)
   FILE(MAKE_DIRECTORY ${OUT_DIR})

   FILE(GLOB PROTO_FILES ${IN_DIR}/*.proto)

   FOREACH(PROTO_FILE ${PROTO_FILES})
      GET_FILENAME_COMPONENT(PROTO_NAME "${PROTO_FILE}" NAME_WE)

      SET(PROTO_SOURCE_FILE "${OUT_DIR}/${PROTO_NAME}.pb.cc")
      SET(PROTO_HEADER_FILE "${OUT_DIR}/${PROTO_NAME}.pb.h")

      SET(PROTO_SOURCE_FILES ${PROTO_SOURCE_FILES} ${PROTO_SOURCE_FILE})
      SET(PROTO_HEADER_FILES ${PROTO_HEADER_FILES} ${PROTO_HEADER_FILE})

      ADD_CUSTOM_COMMAND(OUTPUT ${PROTO_SOURCE_FILE}
                         OUTPUT ${PROTO_HEADER_FILE}
                         DEPENDS ${PROTO_FILE}
                         COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ${PROTO_FILE} --cpp_out=${OUT_DIR} --proto_path=${IN_DIR}
                         WORKING_DIRECTORY ${BLOCKSETTLE_HW_ROOT}
      )
   ENDFOREACH(PROTO_FILE)

   SET(GENERATED_SOURCE_FILES ${GENERATED_SOURCE_FILES} ${PROTO_SOURCE_FILES} PARENT_SCOPE)
   SET(GENERATED_HEADER_FILES ${GENERATED_HEADER_FILES} ${PROTO_HEADER_FILES} PARENT_SCOPE)

   SET(GENERATED_INCLUDE_DIRS ${GENERATED_INCLUDE_DIRS} ${OUT_DIR} PARENT_SCOPE)

ENDFUNCTION(GENERATE_PROTO)

GENERATE_PROTO("${THIRD_PARTY_COMMON_DIR}/trezorCommon" "${BLOCKSETTLE_HW_ROOT}/trezor/generated_proto")

ADD_LIBRARY(${BLOCKSETTLE_HW_LIBRARY_NAME} ${GENERATED_SOURCE_FILES} ${GENERATED_HEADER_FILES} ${SOURCES} ${HEADERS})

TARGET_LINK_LIBRARIES(${BLOCKSETTLE_HW_LIBRARY_NAME}
   ${LIBUSB_LIB}
   ${BS_NETWORK_LIB_NAME}
   ${CPP_WALLET_LIB_NAME}
   ${COMMON_LIB_NAME}
   ${PROTO_LIB}
   Qt5::Core
   Qt5::Network
)


