#
# Copyright 2019,2020 NXP
# SPDX-License-Identifier: Apache-2.0
#
#

CMAKE_MINIMUM_REQUIRED(VERSION 3.5)

# Don't do an in-source build
# ###########################
#if(${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR})
#    message( "  In-source builds are not allowed." )
#    message( "Create a specific build directories under tls_client" )
#    message( "  mkdir build" )
#    message( "  cd build" )
#    message( "  cmake ../." )
#    message( FATAL_ERROR "  In-source builds not allowed.  Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt and CMakeFiles folder." )
#endif()
#
#MESSAGE("(1) ${PROJECT_SOURCE_DIR}")
#MESSAGE("(2) ${PROJECT_BINARY_DIR}")

PROJECT(tls_client)

INCLUDE(/usr/local/share/se05x/cmake_options_installed.cmake)

SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_BUILD_TYPE Debug)

# Applet specific settings
IF(SSS_HAVE_APPLET_A71CH)
    MESSAGE("Secure Element: A71CH")
    SET(SE_LIB liba71ch)
ELSEIF(SSS_HAVE_APPLET_SE05X_C)
    MESSAGE("Secure Element: SE05X")
    SET(SE_LIB libse05x)
ELSE()
    MESSAGE(ERROR "Either SE05X_C or A71CH required (todo: extend for SE050A/B)")
ENDIF(SSS_HAVE_APPLET_A71CH)

# Interface specific settings
IF(SSS_HAVE_SMCOM_JRCP_V2)
    MESSAGE("JRCP V2 interface")
    ADD_DEFINITIONS(-DSMCOM_JRCP_V2)
ELSEIF(SSS_HAVE_SMCOM_JRCP_V1)
    MESSAGE("JRCP V1 interface")
ELSEIF(SSS_HAVE_SMCOM_SCI2C)
    MESSAGE("SCI2C interface")
ELSEIF(SSS_HAVE_SMCOM_T1OI2C)
    MESSAGE("T1oI2C interface")
    ADD_DEFINITIONS(-DT1oI2C -DT1oI2C_UM11225)
ELSE()
    MESSAGE(ERROR "No supported/known SMCOM implementation available")
ENDIF(SSS_HAVE_SMCOM_JRCP_V2)

FIND_PACKAGE(OpenSSL) # Find the OpenSSL Package
IF(OPENSSL_FOUND)
    MESSAGE("Found: ${OPENSSL_CRYPTO_LIBRARY} and ${OPENSSL_SSL_LIBRARY}")
    INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
    ADD_DEFINITIONS(-DOPENSSL_LOAD_CONF)
ELSE()
    MESSAGE(ERROR "OpenSSL required")
ENDIF()

INCLUDE_DIRECTORIES(/usr/local/include/se05x ../common)

ADD_EXECUTABLE(
    tlsSe050Client
    ../common/snw_sss.cpp
    ../common/snw_util.cpp
    src/tlsSe050Client.cpp
)

MESSAGE("OPENSSL_CRYPTO_LIBRARY: " ${OPENSSL_CRYPTO_LIBRARY})

MESSAGE("OPENSSL_SSL_LIBRARY: " ${OPENSSL_SSL_LIBRARY})

# Comment / put to false to link against static libraries
SET(LINK_TO_SHARED TRUE)

IF(SSS_HAVE_Host_Cygwin)
    MESSAGE("Cygwin Host")
    SET(MY_LIBRARIES_PREFIX "/usr/local/lib/")
    IF(LINK_TO_SHARED)
        MESSAGE("Linking to shared libraries")
        SET(MY_LIB_EXTENSION "dll.a")
    ELSE()
        MESSAGE("Linking to static libraries")
        SET(MY_LIB_EXTENSION "a")
    ENDIF(LINK_TO_SHARED)
ELSE()
    SET(MY_LIBRARIES_PREFIX "")
    IF(LINK_TO_SHARED)
        MESSAGE("Linking to shared libraries")
        SET(MY_LIB_EXTENSION "so")
    ELSE()
        MESSAGE("Linking to static libraries")
        SET(MY_LIB_EXTENSION "a")
    ENDIF(LINK_TO_SHARED)
ENDIF(SSS_HAVE_Host_Cygwin)

TARGET_LINK_LIBRARIES(
    tlsSe050Client
    ${MY_LIBRARIES_PREFIX}libSSS_APIs.${MY_LIB_EXTENSION}
    ${MY_LIBRARIES_PREFIX}${SE_LIB}.${MY_LIB_EXTENSION}
    ${MY_LIBRARIES_PREFIX}liba7x_utils.${MY_LIB_EXTENSION}
    ${MY_LIBRARIES_PREFIX}libsmCom.${MY_LIB_EXTENSION}
    ${MY_LIBRARIES_PREFIX}libex_common.${MY_LIB_EXTENSION}
    ${OPENSSL_CRYPTO_LIBRARY}
    ${OPENSSL_SSL_LIBRARY}
)

IF(SSS_HAVE_SMCOM_JRCP_V2)
    TARGET_LINK_LIBRARIES(tlsSe050Client ${MY_LIBRARIES_PREFIX}libjrcplib.${MY_LIB_EXTENSION})
ENDIF(SSS_HAVE_SMCOM_JRCP_V2)

IF(NXPInternal)
    ADD_EXECUTABLE(
        tstTlsSe050Client
        ../common/snw_sss.cpp
        ../common/snw_util.cpp
        tst/tstTlsSe050Client.cpp
    )

    TARGET_LINK_LIBRARIES(
        tstTlsSe050Client
        ${MY_LIBRARIES_PREFIX}libSSS_APIs.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}${SE_LIB}.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}liba7x_utils.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}libsmCom.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}libex_common.${MY_LIB_EXTENSION}
        ${OPENSSL_CRYPTO_LIBRARY}
        ${OPENSSL_SSL_LIBRARY}
        # libstdc++.${MY_LIB_EXTENSION}
    )

    IF(SSS_HAVE_SMCOM_JRCP_V2)
        TARGET_LINK_LIBRARIES(tstTlsSe050Client ${MY_LIBRARIES_PREFIX}libjrcplib.${MY_LIB_EXTENSION})
    ENDIF(SSS_HAVE_SMCOM_JRCP_V2)

    ADD_EXECUTABLE(ecdhKeyAgreement ../common/snw_sss.cpp tst/ecdhKeyAgreement.c)

    TARGET_LINK_LIBRARIES(
        ecdhKeyAgreement
        ${MY_LIBRARIES_PREFIX}libSSS_APIs.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}${SE_LIB}.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}liba7x_utils.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}libsmCom.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}libex_common.${MY_LIB_EXTENSION}
        # libstdc++.${MY_LIB_EXTENSION}
        ${OPENSSL_CRYPTO_LIBRARY}
        ${OPENSSL_SSL_LIBRARY}
    )

    IF(SSS_HAVE_SMCOM_JRCP_V2)
        TARGET_LINK_LIBRARIES(ecdhKeyAgreement ${MY_LIBRARIES_PREFIX}libjrcplib.${MY_LIB_EXTENSION})
    ENDIF(SSS_HAVE_SMCOM_JRCP_V2)

    ADD_EXECUTABLE(
        tstTlsSe050ClientConnectionLoop
        ../common/snw_sss.cpp
        ../common/snw_util.cpp
        tst/tstTlsSe050ClientConnectionLoop.cpp
    )

    TARGET_LINK_LIBRARIES(
        tstTlsSe050ClientConnectionLoop
        ${MY_LIBRARIES_PREFIX}libSSS_APIs.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}${SE_LIB}.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}liba7x_utils.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}libsmCom.${MY_LIB_EXTENSION}
        ${MY_LIBRARIES_PREFIX}libex_common.${MY_LIB_EXTENSION}
        # libstdc++.${MY_LIB_EXTENSION}
        ${OPENSSL_CRYPTO_LIBRARY}
        ${OPENSSL_SSL_LIBRARY}
    )

    IF(SSS_HAVE_SMCOM_JRCP_V2)
        TARGET_LINK_LIBRARIES(tstTlsSe050ClientConnectionLoop ${MY_LIBRARIES_PREFIX}libjrcplib.${MY_LIB_EXTENSION})
    ENDIF(SSS_HAVE_SMCOM_JRCP_V2)

ENDIF(NXPInternal)
